机器学习参数初始化的作用

参数初始化往往是模型训练前比较重要的一步,主要是因为其可以加快梯度下降收敛的速度,并且尽量的使其收敛于全局最优。

参数初始化的条件:
Glorot条件:优秀的初始化应该保证以下两个条件:

  • 各个层的激活值(输出值)的方差要保持一致(前向传播)
  • 各个层对输入的梯度的方差要保持一致(反向传播)

注意事项:

  • 参数不能全部初始化为0,也不能全部初始化同一个值;
  • 最好保证参数初始化的均值为0,正负交错,正负参数大致上数量相等;
  • 初始化参数不能太大或者是太小,参数太小会导致特征在每层间逐渐缩小而难以产生作用,参数太大会导致数据在逐层间传递时逐渐放大而导致梯度消失发散,不能训练。

参数初始化的主要方法:

  • 正态分布随机初始化
  • 均匀分布随机初始化
  • Xavier 初始化

Pytorch中对网络参数初始化:

先定义初始化函数,然后通过apply()函数调用到网络中的每一层。

def weight_init(m):
    classname = m.__class__.__name__ 
    if classname.find('Conv') != -1:  
        m.weight.data.normal_(0.0, 0.02)
    elif classname.find('BatchNorm') != -1:
        m.weight.data.normal_(1.0, 0.02)
        m.bias.data.fill_(0)
model = net()
model.apply(weight_init)

你可能感兴趣的:(machine,learning,deep,learn)