权值初始化
設計好神經網絡結構以及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)層)要符合以下公式
[egin{aligned} W^{[l]} & sim mathcal{N}left(mu=0, sigma^{2}=frac{1}{n^{[l-1]}}ight) \ 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}ight)=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}ight)=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] ightarrow W sim Uleft[-sqrt{frac{6}{F_{in} + F_{out}}}, + sqrt{frac{6}{F_{in} + F_{out}}}ight]
]
正態分布
基于正態分布的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 Gleft[0, sqrt{frac{2}{F_{in
}}}ight]
]
正向傳播的推導過程:
其前半部分的推導和Xavider類似
對于第(l)層,有如下公式 :
[mathbf{y}_{l}=mathbf{W}_{l} mathbf{x}_{l}+mathbf_{l}
]
其中,(x_l)為當前層的輸入,也是上一層的激活后的輸出值。(y_l)為當前層輸入到激活函數的值,(w_l)和(b_l)為權值和偏置。其中(x_l)以及(w_l)都是獨立同分布的,(和Xavier相同的假設條件),則有:
[operatorname{Var}left[y_{l}ight]=n_{l} operatorname{Var}left[w_{l} x_{l}ight]
]
設(w_l)的均值為0,即(E(w_l) = 0),則有:
[egin{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)是相互獨立的,則有
[egin{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附近也是對稱分布的,則可以得到
[egin{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}ight]=frac{1}{2} n_{l} operatorname{Var}left[w_{l}ight] operatorname{Var}left[y_{l-1}ight]
]
將所有層的方差累加到一起有:
[operatorname{Var}left[y_{L}ight]=operatorname{Var}left[y_{1}ight]left(prod_{l=2}^{L} frac{1}{2} n_{l} operatorname{Var}left[w_{l}ight]ight)
]
為了是每一層的方差保持不變,則有:
[frac{1}{2} n_{l} operatorname{Var}left[w_{l}ight]=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)=Eleft(x^{2}ight)-E^{2}(x)
]
[D(x y)=Eleft(x^{2} y^{2}ight)-E^{2}(x y)=Eleft(x^{2}ight) Eleft(y^{2}ight)-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 networks f
總結
- 上一篇: macdown在mac OS 中的配置
- 下一篇: 十进制小数与二进制小数相互转换