【动手学深度学习】05 BN(batch normalization)层

目录

BN(batch normalization)

00 前言

01 为什么需要批量归⼀化层呢?

02 如何批量归⼀化层?

参考


BN(batch normalization)

00 前言

论文:《 Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

01 为什么需要批量归⼀化层呢?

训练深层神经⽹络是⼗分困难的,特别是在较短的时间内使他们收敛更加棘⼿。批量归⼀化(batch normalization是⼀种流⾏且有效的技术,可持续加速深层⽹络 的收敛速度。再结合残差块,批量归⼀化使得研究⼈员能够训练 100 层以上的⽹络。

数据预处理的作用

数据预处理的⽅式通常会对最终结果产⽣巨⼤影响:
  1. 使⽤真实数据时,我们的第⼀步是标准化输⼊特征,使其平均值为0,⽅差为1。直观地说,这种标准化可以很好地与我们的优化器配合使⽤,因为它可以将参数的量级进⾏统⼀。
  2. 对于典型的多层感知机或卷积神经⽹络。当我们训练时,中间层中的变量(例如,多层感知机中的仿射变换输出)可能具有更⼴的变化范围:不论是沿着从输⼊到输出的层,跨同⼀层中的单元,或是随着时间的推移,模型参数的随着训练更新变幻莫测。批量归⼀化的发明者⾮正式地假设,这些变量分布中的这种偏移可能会阻碍⽹络的收敛。直观地说,我们可能会猜想,如果⼀个层的可变值是另⼀层的 100 倍,这可能需要对学习率进⾏补偿调整。
  3. 更深层的⽹络很复杂,容易过拟合。这意味着正则化变得更加重要。批量归⼀化应⽤于单个可选层(也可以应⽤到所有层),其原理如下:在每次训练迭代中,我们⾸先归⼀化输⼊,即通过减去其均值并除以其标准差,其中两者均基于当前小批量处理。接下来,我们应⽤⽐例系数和⽐例偏移。正是由于这个基于批量统计的标准化,才有了批量归⼀化的名称。

总结一句话就是,在进行训练的时候,对数据进行预处理,使其标准化,但是当数据经过一个卷积层之后,得到的feature map 可能会发生改变(不在是标准化的分布了,\mu =0\sigma =1),于是我没就在每一次卷积之后进行批量的标准化。

02 如何批量归⼀化层?

注意:如果我们尝试使⽤⼤小为 1 的小批量应⽤批量归⼀化,我们将⽆法学到任何东西。这是因为在减去均值之后,每个隐藏单元将为 0 。所以,只有使⽤⾜够⼤的小批量,批量归⼀化这种⽅法才是有效且稳定的。请注意,在应⽤批量归⼀化时,批量⼤小的选择可能⽐没有批量归⼀化时更重要。

我们在⽅差估计值中添加⼀个小常量 ϵ > 0,以确保不会除以零,即使在经验⽅差估计值可能消失的情况下也是如此。由于理论上尚未明确表述的原因,优化中的各种噪声源通常会导致更快的训练和较少的过拟合:这种变化似乎是正则化的⼀种形式。 \gamma是用来调整数值分布的方差大小, \beta是用来调节数值均值的位置。这两个参数是在反向传播过程中学习得到的, \gamma的默认值是1, \beta的默认值是0。
论文中给出了详细的计算公式

全连接层和卷积层,他们的批量归⼀化实现略有不同。
全连接层
我们将批量归⼀化层置于全连接层中的仿射变换和激活函数之间。

式中:\phi:激活函数;h:隐藏层;

卷积层

对于卷积层,我们可以在卷积层之后和⾮线性激活函数之前应⽤批量归⼀化。当卷积有多个输出通道时,我们需要对这些通道的“每个”输出执⾏批量归⼀化,每个通道都有⾃⼰的拉伸(scale )和偏移( shift) 参数,这两个参数都是标量。假设我们的微批次包含 m 个⽰例,并且对于每个通道,卷积的输出具有⾼度 p 和宽度 q 。那么对于卷积层,我们在每个输出通道的 m · p · q 个元素上同时执⾏每个批量归⼀化。因此,在计算平均值和⽅差时,我们会收集所有空间位置的值,然后在给定通道内应⽤相同的均值和⽅差,以便在每个空间位置对值进⾏归⼀化。

 总结:

  • 在模型训练过程中,批量归⼀化利⽤小批量的均值和标准差,不断调整神经⽹络的中间输出,使整个神经⽹络各层的中间输出值更加稳定。
  • 训练时要将traning参数设置为True,在验证时将trainning参数设置为False。在pytorch中可通过创建模型的model.train()和model.eval()方法控制。
  • batch size尽可能设置大点,设置小后表现可能很糟糕,设置的越大求的均值和方差越接近整个训练集的均值和方差。
  • 建议卷积层不要使用偏置bias,因为没有用,即使使用了偏置bias求出的结果也是一样的:

参考

李沐 《动手学深度学习》 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值