当前位置:   article > 正文

动手学深度学习V2.0(Pytorch)——28. 批量归一化_批量归一化正太分布

批量归一化正太分布

论文:

P1 课件讲解

视频地址:https://www.bilibili.com/video/BV1X44y1r77r
教程文档:https://zh-v2.d2l.ai/chapter_convolutional-modern/batch-norm.html

1.1 为什么需要BN

在这里插入图片描述

  • Pooling池化层和Convolution层在1980年那会就有了,但是批量归一化这个层确实是2015年那会才出现的,虽然这个思想并不是最新的,但是成为一个层却是新的。
  • BN的出现,使得训练一个深层的神经网络并在较短时间内收敛成为可能。
  • BN可持续加速深层网络的收敛速度,再结合残差块,BN使训练100层以上的网络成为可能。

  • 标准化处理输入数据使各个特征的分布相近:这往往更容易训练出有效的模型。
  • 通常来说,数据标准化预处理对于浅层模型就足够有效了。
    • 随着模型训练的进行,当每层中参数更新时,靠近输出层的输出较难出现剧烈变化。
    • 但对深层神经网络来说,即使输入数据已做标准化,训练中模型参数的更新依然很容易造成靠近输出层输出的剧烈变化。
    • 这种计算数值的不稳定性通常令我们难以训练出有效的深度模型。
  • 批量归一化的提出正是为了应对深度模型训练的挑战。
    • 在模型训练时,批量归一化利用小批量上的均值和标准差,不断调整神经网络中间输出,从而使整个神经网络在各层的中间输出的数值更稳定

在这里插入图片描述
当神经网络特别深的时候,数据和损失函数距离就会很远

  • forward的时候,从下往上走,数据一步步算到最后
  • 但是backward的时候,是从上往下走,损失函数逐步对每层的参数求导。那么越往下,梯度就会越小(因为大部分时候,梯度是很小的数字相乘计算得到的,梯度爆炸是另一回事)
    • 也就是越靠近数据,梯度就会越小。
    • 导致上面,靠近最终损失的地方的那些层,梯度比较大,权重更新就会快,收敛的快
    • 而下面,靠近数据的那些层,梯度比较小,权重更新就会很慢(如果是简单的学习率只取一个值的话),收敛的慢
  • 也就是可能上面已经收敛了,但是由于下面没有收敛,所以继续训练,上面还是得跟着下面变,就会导致整体收敛很慢

因此产生了一种想法:训练底部的时候,避免顶部的重新训练学习低层的时候避免变化顶层→(弹幕)这里的变化指的是不同batch的分布变化,而不是指底层参数变化导致顶层参数变化

(或者弹幕里有提出,把底部的学习率放大不就行了???

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/735938
推荐阅读
相关标签