設計好神經網絡結構以及loss function 後,訓練神經網絡的步驟以下:算法
神經網絡的訓練過程是一個迭代的過程,俗話說:好的開始就是成功的一半,因此的權值參數的初始化的值對網絡最終的訓練結果有很大的影響。 過大或者太小的初始值,對網絡收斂的結果都會有很差的結果。網絡
最簡單的初始化方法就是將權值參數所有初始化爲0或者一個常數,可是使用這種方法會致使網絡中全部的神經元學習到的是相同的特徵。ide
假設神經網絡中只有一個有2個神經元的隱藏層,如今將偏置參數初始化爲:\(bias = 0\),權值矩陣初始化爲一個常數\(\alpha\)。 網絡的輸入爲\((x_1,x_2)\),隱藏層使用的激活函數爲\(ReLU\),則隱藏層的每一個神經元的輸出都是\(relu(\alpha x_1 + \alpha x_2)\)。 這就致使,對於loss function的值來講,兩個神經元的影響是同樣的,在反向傳播的過程當中對應參數的梯度值也是同樣,也就說在訓練的過程當中,兩個神經元的參數一直保持一致,其學習到的特徵也就同樣,至關於整個網絡只有一個神經元。函數
若是權值的初始值過大,則會致使梯度爆炸,使得網絡不收斂;太小的權值初始值,則會致使梯度消失,會致使網絡收斂緩慢或者收斂到局部極小值。學習
若是權值的初始值過大,則loss function相對於權值參數的梯度值很大,每次利用梯度降低更新參數的時,參數更新的幅度也會很大,這就致使loss function的值在其最小值附近震盪。spa
而太小的初值值則相反,loss關於權值參數的梯度很小,每次更新參數時,更新的幅度也很小,着就會致使loss的收斂很緩慢,或者在收斂到最小值前在某個局部的極小值收斂了。設計
Xavier初始化,由Xavier Glorot 在2010年的論文 Understanding the difficulty of training deep feedforward neural networks 提出。
爲了不梯度爆炸或者梯度消失,有兩個經驗性的準則:orm
在正向傳播時,每層的激活值的方差保持不變;在反向傳播時,每層的梯度值的方差保持不變。blog
基於上述的準則,初始的權值參數\(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} \]get
其中\(n^{n-1}\)是第\(l-1\)層的神經元的個數。 也就是說,初始的權值\(w\)能夠從均值\(\mu = 0\),方差爲\(\sigma^{2}=\frac{1}{n ^{l-1}}\)的正態分佈中隨機選取。
正向傳播的推導過程:
推導過程當中的三個假設:
設\(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的推導的過程當中,作了如下假設:
可是,對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}}}) \]
由 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) \]
本文只推導了正向傳播的過程,對於反向傳播的推導可參考原始論文