Pytorch学习之旅(9)——线性层权值初始化

一、为什么要讨论权值的初始化问题?

       神经网络一般包含多级全线性层,随着层数的增加,为了保持网络的稳定,对梯度提出了要求:不能出现梯度消失或者爆炸。
       先来看一个三级全连接层网络:
三层全连接层
       此处乱入一个数学知识:
数学公式
       当某一层的输入和权值都满足 mean=0、std=1的标准正态分布时,有:        输出的方差 D=N(输入神经元的个数)
求解梯度
      而方差反映了参数的离散程度,如果后一层方差为前一层方差的N倍,在多层神经网络进行反向求导的时候,就会出现梯度爆炸的情形。

二、如何解决初始化问题

如图三所示,令输入的方差和输出的方差相等,即
{ D ( o u t ) = ∑ i = 0 n − 1 D ( i n ) ∗ D ( w ) D ( o u t ) = D ( i n ) \left\{ \begin{array}{l} D(out) = \sum_{i=0}^{n-1}D(in)*D(w) \\ D(out)=D(in) \end{array} \right. {D(out)=i=0n1D(in)D(w)D(out)=D(in)
即有:
D ( w ) = 1 n D(w)=\frac{1}{n} D(w)=n1
权值的方差为:输入神经元个数的倒数。
使用pytorch的正态分布函数初始化数据:

# m.weight.data:网络层m的权重值
# self.neural_num:输入神经元的个数
nn.init.normal_(m.weight.data, mean=0, std=np.sqrt(1/self.neural_num))

三、如果添加激活函数。。。

pytorch提供的十种初始化方法:

       1、Xavier 均匀分布
       2、Xavier正态分布
       3、Kaiming均匀分布
       4、Kaiming正态分布
       5、均匀分布
       6、正态分布
       7、常数分布
       8、正交矩阵初始化
       9、单位矩阵初始化
     10、稀疏矩阵初始化

它们各自对应着不同激活函数,详情请点击:初始化方案

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值