卷積層
高斯分佈
從均值爲0,方差爲1的高斯分佈中採樣,作爲初始權值。PyTorch中的相關函數如下:
torch.nn.init.normal_(tensor, mean=0, std=1)
kaiming高斯分佈
由FAIR的大牛Kaiming He提出來的卷積層權值初始化方法,目的是使得每一卷積層的輸出的方差都爲1,具體數學推導可以參考論文[1]. 權值的初始化方法如下:
其中,a爲Relu或Leaky Relu的負半軸斜率, 爲輸入的維數,即 。
在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激活函數。
在PyTorch中,相關函數如下:
torch.nn.init.xavier_normal_(tensor, gain=1)
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)