1. 程式人生 > >深度學習總結(一)——引數初始化

深度學習總結(一)——引數初始化

這裡寫圖片描述

1. 引數初始化的目的是什麼?

為了讓神經網路在訓練過程中學習到有用的資訊,這意味著引數梯度不應該為0。而我們知道在全連線的神經網路中,引數梯度和反向傳播得到的狀態梯度以及入啟用值有關。那麼引數初始化應該滿足以下兩個條件:

  1. 初始化必要條件一:各層啟用值不會出現飽和現象;
  2. 初始化必要條件二:各層啟用值不為0。

2. 把引數都初始化為0會是比較好的初始化?

這樣做其實會帶來一個問題,經過正向傳播和反向傳播後,引數的不同維度之間經過相同的更新,迭代的結果是不同維度的引數是一樣的,嚴重地影響了模型的效能。一般只在訓練SLP/邏輯迴歸模型時才使用0初始化所有引數, 深度模型都不會使用0初始化所有引數。

3. 隨機生成小的隨機數

將引數初始化為小的隨機數。其中randn從均值為0,標準差是1的高斯分佈中取樣,這樣,引數的每個維度來自一個多維的高斯分佈。需要注意的是引數初始值不能取得太小,因為小的引數在反向傳播時會導致小的梯度,對於深度網路來說,也會產生梯度彌散問題,降低引數的收斂速度。

缺點:
一個神經元輸出的方差會隨著輸入神經元數量的增多而變大。對於有n個輸入單元的神經元來說,考慮χ2分佈,每個輸入的方差是1/n時,總的方差是1。

4. 標準初始化

權重引數初始化從區間均勻隨機取值。即從(-1/√d,1/√d)均勻分佈中生成當前神經元的權重,其中d為每個神經元的輸入數量。

為什麼要除以d?


這樣可以確保神經元的輸出有相同的分佈,提高訓練的收斂速度。

優點:
隱層的狀態的均值為0,方差為常量1/3,和網路的層數無關,這意味著對於sigmoid函式來說,自變數落在有梯度的範圍內。

5. Xavier初始化

優秀的初始化應該使得各層的啟用值和狀態梯度的方差在傳播過程中的方差保持一致。不然更新後的啟用值方差發生改變,造成資料的不穩定。

假設:

  1. 輸入的每個特徵方差一樣:Var(x);
  2. 啟用函式對稱:這樣就可以假設每層的輸入均值都是0;
  3. f′(0)=1;
  4. 初始時,狀態值落在啟用函式的線性區域:f′(sik)≈1。

WU[6)nj+nj+16)nj+nj+1]

這個區間是根據以下公式得到的:

(2b)212=2nj+nj+1

其中njnj+1 表示輸入和輸出維度。
啟用值的方差和層數無關,反向傳播梯度的方差和層數無關。

應用:
由於ReLU無法控制資料幅度,所以可以將其與Xavier初始化搭配使用。

6. 偏置初始化

通常偏置項初始化為0,或比較小的數,如:0.01。