






















批量归一化(Batch Normalization,简称BN)是由 Sergey Ioffe 和 Christian Szegedy 在 2015 年提出的一种深度学习技术。它主要用于加快深度神经网络的训练速度,同时增强模型的稳定性,通过解决内部协变量偏移(Internal Covariate Shift)问题来实现这些优点。就本质而言,就是把每一层的数据分布本身当成超参数进行学习。
批量归一化处理(Batch Normalization)的核心概念是在神经网络的训练过程中,针对每个批次的数据,对每个网络层的激活输入进行标准化处理。这种处理方法的目的是为了减少所谓的“内部协变量偏移”,即保持网络在不同层之间传递的输入数据分布的一致性。通过实施批量归一化,可以使得每层的输入在训练过程中保持相同的均值和方差,从而帮助网络更快地收敛,同时提高训练过程的稳定性。这种技术不仅可以提升模型训练的效率,还能在一定程度上帮助减少模型对初始权重的敏感度,使得训练过程更加健壮。
批量归一化主要是为了解决深度神经网络在训练过程中的内部协变量偏移问题,即前一层的参数更新导致后一层输入分布发生变化,这种变化会导致训练过程中学习速率的不稳定。此技术的实施不仅对提升训练效率具有重要作用,还有助于优化神经网络的整体表现,使其在各种初始化条件下都能稳定运行。
在具体操作上,批量归一化通过以下步骤对输入的激活值进行处理:
计算批次均值:$\mu_B = \frac{1}{m} \sum_{i=1}^{m} x_i$ ,其中,$m$ 是批次中的样本数,$x_i$ 是单个样本的输入。
计算批次方差: $\sigma_B^2 = \frac{1}{m} \sum_{i=1}^{m} (x_i - \mu_B)^2$。
归一化处理:$\hat{x}_i = \frac{x_i - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}}$,这里 $\epsilon$ 是一个很小的数,用来防止分母为零。
缩放与偏移:$y_i = \gamma \hat{x}_i + \beta$, $\gamma$ 和 $\beta$ 是可学习的参数,允许模型恢复归一化可能丢失的信息。
批量归一化可以应用于网络中几乎所有的有权重的层,常见的做法是将其置于全连接层或卷积层的输出和激活函数之前。BN层可能通过平滑隐藏层输入的分布来辅助随机梯度下降,从而减轻随机梯度下降中权重更新对后续层的不利影响。因此,不论是置于非线性激活前还是后,BN层均可能有效发挥作用。但具体效果可能因激活函数的不同而有所区别。例如,对于sigmoid和tanh激活函数,将BN层置于其前可能还有助于减缓梯度消失问题;而对于ReLU激活函数,其非线性特性可能会减弱BN层的平滑效果。
批量归一化是深度学习中一个非常重要的技术,它通过规范化层输入的分布来改善训练的稳定性和速度,一般而言,不改变模型精度。虽然带来了额外的计算负担,但其在实践中的优势使其成为现代深度神经网络架构中不可或缺的一部分。此外,正确的批量大小选择和计算资源的优化可以减轻其劣势,使得批量归一化更加高效地服务于模型优化过程。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。