十分钟深入理解BatchNorm层

文摘   科技   2024-09-09 07:34   江苏  
点击蓝字
 
关注我们










01


引言



批处理归一化层经常与卷积层或线性层一起用于深度学习模型中。许多最先进的计算机视觉架构(如 Inception 和 Resnet)都依靠它来创建可以更快训练的深度网络。


在本文中,我们将探讨批处理归一化层为何有效,以及在训练模型时为何需要更少的训练次数。闲话少说,我们直接开始吧!






02


BN层为何有效?


毋庸置疑,批处理归一化层(Batch Norm)运行得非常好,为深度学习架构设计和训练提供了大量可衡量的优势。然而奇怪的是,关于批量归一化层的神奇之处,至今仍没有一个公认的答案。

为此,人们提出了许多理论。但多年来,人们对哪种理论才是正确的存在分歧。最初的发明者对 批处理归一化层为何有效的第一个解释是基于一种叫做 "内部变量偏移 "的理论。后来,麻省理工学院的研究人员在另一篇论文中驳斥了这一理论,并提出了另一种基于损失曲线和梯度曲线平滑化的观点。这是最著名的两种假说,下面让我们一起来了解一下。




03


 理论一:内部变量偏移


如果你和我一样,肯定会觉得这些术语很吓人!假设我们要训练一个模型,而模型需要学习的理想目标输出函数(尽管我们事先并不知道)如下。


比方说,我们输入模型的训练数据只涵盖了输出值范围的一部分。因此,模型只能学习目标函数的一个子集。如下所示:

训练数据分布


模型对目标曲线的其他部分一无所知。它可能是任何东西。

目标曲线的其余部分

假设我们现在向模型输入一些不同的测试数据,如下所示。这些数据的分布与模型最初训练时使用的数据截然不同。模型将无法对这些新数据进行泛化预测。

测试数据具有不同的分布

这就是 "变量偏移"(Covariate Shift)的问题所在--尽管新数据仍然符合相同的目标函数,但模型得到的数据分布与之前训练时的数据分布截然不同。

为了让模型找出适应新数据的方法,它必须重新学习一些目标输出函数。这就减慢了训练过程。如果我们从一开始就为模型提供一个涵盖所有值范围的代表性分布,它就能更快地学习目标输出。现在我们了解什么是 "变量偏移",让我们来看看它对网络训练有什么影响。

在训练过程中,网络的每一层都要学习输出函数,以适应其输入。比方说,在一次迭代中,第k层从上一层接收到了一批小型激活。然后,它根据该输入更新权重,调整输出激活。然而,在每次迭代中,前一层 "k-1 "也在做同样的事情。它调整其输出激活,从而有效地改变其分布。

变量偏移如何影响训练

这也是第k层的输入。换句话说,该层接收到的输入数据分布与之前不同。现在,它不得不学习如何适应这一新的输入。我们可以看到,每一层最终都在试图从不断变化的输入中学习,因此需要更长的时间来收敛,从而减慢了训练速度。

因此,我们提出的假设是,批处理归一化层有助于稳定这些从一次迭代到下一次迭代的移动分布,从而加快了训练速度。





04


  理论二:损失与梯度平滑


麻省理工的论文发表了一些新的看法,对“处理变量偏移是批量归一化性能的原因 "这一说法提出了质疑,并提出了不同的解释。
在典型的神经网络中,"loss landscape"并不是一个光滑的凸面。它凹凸不平,有尖锐的悬崖,也有平坦的表面。这就给梯度下降带来了挑战--因为它可能会在自认为有希望的方向上突然遇到障碍。为了弥补这一点,我们将学习率保持在较低水平,这样我们在任何方向上都只能迈出一小步。

神经网络损失图
该论文提出,批处理归一化层的作用是通过改变网络权重的分布,大幅平滑loss landscape。这意味着梯度下降法可以自信地朝一个方向迈出一步,因为它知道不会在途中发现突然的中断。因此,它可以通过使用更大的学习率来迈出更大的步伐。

为了研究这一理论,论文进行了一项实验,分析模型在训练过程中的损失情况。我们将通过一个简单的例子来直观地说明这一点。

假设我们有一个简单的网络,它有两个权重参数(w1 和 w2)。这些权重的值可以显示在一个二维平面上,每个权重有一个轴。每个权重值的组合都对应这个二维平面上的一个点。

随着训练过程中权重的变化,我们会移动到这个曲面上的另一点。因此,我们可以绘制出权重在训练迭代过程中的轨迹。

请注意,下图只显示了每个点的权重值。为了直观地显示损失,可以想象一个三维曲面,第三个轴是相应的损失值。如果我们测量并绘制了所有不同权重组合的损失值,那么这条损失值的曲线的形状就叫做loss landscape

该实验的目的是通过测量损失和梯度在不同点上的变化情况,来研究如果我们沿着同一方向前进,损失情况会是怎样的。他们在有BN层和没有BN层的情况下都进行了测量,以了解批归一化BN层的效果。

假设在训练过程中的某个迭代t 处处于点 P(t)。然后,从该点开始,以一定的学习率向前迈出一步,到达下一点 P(t+1)。然后再倒退回 P(t),并以更高的学习率重复上述步骤。

换句话说,它使用三种不同的学习率,沿着梯度方向迈出三个不同大小的步子(蓝色、绿色和粉色箭头),尝试了三种不同的选择。这样,我们就找到了 P(t+1) 的三个不同的下一个点。然后,在每一个 P(t+1) 点,它都会测量新的损失和梯度。

现在,我们可以绘制出每个 P(t+1)点(蓝色、绿色和粉色)在该单一方向上的损失。凹凸不平的红色曲线表示不使用批归一化层时的损失,平滑下降的黄色曲线表示使用批归一化BN层时的损失。

同样,我们可以绘制出每个点的梯度大小和方向。红色箭头表示在没有批归一化层的情况下,梯度的大小和方向的剧烈波动。黄色箭头表示使用批规范后,梯度的大小和方向保持稳定,如下。

这个实验告诉我们,批处理归一化层极大地平滑了loss landscape。这对我们的训练有什么帮助?理想的情况是,在下一个点 P(t+1),梯度也位于同一方向。这意味着我们可以继续沿同一方向前进。这样,训练就能顺利进行,并迅速找到最小值。

另一方面,如果 P(t+1)的最佳梯度方向与我们的方向不同,那么我们最终就会走 之字形路线,白费力气。这就需要更多的训练迭代来收敛。

虽然这篇论文的研究结果至今没有受到质疑,但还不清楚它们是否已被完全接受为结束这场争论的确凿证据。无论哪种理论是正确的,我们可以肯定的是,批处理归一化BN层具有多种优势。





05


  BN层的优势


批处理归一化BN层的巨大优势在于能让模型更快收敛,加快模型的训练速度。它使训练对权重的初始化方式和超参数的精确调整不那么敏感。

批处理归一化BN层允许大家使用更高的学习率。如果没有BN层,学习率就必须保持较小,以防止较大的离群值梯度影响梯度下降。批处理归一化BN层有助于减少这些异常值的影响。

批处理归一化BN层还可以减少梯度对初始权重值的依赖。由于权重是随机初始化的,训练初期的异常权重值会扭曲梯度。因此,网络需要更长的时间才能收敛。BN层也有助于抑制这些异常值的影响。






06


  什么情况下不适用BN层?

批处理归一化层不能很好地处理较小的批次。这会导致每个小批次的均值和方差出现过多噪声。
此外,批处理归一化层不适用于递归网络。每个step之后的激活分布都不同,因此对其应用批处理归一化BN层是不切实际的。





07


  总结

尽管我们并不确定正确的理论解释是什么,但探索这些不同的理论还是令人着迷的,因为它让我们对神经网络的内部运作有了一些了解。无论如何,批处理归一化BN层都是我们在设计网络架构时必须考虑的一层。
您学废了吗?






点击上方小卡片关注我




添加个人微信,进专属粉丝群!


AI算法之道
一个专注于深度学习、计算机视觉和自动驾驶感知算法的公众号,涵盖视觉CV、神经网络、模式识别等方面,包括相应的硬件和软件配置,以及开源项目等。
 最新文章