“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\),於是有:
其中,忽略偏置b
假設x和w是獨立同分布,則\(Var(z)=n*\delta_x*\delta_w\),為了更好地表達,將層號放在變量上標處:
全連接和卷積層都可以看做是n個參數的線性變換,進而有:\(\delta_x^3=n^2*\delta_x^2*\delta_w^2\),如果k層的網絡,有:
從上式中可以看出,后面的連乘是很危險的,如果\(n^i*\delta_w^i\)總是大於1,最后的方差為越來越大;如果乘機小於1,最后的方差就越來越小。所以我們回頭再看第一個公式:
如果滿足\(\delta_x^2=\delta_x^1\),即保證輸出方差和輸出方差一直便可以避免上述問題,得到:
對於任意一層i,應該滿足:
\(n^i\)是w參數的輸入層。
反向傳播的情況
假設第k層的梯度為\(\frac{\partial{Loss}}{\partial{x_j^k}}\),對於第k-1層,有:
這里的參數n表示的是輸出端的數目。
如果每層的方差服從均值為o,方差為某值的分布,有:
對於k層的網絡,可以推導得到:
上式的連乘同樣危險,所以我們取\(Var(\frac{\partial{Loss}}{\partial{x_j^{k-1}}}) = Var(\frac{\partial{Loss}}{\partial{x_i^k}})\)
故:
這里的n表示輸出的維度。
為了均衡考慮,我們設置方差應該滿足
實際應用
論文提出使用均勻分布進行初始化,我們設定權重要初始化的范圍是[-a,a]。而均勻分布的方差為:
所以:
這就是xavier初始化方法,即把參數初始化成下面范圍內的均勻分布: