Batch Normalization 批归一化 每个mini-batch进行归一化操作 显著提高深度神经网络的训练速度和性能

Batch Normalization

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

NLP相关Paper笔记和代码复现

本文提出了Batch Normalization(批标准化)技术,旨在加速深度神经网络的训练过程,并通过减少内部协变量偏移(internal covariate shift)来提高模型的泛化能力。内部协变量偏移指的是在训练过程中,由于网络参数的更新,每一层的输入分布会发生变化,这导致训练变得困难。Batch Normalization通过标准化每一层的输入,使得每一层的输入分布具有固定的均值和方差,从而提高了训练效率和模型的稳定性。

  • 关键内容:

内部协变量偏移:在训练深度神经网络时,由于网络参数的更新,每一层的输入分布会发生变化,这种现象被称为内部协变量偏移。内部协变量偏移导致训练困难,因为网络需要不断地适应新的输入分布。

Batch Normalization:Batch Normalization技术通过在每一层之后添加标准化操作来减少内部协变量偏移。具体地,它计算每一批数据的均值和方差,并使用这些统计量来标准化该层的输出。然后,通过一个可学习的仿射变换(affine transformation)来恢复数据的表示能力。

标准化和仿射变换:对于给定的输入x,Batch Normalization首先计算其均值μ和方差σ²,然后将其标准化为(x - μ) / √(σ² + ε),其中ε是一个小的常数以避免除以零。接下来,通过一个可学习的缩放因子γ和偏移量β对标准化后的数据进行仿射变换,得到最终的输出y = γ * (x - μ) / √(σ² + ε) + β。

  • Batch Normalization的优点:

加速训练:通过减少内部协变量偏移,Batch Normalization使得训练过程更加稳定,从而可以使用更大的学习率来加速训练。

提高泛化能力:Batch Normalization具有正则化效果,可以减少过拟合,从而提高模型的泛化能力。

允许使用更大的学习率:由于Batch Normalization使得训练过程更加稳定,因此可以使用更大的学习率来加速训练。

不再需要逐层预训练:在引入Batch Normalization之前,训练深度神经网络通常需要逐层预训练。而Batch Normalization使得训练整个网络成为可能。

训练深度神经网络非常复杂,因为在训练过程中,随着先前各层的参数发生变化,各层输入的分布也会发生变化,导致调参工作要做的很小心,训练更加困难,论文中将这种现象称为“internal covariate shift”,而Batch Normalization正式用来解决深度神经网络中internal covariate shift现象的方法。有关covariate shift的内容,可以参阅我另一篇论文阅读笔记

介绍

Batch Normalization是在每个mini-batch进行归一化操作,并将归一化操作作为模型体系结构的一部分,使用BN可以获得如下的好处,Batch Normalization(BN)是深度学习中的一个重要技术,特别在训练深度神经网络时,它带来了很多好处。下面我将详细解释你提到的这些好处:

  • 可以使用更大的学习率,训练过程更加稳定,极大提高了训练速度。通过归一化操作,Batch Normalization将每个神经元的激活值限制在一个合理的范围内,使得梯度在反向传播时更加稳定,因此可以使用更大的学习率来加速训练过程
  • 可以将bias置为0,因为Batch Normalization的Standardization过程会移除直流分量,所以不再需要bias。在Batch Normalization中,由于已经对每个mini-batch的数据进行了均值和方差的归一化,因此在归一化后的层中,bias项可以被安全地省略,因为均值已经被调整为
  • 对权重初始化不再敏感,通常权重采样自0均值某方差的高斯分布,以往对高斯分布的方差设置十分重要,有了Batch Normalization后,对与同一个输出节点相连的权重进行放缩,其标准差也会放缩同样的倍数,相除抵消。传统的神经网络训练对权重初始化非常敏感,不合适的初始化可能导致训练陷入局部最小值或训练过程不稳定。Batch Normalization通过归一化操作,使得模型对权重的尺度不再敏感,因此可以使用简单的初始化方法,如均值为0、方差为1的高斯分布。
  • 对权重的尺度不再敏感。在Batch Normalization中,权重的尺度变化会被归一化操作所抵消,因此模型对权重的具体尺度不再敏感。这使得模型在训练过程中更加鲁棒。
  • 深层网络可以使用sigmoid和tanh了,BN抑制了梯度消失。在没有Batch Normalization的情况下,深层网络中的sigmoid和tanh激活函数在反向传播时容易出现梯度消失的问题。Batch Normalization通过限制激活值的范围,缓解了这个问题,使得深层网络可以更有效地使用这些激活函数。
  • **Batch Normalization具有某种正则作用,不需要太依赖dropout,减少过拟合。**由于Batch Normalization在训练过程中引入了随机性(每个mini-batch的数据分布可能略有不同),它实际上起到了一种正则化的作用。这有助于减少过拟合,使得模型在测试集上的性能更好。因此,在使用Batch Normalization时,可以适当减少其他正则化技术(如dropout)的使用。

总的来说,Batch Normalization是一个简单而有效的技术,可以显著提高深度神经网络的训练速度和性能。然而,需要注意的是,虽然Batch Normalization带来了很多好处,但它并不是万能的,在某些情况下可能并不适用或效果不佳。因此,在使用Batch Normalization时,需要根据具体的问题和数据集进行选择和调整。

我们从梯度计算开始看起,如在SGD中是优化参数 θ \theta θ,从而最小化损失,如下公式:
θ = a r g m i n θ 1 N ∑ i = 1 N l ( x i , θ ) \theta=arg\underset{\theta}{min}\frac{1}{N}\sum_{i=1}^{N}l(x_i,\theta) θ=argθminN1i=1Nl(xi,θ)
其中, x 1 . . . x N x_1...x_N x1...xN是训练数据集。使用SGD,训练将逐步进行,并且在每个步骤中,我们考虑大小为 m m m 的mini-batch,即 x 1 . . . m x_1...m x1...m,通过计算 1 m ∂ ( x i , θ ) ∂ θ \frac{1}{m}\frac{\partial(x_i,\theta)}{\partial\theta} m1θ(xi,θ),使用小批量数据来近似损失函数关于参数的梯度。使用小批量样本,而不是一次一个样本,在一些方面是有帮助的。首先,小批量数据的梯度损失是训练集上的梯度估计,其质量随着批量增加而改善。第二,由于现代计算平台提供的并行性,对一个批次的计算比单个样本计算 m m m 次效率更高。

虽然随机梯度是简单有效的,但它需要仔细调整模型的超参数,特别是优化中使用的学习速率以及模型参数的初始值。训练的复杂性在于每层的输入受到前面所有层的参数的影响——因此当网络变得更深时,网络参数的微小变化就会被放大。如果我们能保证非线性输入的分布在网络训练时保持更稳定,那么优化器将不太可能陷入饱和状态,训练将加速。

BN之前的一些减少Covariate Shift的方法

对网络的输入进行白化,网络训练将会收敛的更快——即输入线性变换为具有零均值和单位方差,并去相关。当每一层观察下面的层产生的输入时,实现每一层输入进行相同的白化将是有利的。通过白化每一层的输入,我们将采取措施实现输入的固定分布,消除Internal Covariate Shift的不良影响。那么如何消除呢?考虑在每个训练步骤或在某些间隔来白化激活值,通过直接修改网络或根据网络激活值来更改优化方法的参数,但这样会弱化梯度下降步骤。

例如:例如,考虑一个层,其输入u加上学习到的偏置 b b b,通过减去在训练集上计算的激活值的均值对结果进行归一化: x ^ = x − E [ x ] \hat x=x - E[x] x^=xE[x] x = u + b x = u+b x=u+b X = x 1 … N X={x_{1\ldots N}} X=x1N 是训练集上 x x x 值的集合, E [ x ] = 1 N ∑ i =

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EwenWanW

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值