深度學習中Xavier初始化


“Xavier”初始化方法是一種很有效的神經網絡初始化方法,方法來源於2010年的一篇論文《Understanding the difficulty of training deep feedforward neural networks》。

文章主要的目標就是使得每一層輸出的方差應該盡量相等。下面進行推導:每一層的權重應該滿足哪種條件才能實現這個目標。

和方差相關的定理

假設有隨機變量x和w,它們都服從均值為0,方差為σ的分布,且獨立同分布,那么:

  • wx就會服從均值為0,方差為σσ的分布
  • wx+wx就會服從均值為0,方差為2σσ的分布

文章實驗用的激活函數是tanh激活函數,函數形狀如下左圖,右圖是其導數的函數形狀。

激活函數

從上圖可以看出,當x處於0附近時,其導數/斜率接近與1,可以近似將其看成一個線性函數,即f(x)=x。

假設輸入數據的均值為o,方差為\(\delta_x\),如果第一層是卷基層,卷基層共n個參數,\(n=C*k_h*k_w\),於是有:

\[z_j= \sum_{i}^{n}{w_i*x_i} \]

其中,忽略偏置b

假設x和w是獨立同分布,則\(Var(z)=n*\delta_x*\delta_w\),為了更好地表達,將層號放在變量上標處:

\[\delta_x^2=n^1*\delta_x^1*\delta_w^1 \]

全連接和卷積層都可以看做是n個參數的線性變換,進而有:\(\delta_x^3=n^2*\delta_x^2*\delta_w^2\),如果k層的網絡,有:

\[\delta_x^k=n^{k-1}*\delta_x^{k-1}*\delta_w^{k-1} =n^{k-1}*n^{k-2}*\delta_x^{k-2}*\delta_w^{k-2}*\delta_w^{k-1} =\delta_x^1*\prod_{i=1}^{k-1}{(n^i*\delta_w^i)}\]

從上式中可以看出,后面的連乘是很危險的,如果\(n^i*\delta_w^i\)總是大於1,最后的方差為越來越大;如果乘機小於1,最后的方差就越來越小。所以我們回頭再看第一個公式:

\[\delta_x^2=n^1*\delta_x^1*\delta_w^1 \]

如果滿足\(\delta_x^2=\delta_x^1\),即保證輸出方差和輸出方差一直便可以避免上述問題,得到:

\[\delta_w^1=\frac{1}{n^1} \]

對於任意一層i,應該滿足:

\[\delta_w^i=\frac{1}{n^i} \]

\(n^i\)是w參數的輸入層。

反向傳播的情況

假設第k層的梯度為\(\frac{\partial{Loss}}{\partial{x_j^k}}\),對於第k-1層,有:

\[\frac{\partial{Loss}}{\partial{x_j^{k-1}}} = \sum_{i=1}^{n}{\frac{\partial{Loss}}{\partial{x_i^k}}*w_j^{ki}} \]

這里的參數n表示的是輸出端的數目。

如果每層的方差服從均值為o,方差為某值的分布,有:

\[Var(\frac{\partial{Loss}}{\partial{x_j^{k-1}}})= n^k*Var(\frac{\partial{Loss}}{\partial{x_i^k}})*\delta_w^k\]

對於k層的網絡,可以推導得到:

\[Var(\frac{\partial{Loss}}{\partial{x_j^{1}}} =Var(\frac{\partial{Loss}}{\partial{x_i^k}})* \prod_{2}^{k}{(n^i*\delta_w^i)} \]

上式的連乘同樣危險,所以我們取\(Var(\frac{\partial{Loss}}{\partial{x_j^{k-1}}}) = Var(\frac{\partial{Loss}}{\partial{x_i^k}})\)
故:

\[\delta_w^k = \frac{1}{n^k} \]

這里的n表示輸出的維度

為了均衡考慮,我們設置方差應該滿足

\[\delta_w^k=\frac{2}{n^k+n^{k+1}} \]

實際應用

論文提出使用均勻分布進行初始化,我們設定權重要初始化的范圍是[-a,a]。而均勻分布的方差為:

\[Var(uniform)=\frac{(a-(-a))^2}{12}=\frac{a^2}{3}=\delta_w^k \]

所以:

\[a=\sqrt{\frac{6}{n^k+n^{k+1}}} \]

這就是xavier初始化方法,即把參數初始化成下面范圍內的均勻分布:

\[[-\sqrt{\frac{6}{n^k+n^{k+1}}}, \sqrt{\frac{6}{n^k+n^{k+1}}}] \]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM