打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
可视化的BatchNorm--它的工作方式以及为什么神经网络需要它
userphoto

2021.05.24

关注


Batch Norm是现代深度学习从业者工具包的重要组成部分。在Batch Norm论文中将其引入后不久,它就被认为是在创建可以更快训练的更深层神经网络方面具有变革性的工具。

Batch Norm是一个神经网络层,现在已广泛用于许多体系结构中。它经常作为“线性”或“卷积”块的一部分被添加,并有助于在训练过程中稳定网络。

在本文中,我们将探讨什么是Batch Norm,为什么需要它以及它是如何工作的。
但是,在讨论Batch Norm本身之前,让我们先介绍一下Normalization的背景知识。

归一化输入数据


将数据输入到深度学习模型时,标准做法是将数据归一化为零均值和单位方差。 这是什么意思,为什么我们要这样做?

假设输入数据包含多个特征x1,x2,…xn。每个功能可能具有不同的值范围。例如,特征x1的值可能在1到5之间,而特征x2的值可能在1000到99999之间。

因此,对于每个特征列,我们分别获取数据集中所有样本的值,然后计算均值和方差。 然后使用以下公式对值进行归一化。


在下图中,我们可以看到标准化数据的效果。 现在,原始值(蓝色)以零(红色)为中心。 这样可以确保所有要素值现在都在同一比例尺上。


为了了解没有进行标准化的情况,我们来看一个示例,该示例仅具有两个功能截然不同的功能。 由于网络输出是每个特征向量的线性组合,因此这意味着网络将为每个特征学习权重,这些权重也处于不同的比例上。 否则,large feature只会淹没small feature。

然后,在梯度下降过程中,为了“移动”损失,网络将不得不对一个权重进行较大的更新,而不是对另一个权重进行更新。这可能会导致梯度下降轨迹沿一维来回振荡,从而需要更多的步骤才能达到最小值。


在这种情况下,loss landscape看起来像一条狭窄的峡谷。 我们可以沿两个方向分解梯度。 它在一个维度上较陡峭,而在另一个维度上则平缓得多。

由于其较大的梯度,我们最终对一个权重进行了较大的更新。 这将导致梯度下降反弹到斜率的另一侧。 另一方面,沿着第二方向的较小坡度会导致我们进行较小的权重更新,从而采取较小的步骤。 这种不均匀的轨迹使网络收敛需要更长的时间。



取而代之的是,如果特征的比例相同,则损失情况像碗一样更均匀。 然后,梯度下降可以平稳地进行到最小。

Batch Norm的必要性


既然我们了解了什么是规范化,那么需要BatchNorm的原因就变得清晰起来了。

考虑网络的任何隐藏层。 上一层的激活只是该层的输入。 例如,从下图中的第2层的角度来看,如果我们“空白”所有先前的层,则来自第1层的激活与原始输入没有什么不同。

要求我们对第一层的输入进行规范化的逻辑也将适用于这些隐藏层中的每一个。

换句话说,如果我们能够以某种方式归一化每个先前层的激活,则梯度下降将在训练过程中更好地收敛。 这正是Batch Norm层为我们所做的。

BatchNorm是怎样起作用的


Batch Norm只是插入在隐藏层和下一个隐藏层之间的另一个网络层。它的工作是从第一个隐藏层获取输出并对其进行规范化,然后再将其作为下一个隐藏层的输入。

 
就像任何网络层的参数(例如权重,偏差)一样,批处理规范层也具有自己的参数:

    两个可学习的参数称为beta和gamma。
    两个不可学习的参数(均值移动平均值和方差移动平均值)被保存为Batch Norm层的“状态”的一部分。

 
这些参数是每个Batch Norm层的。因此,如果我们在网络中具有三个隐藏层和三个Batch Norm层,则对于这三个层,我们将具有三个可学习的beta和gamma参数。对于“移动平均”参数也是如此。

 
在训练过程中,我们一次向网络馈送一小批数据。 在前向传递过程中,网络的每一层都处理该最小批处理数据。

Batch Norm层按以下方式处理其数据:

1.激活

来自上一层的激活作为输入传递到BatchNorm。 数据中的每个特征都有一个激活向量。

2.计算均值和方差

对于每个激活向量,分别计算mini-batch中所有值的均值和方差。

3.归一化

使用相应的均值和方差为每个激活特征向量计算归一化值。 这些归一化的值现在具有零均值和单位方差。

4.缩放和移位

此步骤是Batch Norm引入的巨大创新,从而赋予了它强大的功能。与要求所有归一化的值均具有零均值和单位方差的输入层不同,批处理范数允许其值移位(至不同的均值)并缩放(至不同的方差)。它通过将标准化值乘以系数beta并向其添加系数gamma来实现。请注意,这是逐元素乘法,而不是矩阵乘法。

使这项创新独具匠心的是,这些因素不是超参数(即不是模型设计人员提供的常数),而是网络学习的可训练参数。 换句话说,每个Batch Norm层都可以为其自身最佳地找到最佳因素,从而可以对归一化的值进行移位和缩放以获得最佳预测。

5.移动平均

此外,批处理范本还保留均值和方差的指数移动平均线(EMA)的运行计数。在训练期间,它仅计算此EMA,但不对其执行任何操作。在训练结束时,它只是将该值保存为图层状态的一部分,以供推理阶段使用。

我们稍后会谈到推理时回到这一点。 移动平均线计算使用标量“动量”,由下面的alpha表示。这是一个超参数,仅用于Batch Norm移动平均值,不应与Optimizer中使用的动量混淆。

Vector Shapes

在下面,我们可以看到这些向量的形状。 用红色突出显示了为特定特征计算向量时所涉及的值。 但是,请记住,所有特征向量都是在单个矩阵运算中计算的。

前向传播后,我们照常进行梯度回传。 计算所有层权重以及Batch Norm层中所有beta和gamma参数的梯度并完成更新。

BatchNorm在推理阶段


如上所述,在训练期间,批处理范数从计算小批处理的均值和方差开始。 但是,在推理过程中,我们只有一个样本,而不是小批量。 在这种情况下,我们如何获得均值和方差?

这是两个移动平均值参数的输入-我们在训练期间计算出的参数,并与模型一起保存。在推理过程中,我们将那些保存的均值和方差值用于批处理范数。

 
理想情况下,在训练期间,我们可以计算并保存完整数据的均值和方差。 但这将是非常昂贵的,因为我们必须在训练过程中将整个数据集的值保留在内存中。 取而代之的是,移动平均线可以很好地替代数据的均值和方差。 由于计算是增量式的,因此效率更高得多,我们只需要记住最新的移动平均线即可。

Batch Norm层的放置顺序

在激活之前和之后,对于将Batch Norm层放置在体系结构中的位置有两种意见。尽管我认为您会发现文献中经常提到的两种选择,但原始论文还是放在了之前。有人说“之后”会带来更好的结果。


在激活之前和之后,对于将Batch Norm层放置在体系结构中的位置有两种意见。尽管我认为您会发现文献中经常提到的两种选择,但原始论文还是放在了之前。有人说“之后”会带来更好的结果。

Conclusion


Batch Norm是一个非常有用的层,您最终将在网络体系结构中经常使用它。希望这可以使您对Batch Norm的工作原理有很好的了解。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
深度学习中的Normalization模型
【干货】Batch Normalization: 如何更快地训练深度神经网络
梯度消失和梯度爆炸问题的最完整解析
Batchnorm原理详解
神经网络为何非激活函数不可?
浅谈Transformer的初始化、参数化与标准化
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服