卷積神經網絡的權值初始化方法

卷積層

高斯分佈

 從均值爲0,方差爲1的高斯分佈中採樣,作爲初始權值。PyTorch中的相關函數如下:

torch.nn.init.normal_(tensor, mean=0, std=1)

kaiming高斯分佈

 由FAIR的大牛Kaiming He提出來的卷積層權值初始化方法,目的是使得每一卷積層的輸出的方差都爲1,具體數學推導可以參考論文[1]. 權值的初始化方法如下:

Wl~N(0,2(1+a2)×nl)

其中,a爲Relu或Leaky Relu的負半軸斜率,nl 爲輸入的維數,即nl=2×channel
在PyTorch中,相關函數如下:

torch.nn.init.kaiming_normal_(tensor, a=0, mode='fan_in', nonlinearity='leaky_relu')

 上述輸入參數中,tensor是torch.Tensor變量,a爲Relu函數的負半軸斜率,mode表示是讓前向傳播還是反向傳播的輸出的方差爲1,nonlinearity可以選擇是relu還是leaky_relu.

xavier高斯分佈

 Glorot正態分佈初始化方法,也稱作Xavier正態分佈初始化,參數由0均值,標準差爲sqrt(2 / (fan_in + fan_out))的正態分佈產生,其中fan_in和fan_out是分別權值張量的輸入和輸出元素數目. 這種初始化同樣是爲了保證輸入輸出的方差不變,但是原論文中([2])是基於線性函數推導的,同時在tanh激活函數上有很好的效果,但不適用於ReLU激活函數。

std=gain×2fan_in+fan_out

在PyTorch中,相關函數如下:
torch.nn.init.xavier_normal_(tensor, gain=1)


BatchNorm層

回顧
BatchNorm

初始化

 對於scale因子γ ,初始化爲1;對於shift因子β ,初始化爲0.

全連接層

 對於全連接層,除了可以使用卷積層的基於高斯分佈的初始方法外,也有使用均勻分佈(uniform distribution)的初始化方法,或者直接設置爲常量(constant)。

還有其它這裏沒有細講的初始化方法,包括:
Orthogonal:用隨機正交矩陣初始化。
sparse:用稀疏矩陣初始化。
TruncatedNormal:截尾高斯分佈,類似於高斯分佈,位於均值兩個標準差以外的數據將會被丟棄並重新生成,形成截尾分佈。PyTorch中似乎沒有相關實現。

參考

[1] Delving deep into rectifiers: Surpassing human-level performance on ImageNet classification — He, K. et al. (2015)
[2] Understanding the difficulty of training deep feedforward neural networks — Glorot, X. & Bengio, Y. (2010)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章