權值初始化 - Xavier和MSRA方法
設計好神經網路結構以及loss function 後,訓練神經網路的步驟如下:
- 初始化權值引數
- 選擇一個合適的梯度下降演算法(例如:Adam,RMSprop等)
- 重複下面的迭代過程:
- 輸入的正向傳播
- 計算loss function 的值
- 反向傳播,計算loss function 相對於權值引數的梯度值
- 根據選擇的梯度下降演算法,使用梯度值更新每個權值引數
初始化
神經網路的訓練過程是一個迭代的過程,俗話說:好的開始就是成功的一半,所以的權值引數的初始化的值對網路最終的訓練結果有很大的影響。 過大或者過小的初始值,對網路收斂的結果都會有不好的結果。
所有的引數初始化為0或者相同的常數
最簡單的初始化方法就是將權值引數全部初始化為0或者一個常數,但是使用這種方法會導致網路中所有的神經元學習到的是相同的特徵。
假設神經網路中只有一個有2個神經元的隱藏層,現在將偏置引數初始化為:\(bias = 0\),權值矩陣初始化為一個常數\(\alpha\)。 網路的輸入為\((x_1,x_2)\),隱藏層使用的啟用函式為\(ReLU\),則隱藏層的每個神經元的輸出都是\(relu(\alpha x_1 + \alpha x_2)\)。 這就導致,對於loss function的值來說,兩個神經元的影響是一樣的,在反向傳播的過程中對應引數的梯度值也是一樣,也就說在訓練的過程中,兩個神經元的引數一直保持一致,其學習到的特徵也就一樣,相當於整個網路只有一個神經元。
過大或者過小的初始化
如果權值的初始值過大,則會導致梯度爆炸,使得網路不收斂;過小的權值初始值,則會導致梯度消失,會導致網路收斂緩慢或者收斂到區域性極小值。
如果權值的初始值過大,則loss function相對於權值引數的梯度值很大,每次利用梯度下降更新引數的時,引數更新的幅度也會很大,這就導致loss function的值在其最小值附近震盪。
而過小的初值值則相反,loss關於權值引數的梯度很小,每次更新引數時,更新的幅度也很小,著就會導致loss的收斂很緩慢,或者在收斂到最小值前在某個區域性的極小值收斂了。
Xavier初始化
Xavier初始化,由Xavier Glorot 在2010年的論文 Understanding the difficulty of training deep feedforward neural networks 提出。
- 每一層神經元啟用值的均值要保持為0
- 每一層啟用的方差應該保持不變。
在正向傳播時,每層的啟用值的方差保持不變;在反向傳播時,每層的梯度值的方差保持不變。
基於上述的準則,初始的權值引數\(W^l\)(\(l\)為網路的第\(l\)層)要符合以下公式
\[
\begin{aligned} W^{[l]} & \sim \mathcal{N}\left(\mu=0, \sigma^{2}=\frac{1}{n^{[l-1]}}\right) \\ b^{[l]} &=0 \end{aligned}
\]
其中\(n^{n-1}\)是第\(l-1\)層的神經元的個數。 也就是說,初始的權值\(w\)可以從均值\(\mu = 0\),方差為\(\sigma^{2}=\frac{1}{n ^{l-1}}\)的正態分佈中隨機選取。
正向傳播的推導過程:
推導過程中的三個假設:
- 權值矩陣\(w\)是獨立同分布的,且其均值為0
- 每一層的輸入\(a\)是獨立同分布的,且均值也為0
- \(w\)和\(a\)是相互獨立的
設\(L\)層的權值矩陣為\(W\),偏置為\(b\),其輸入為\(a\)
\[
z^l = w^la^{l-1} + b^l
\]
則
\[
Var(z^l) = Var(\sum_{i=0}^nw_{i}^la_i^l) = \sum_{i=0}^n Var(w_{i}^la_i^{l-1})
\]
有統計概率的知識可得到:(第一個假設\(W\),\(x\)相互獨立)
\[
Var(w_ix_i) = E^2(w_i)Var(w_i) + E^2(x_i)Var(x_i) + Var(w_i)Var(x_i)
\]
由第一第二個假設可知:\(l\)層輸入的均值為0,權值引數\(W\)的均值也為0,即:\(E(x_i) = 0,E(w_i) = 0\)則有:\(Var(w_ix_i) = Var(w_i)Var(x_i)\),即
\[ Var(z^l) = \sum_{i=0}^nVar(w_i^l)Var(x_i^{l-1}) \]
設權值矩陣\(W\)獨立同分布的則有\(Var(w^l) = Var(w_{11}^l) = \cdots = Var(W_{ij}^l)\),輸入\(a^{l-1}\)也是獨立同分布的有:\(Var(a^{l-1}) = Var(a_1^{l-1}) = \cdots = Var(a_i^{l-1})\)
則有
\[
Var(z^l) = n^{l-1}Var(w^l)Var(a^{l-1}),(n-1)為上一層神經元的個數
\]
這裡得出了第\(l\)層輸入到啟用函式中的值\(z^l\)與其輸入\(a^{l-1}\)(也就是上一層輸出的啟用值)的方差之間的關係。但我們假設的是每一層輸出的啟用值的方差保持不變,也就是說要得到\(Var(a^l)\)和\(Var(a^{l-1})\)之間的關係。
設\(f\)為啟用函式,則有
\[
a^l = f(z^l)
\]
Xavier假設的啟用函式為\(tanh\),其函式曲線為
其中間的部分可以近似線性(linear regime),而在訓練的過程就要保證啟用值是落在這個線性狀體的區間內的,不然就會出現梯度飽和的情況。所以,這裡可以近似的有
\[
a^l = tanh(z^l)
\]
也就是說:
\[
Var(a^l) = Var(z^l) = n^{l-1}Var(w^l)Var(a^{l-1})
\]
要讓每一層的啟用值的方差保持不變,則有\(Var(a^l) = Var(a^{l-1})\),既有
\[
Var(w^l) = \frac{1}{n^{l-1}}
\]
通常輸入神經元和輸出神經元的個數不一定總是相同的,這裡取兩者的均值
\[
\forall i, \operatorname{Var}\left(W^{l+1}\right)=\frac{2}{n_{l}+n_{l+1}}
\]
限制
對於權值的初始化,Glorot提出兩個準則:
- 各個層啟用值的方差保持不變(正向傳播)
- 各個層的梯度值的方差保持不變(反向傳播)
在Xavier的推導的過程中,做了以下假設:
- 權值矩陣\(w\)是獨立同分布的,且其均值為0
- 每一層的輸入\(a\)是獨立同分布的,且均值也為0
- \(w\)和\(a\)是相互獨立的
但是,對Xavier限制最大的則是,其是基於tanh作為啟用函式的。
上述公式的詳細推導過程可參見 http://www.deeplearning.ai/ai-notes/initialization/ 。
Xavier的初始化有個假設條件,啟用函式關於0對稱,且主要針對於全連線神經網路。適用於tanh和softsign。
均勻分佈
通過上面的推導,得出權值矩陣的均值為:0,方差為
\[
\forall i, \operatorname{Var}\left(W^{l+1}\right)=\frac{2}{n_{l}+n_{l+1}}
\]
$[a,b] \(間的均勻分佈的方差為\) var = \frac{(b-a)^2}{12}\(,設\)F_{in}\(為輸入的神經元個數,\)F_{out}$為輸出的神經元個數
\[
limit = \sqrt{\frac{6}{F_{in} + F_{out}}}
\]
則權值引數從分佈
\[
W \sim U[-limit,limit] \rightarrow W \sim U\left[-\sqrt{\frac{6}{F_{in} + F_{out}}}, + \sqrt{\frac{6}{F_{in} + F_{out}}}\right]
\]
正態分佈
基於正態分佈的Xavier初始化從均值為0,方差為\(\sqrt{\frac{2}{F_{in} + F_{out}}}\)的正態分佈中隨機選取。
\[
W \sim N(0.0,\sqrt{\frac{2}{F_{in} + F_{out}}})
\]
He初始化(MSRA)
由 Kaiming 在論文Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification提出,由於Xavier的假設條件是啟用函式是關於0對稱的,而常用的ReLU啟用函式並不能滿足該條件。
只考慮輸入的個數,MSRA的初始化是一個均值為0,方差為\(\sqrt{\frac{2}{F_{in}}}\)的高斯分佈
\[
w \sim G\left[0, \sqrt{\frac{2}{F_{in
}}}\right]
\]
正向傳播的推導過程:
其前半部分的推導和Xavider類似
對於第\(l\)層,有如下公式 :
\[
\mathbf{y}_{l}=\mathbf{W}_{l} \mathbf{x}_{l}+\mathbf{b}_{l}
\]
其中,\(x_l\)為當前層的輸入,也是上一層的啟用後的輸出值。\(y_l\)為當前層輸入到啟用函式的值,\(w_l\)和\(b_l\)為權值和偏置。其中\(x_l\)以及\(w_l\)都是獨立同分布的,(和Xavier相同的假設條件),則有:
\[
\operatorname{Var}\left[y_{l}\right]=n_{l} \operatorname{Var}\left[w_{l} x_{l}\right]
\]
設\(w_l\)的均值為0,即\(E(w_l) = 0\),則有:
\[
\begin{align*}
\operatorname{Var}(y_l) & = n_{l}(E(W_l^2) \cdot E(x_l^2) - E^2(w_l) \cdot E^2(x_l)) \\
&= n_{l}(E(W_l^2) \cdot E(x_l^2) - 0 \cdot E^2(x_l)) \\
& = n_{l}(E(W_l^2) \cdot E(x_l^2) - 0 \cdot E(x_l^2)) \\
& = n_{l}(E(W_l^2) \cdot E(x_l^2) - E^2(w_l) \cdot E(x_l^2)) \\
& = n_{l}(E(W_l^2) - E^2(w_l)) \cdot E(x_l^2) \\
& = n_{l} \operatorname{Var}(w_l) \cdot E(x_l^2)
\end{align*}
\]
這裡有和Xavier一個很大的不同是,這裡沒有假設輸入的值的均值為0。這是由於,使用ReLU的啟用函式,\(x_l = max(0,y_{l-1})\),每層輸出的值不可能均值為0。
上面最終得到
\[
\operatorname{Var}(y_l) = n_{l} \operatorname{Var}(w_l) \cdot E(x_l^2)
\]
初始化時通常設,\(w\)的均值為0,偏置\(b = 0\),以及\(w\)和\(x\)是相互獨立的,則有
\[
\begin{align*}
\operatorname{E}(y_l) &= \operatorname{E}(w_lx_l) \\
&= \operatorname{E}(x_l) \cdot \operatorname{E}(w_l) \\
&= 0
\end{align*}
\]
也就是說,\(y_l\)的均值為0。
再假設\(w\)是關於0對稱分佈的(均勻分佈,高斯分佈都符合),則可以得到\(y_l\)在0附近也是對稱分佈的。
這樣,使用ReLU作為啟用函式,則有
\[
x_l = max(0,y_{l-1})
\]
由於只有當\(y_{l-1} > 0\)的部分,\(x_l\)才有值,且\(y_l\)在0附近也是對稱分佈的,則可以得到
\[
\begin{align*}
\operatorname{E}(x_l^2) &=\frac{1}{2} \operatorname{E}(y_{l-1}^2) \\
&= \frac{1}{2}({E}(y_{l-1}^2) - E(y_{l-1})),(由於E(y_{l-1}) = 0)\\
& = \frac{1}{2}\operatorname{Var}(y_{l-1})
\end{align*}
\]
將得到的\(\operatorname{E}(x_l^2) = \frac{1}{2}\operatorname{Var}(y_{l-1})\),帶入到 $\operatorname{Var}(y_l) = n_{l} \operatorname{Var}(w_l) \cdot E(x_l^2) $ 則可以得到
\[
\operatorname{Var}\left[y_{l}\right]=\frac{1}{2} n_{l} \operatorname{Var}\left[w_{l}\right] \operatorname{Var}\left[y_{l-1}\right]
\]
將所有層的方差累加到一起有:
\[
\operatorname{Var}\left[y_{L}\right]=\operatorname{Var}\left[y_{1}\right]\left(\prod_{l=2}^{L} \frac{1}{2} n_{l} \operatorname{Var}\left[w_{l}\right]\right)
\]
為了是每一層的方差保持不變,則有:
\[
\frac{1}{2} n_{l} \operatorname{Var}\left[w_{l}\right]=1, \quad \forall l
\]
也即得到 權值矩陣的方差應該是
\[
\sqrt{2 / n_{l}}
\]
和Xavier的方法,也可以使用正態分佈或者均勻分佈來取得初始的權值矩陣的值。
正態分佈
\[
W \sim N(0.0,\sqrt{2 / n_{l}})
\]
均勻分佈
\[
W \sim U[-\sqrt{6 / n_{l}},\sqrt{6 / n_{l}}]
\]
### 總結及使用的概率公式
正確的初始化方法應該避免指數級地減小或放大輸入值的大小,防止梯度“飽和”。 Glorot提出兩個準則:
- 各個層啟用值的方差保持不變(正向傳播)
- 各個層的梯度值的方差保持不變(反向傳播)
通常初始的權值矩陣的均值為0.
這這些條件的基礎上,Glorot 使用\(tanh\)作為啟用函式,並假設輸入值的均值為0,提出了Xavier初始化的方法。
而Kaiming使用ReLU作為啟用函式,就無法滿足數值的均值為0的條件,因此使用Xavier來初始化ReLU作為啟用函式的網路,效果也就不是那麼理想。其提出了MSRA的初始化方法,來解決該問題。
附
推導時使用的概率公式:
\[
D(x)=E\left(x^{2}\right)-E^{2}(x)
\]
\[ D(x y)=E\left(x^{2} y^{2}\right)-E^{2}(x y)=E\left(x^{2}\right) E\left(y^{2}\right)-E^{2}(x) E^{2}(y) \]
如果\(E(y) = 0\),則有:
\[
D(xy) = D(y)E(x^2)
\]
如果\(x,y\)是相互獨立的,則有
\[
E(xy) = E(x)E(y)
\]
本文只推導了正向傳播的過程,對於反向傳播的推導可參考原始論文
- [1] Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification
- [2] Understanding the difficulty of training deep feedforward neural networksf