PyTorch 學習筆記(四):權值初始化的十種方法

本文截取自《PyTorch 模型訓練實用教程》,獲取全文pdf請點擊:https://github.com/tensor-yu/PyTorch_Tutorial


PyTorch在torch.nn.init中提供了常用的初始化方法函數,這裏簡單介紹,方便查詢使用。
介紹分兩部分:

Xavier,kaiming系列;

其他方法分佈

Xavier初始化方法,論文在《Understanding the difficulty of training deep feedforward neural networks》
公式推導是從“方差一致性”出發,初始化的分佈有均勻分佈和正態分佈兩種。
1. Xavier均勻分佈
torch.nn.init.xavier_uniform_(tensor, gain=1)
xavier初始化方法中服從均勻分佈U(−a,a) ,分佈的參數a = gain * sqrt(6/fan_in+fan_out),
這裏有一個gain,增益的大小是依據激活函數類型來設定
eg:nn.init.xavier_uniform_(w, gain=nn.init.calculate_gain(‘relu’))
PS:上述初始化方法,也稱爲Glorot initialization

2. Xavier正態分佈

torch.nn.init.xavier_normal_(tensor, gain=1)
xavier初始化方法中服從正態分佈,
mean=0,std = gain * sqrt(2/fan_in + fan_out)

kaiming初始化方法,論文在《 Delving deep into rectifiers: Surpassing human-level performance on ImageNet classification》,公式推導同樣從“方差一致性”出法,kaiming是針對xavier初始化方法在relu這一類激活函數表現不佳而提出的改進,詳細可以參看論文。

3. kaiming均勻分佈

torch.nn.init.kaiming_uniform_(tensor, a=0, mode=‘fan_in’, nonlinearity=‘leaky_relu’)
此爲均勻分佈,U~(-bound, bound), bound = sqrt(6/(1+a^2)*fan_in)
其中,a爲激活函數的負半軸的斜率,relu是0
mode- 可選爲fan_in 或 fan_out, fan_in使正向傳播時,方差一致; fan_out使反向傳播時,方差一致
nonlinearity- 可選 relu 和 leaky_relu ,默認值爲 。 leaky_relu
nn.init.kaiming_uniform_(w, mode=‘fan_in’, nonlinearity=‘relu’)

4. kaiming正態分佈

torch.nn.init.kaiming_normal_(tensor, a=0, mode=‘fan_in’, nonlinearity=‘leaky_relu’)
此爲0均值的正態分佈,N~ (0,std),其中std = sqrt(2/(1+a^2)*fan_in)
其中,a爲激活函數的負半軸的斜率,relu是0
mode- 可選爲fan_in 或 fan_out, fan_in使正向傳播時,方差一致;fan_out使反向傳播時,方差一致
nonlinearity- 可選 relu 和 leaky_relu ,默認值爲 。 leaky_relu
nn.init.kaiming_normal_(w, mode=‘fan_out’, nonlinearity=‘relu’)
2.其他

5. 均勻分佈初始化

torch.nn.init.uniform_(tensor, a=0, b=1)
使值服從均勻分佈U(a,b)

6. 正態分佈初始化

torch.nn.init.normal_(tensor, mean=0, std=1)
使值服從正態分佈N(mean, std),默認值爲0,1

7. 常數初始化

torch.nn.init.constant_(tensor, val)
使值爲常數val nn.init.constant_(w, 0.3)

8. 單位矩陣初始化

torch.nn.init.eye_(tensor)
將二維tensor初始化爲單位矩陣(the identity matrix)

9. 正交初始化

torch.nn.init.orthogonal_(tensor, gain=1)
使得tensor是正交的,論文:Exact solutions to the nonlinear dynamics of learning in deep linear neural networks” - Saxe, A. et al. (2013)

10. 稀疏初始化

torch.nn.init.sparse_(tensor, sparsity, std=0.01)
從正態分佈N~(0. std)中進行稀疏化,使每一個column有一部分爲0
sparsity- 每一個column稀疏的比例,即爲0的比例
nn.init.sparse_(w, sparsity=0.1)

11. 計算增益

torch.nn.init.calculate_gain(nonlinearity, param=None)

nonlinearity gain
Linear / Identity 1
Conv{1,2,3}D 1
Sigmoid 1
Tanh 5/3
ReLU sqrt(2)
Leaky Relu sqrt(2/1+neg_slop^2)

轉載請註明出處:https://blog.csdn.net/u011995719/article/details/85107122

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