Batch Norm的直观解释:它是如何工作的,以及神经网络为什么需要它

Batch Norm的直观解释:它是如何工作的,以及神经网络为什么需要它

批量规范化是现代深度学习从业者工具包中不可或缺的一部分。批量规范化在论文《批量规范化》中被提出后不久,就被认为在创建可以更快训练的更深层神经网络方面具有变革性。

批量规范化是目前在许多架构中常用的神经网络层,它通常作为线性或卷积块的一部分添加,有助于在训练期间稳定网络。

在本文中,我们将探讨什么是 Batch Norm、为什么需要它以及它如何工作。

批量规范化的直观解释——它为什么有效

在讨论批量规范化本身之前,让我们先了解一下标准化的一些背景。

规范化输入数据

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

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

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

Batch Norm的直观解释:它是如何工作的,以及神经网络为什么需要它
如何实现标准化

下图中,我们可以看到数据规范化的效果,原始值(蓝色)现在以零(红色)为中心,这确保了所有特征值现在都在同一尺度上。

Batch Norm的直观解释:它是如何工作的,以及神经网络为什么需要它
规范化的数据是什么样子的

为了理解没有归一化会发生什么,让我们看一个只有两个尺度截然不同的特征的例子。由于网络输出是每个特征向量的线性组合,这意味着网络会学习每个尺度不同的特征的权重。否则,大特征将淹没小特征。

然后在梯度下降过程中,为了“移动”损失,网络必须对一个权重进行相对于另一个权重的较大更新。这可能导致梯度下降轨迹在一个维度上来回振荡,从而采取更多步骤才能达到最小值。

Batch Norm的直观解释:它是如何工作的,以及神经网络为什么需要它
不同尺度的特征需要更长的时间才能达到最小值

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

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

Batch Norm的直观解释:它是如何工作的,以及神经网络为什么需要它
狭窄的山谷导致坡度下降从一个斜坡跳到另一个斜坡

相反,如果特征处于同一尺度,损失图会更均匀,就像一个碗。然后梯度下降就可以顺利进行到最小值。

Batch Norm的直观解释:它是如何工作的,以及神经网络为什么需要它
规范化数据有助于网络更快收敛

如果您想了解更多有关此内容的信息,请参阅我的神经网络优化器,其中对此进行了更详细的解释,以及不同的优化器算法如何发展以应对这些挑战。

批量规范化的必要性

现在我们了解了什么是规范化,需要批量规范化的原因就开始变得清晰了。

考虑网络的任意隐藏层,来自前一层的激活只是这一层的输入。例如,从下图中第 2 层的角度来看,如果我们“抹去”所有先前的层,来自第 1 层的激活与原始输入没有区别。

我们对第一层的输入进行规范化的相同逻辑也适用于每个隐藏层。

Batch Norm的直观解释:它是如何工作的,以及神经网络为什么需要它
每个隐藏层的输入都是来自前一层的激活,也必须进行规范化

换句话说,如果我们能够以某种方式规范化来自每个前一层的激活,那么梯度下降将在训练期间更好地收敛,这正是 Batch Norm 层为我们所做的。

批量规范化如何工作?

批量规范化只是插入到隐藏层和下一个隐藏层之间的另一个网络层。它的作用是获取第一个隐藏层的输出并对其进行规范化,然后将其作为下一个隐藏层的输入传递。

Batch Norm的直观解释:它是如何工作的,以及神经网络为什么需要它
批量归一化层在激活从第 1 层到达第 2 层之前对其进行归一化

就像任何网络层的参数(例如权重,偏差)一样,Batch Norm 层也有自己的参数:

  • 两个可学习的参数称为 beta 和 gamma。
  • 两个不可学习的参数(均值移动平均值和方差移动平均值)被保存为 Batch Norm 层“状态”的一部分。
Batch Norm的直观解释:它是如何工作的,以及神经网络为什么需要它
批量规范化层的参数

这些参数是针对每个 Batch Norm 层的。因此,如果我们在网络中有三个隐藏层和三个 Batch Norm 层,那么我们将为这三个层提供三个可学习的 beta 和 gamma 参数,移动平均参数也是如此。

Batch Norm的直观解释:它是如何工作的,以及神经网络为什么需要它
每个 Batch Norm 层都有自己的参数副本

在训练过程中,我们每次向网络提供一小批数据。在前向传递过程中,网络的每一层都会处理该小批数据。Batch Norm 层按如下方式处理其数据:

Batch Norm的直观解释:它是如何工作的,以及神经网络为什么需要它
Batch Norm 层执行的计算

1. 激活

上一层的激活被作为输入传递给 Batch Norm,数据中的每个特征都有一个激活向量。

2. 计算平均值和方差

对于每个激活向量分别计算小批量中所有值的平均值和方差。

3. 规范化

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

4. 规模和转变

这一步是 Batch Norm 引入的一项重大创新,赋予了它强大的功能。与输入层不同,输入层要求所有归一化值都具有零均值和单位方差,而 Batch Norm 允许其值被移位(移到不同的均值)和缩放(移到不同的方差)。它通过将归一化值乘以因子 gamma 并向其添加因子 beta 来实现这一点。请注意,这是一个元素乘法,而不是矩阵乘法。

这一创新的巧妙之处在于,这些因素不是超参数(即模型设计者提供的常量),而是由网络学习的可训练参数。换句话说,每个 Batch Norm 层都能够以最佳方式找到最适合自己的因素,从而可以移动和缩放标准化值以获得最佳预测。

5. 移动平均线

此外,Batch Norm 还会对均值和方差的指数移动平均数 (EMA) 进行计数。在训练期间,它只是计算这个 EMA,但不会对它做任何事情。在训练结束时,它只是将该值保存为层状态的一部分,以便在推理阶段使用。

稍后讨论推理时,我们将回到这一点。移动平均计算使用标量“动量”,下面用 alpha 表示。这是一个仅用于 Batch Norm 移动平均的超参数,不应与优化器中使用的动量混淆。

矢量形状

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

Batch Norm的直观解释:它是如何工作的,以及神经网络为什么需要它
批量范数向量的形状

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

推理期间的批量规范化

正如我们上面所讨论的,在训练期间,Batch Norm 首先计算小批量的平均值和方差。然而,在推理期间,我们只有一个样本,而不是一个小批量。在这种情况下,我们如何获得平均值和方差?

这里需要两个移动平均参数 — 它们是我们在训练期间计算并与模型一起保存的。我们在推理期间使用这些保存的平均值和方差值作为批量规范。

Batch Norm的直观解释:它是如何工作的,以及神经网络为什么需要它
推理过程中的批量规范计算(作者提供的图片)

理想情况下,在训练期间,我们可以计算并保存完整数据的平均值和方差。但这样做成本非常高,因为我们必须在训练期间将完整数据集的值保存在内存中。相反,移动平均线可以很好地代表数据的平均值和方差。它效率更高,因为计算是增量的——我们只需记住最近的移动平均线。

Batch Norm 层的放置顺序

对于 Batch Norm 层在架构中的位置,有两种观点——激活之前和激活之后。原始论文将其放在激活之前,尽管我认为您会发现文献中经常提到这两个选项。有人说“之后”会产生更好的结果。

Batch Norm的直观解释:它是如何工作的,以及神经网络为什么需要它
Batch Norm 可以在激活之前或之后使用

结论

Batch Norm 是一个非常有用的层,你最终会在网络架构中经常使用它。希望这能让你很好地理解Batch Norm 的工作原理。

© 版权声明

相关文章