0
点赞
收藏
分享

微信扫一扫

深度学习实战之batchnormal归一化


简而言之,批归一化

协变量偏移

  • 在机器学习的问题之中,我们一般都是假设模型的输入输出数据的分布处于稳定状态,如果这个假设不成立的话,那么输入数据和输出数据的分布就是发生变化的,这种变化就叫做协变量偏移。模型的训练集和测试集的分布不一致,或者模型在训练的过程中数据的分布发生变化,这种都属于协变量偏移现象
  • 那么,针对深度学习而言,我们在这种比较复杂的网络中,一般也会要求每一个模块(Conv,Linear)等,输入和输出的分布也是稳定的,如果不符合这个假设,我们也称这个现象为协变量偏移。在深度学习的网络中,进行前向推理反向传播的过程中,每一层的参数都会随之更新,其中每一层的参数都会受到前面i-1层的影响,换言之,前面i-1层的参数都会对第i层的参数产生较大影响。这样,前面层数的参数更新之后,第I层的参数也必然会产生变化。网络层数越深,这种现象就更加明显。
  • 高等数学上来看,根据链式法则求导,第i层的参数由前面参数求导的权重相乘,这样就会导致,只要其中某一层的权重发生较大的变化,就会导致在此之后的权重相乘的值都会变大(变小),出现我们常见的梯度爆炸或者梯度弥散问题。
  • 协变量偏移容易导致的问题
  • 网络需要不断适应每一层输入数据的分布变化,让学习不稳定,影响学习效率。
  • 容易掉进激活函数的饱和区,导致梯度爆炸或者梯度弥散
  • 导致学习率较小,降低收敛速度。
  • 初步解决方案
  • 采用权重初始化
  • 采用非饱和性激活函数,例如Relu
  • 保守的学习率
    总结:反正就是慢。

主要作用

深度学习实战之batchnormal归一化_神经网络

  • 保证网络中的各层, 即使参数发生变化,输入/输出数据的分布也不会发生较大变化。这样来避免内部协变量偏移现象。
  • 作用:采用批归一化之后,权重不再那么依靠权重归一化。这样可以使用更大的学习率来进行学习。
  • 在批归一化的过程中,添加了两个参数,平移参数和缩放参数。这样可以保证每层的训练学习结果都可以保存,而不是单纯的普通的标准化。如果只是普通的标准化,每层之间的输出分布基本保持不变。添加了超参数之后,每一层可以学习适合这一层的量身定制的分布
  • 归一化模块的能力可关闭,当超参数选择均值和标准差时,就相当于关闭了归一化模块。当批归一化导致特征被破坏时,可以关闭批归一化模块,其实当批次较小时,批归一化作用不明显,可以修改为通道归一化,或者w,h归一化。
  • 一般批归一化层放在激活层之前,因为激活层往往会破坏数据的分布,不过现在Relu函数,不同于sigmoid,tanh(),饱和性激活函数。现在也基本可以把批归一化放在激活层之后,避免在激活之前,被转化成相同或者相似的模式,导致非线性特征分布也趋于同化。


举报

相关推荐

0 条评论