Batch Normalization论文总结

Batch Normalization通过标准化每一层的输入,解决了深度神经网络训练中的内部协变量变换问题,加速网络训练并增强模型的表达能力。该技术允许使用更大的学习率,避免激活函数饱和,具有正则化效果,减少了过拟合风险。在训练和预测阶段,Batch Normalization有不同的处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Batch Normalization要解决的问题

       \space\space\space\space\space\space       训练深度神经网络是复杂的,因为在训练过程中,每一层参数的更新变化,都会影响到下一层输入的分布,而且随着网络深度的增加,这种影响会不断放大。每一层输入分布的变化就迫使每一层要不断适应新分布,所以受到网络内部分布变化的影响,
1.训练网络的学习率不能太大,这就减慢了网络的训练速度;
2.需要谨慎初始化模型参数;
3.容易使非线性函数(sigmoid函数)达到饱和区域。sigmoid函数 g ( x ) = 1 1 + e x p ( − x ) g(x)=\dfrac{1}{1+exp(-x)} g(x)=1+exp(x)1,函数如下图所示。
在这里插入图片描述
由于x受到w,b以及之前所有层的参数的影响,在训练过程中这些参数的变化可能会使x的许多维进入函数的饱和区域,使得这些维上的梯度为0(梯度消失),减缓收敛速度。
       \space\space\space\space\space\space       文章中将内部分布变化这一现象称为内部协变量变换(internal covariate shift),而解决这一问题的办法就是标准化(normalize)每一层的输入,让标准化作为模型的一部分,使得整个网络流过的数据都是同分布的,并且标准化是在每一个mini-batch上进行的,这也是Batch Normalization名字的由来。(mini-batch的优势:首先,loss在mini-batch上的梯度是对loss在整个训练集上的梯度的估计,batch越大,估计越准确,效果越好;第二,由于并行计算,mini-batch的效率高。)

Batch Normalization算法

对于一个d维输入 x = ( x ( 1 ) . . . x ( d ) ) x=(x^{(1)}...x^{(d)}) x=(x(1)...x(d)),BN的操作是对其每一维进行标准化
x ^ ( k ) = x ( k ) − E [ x ( k ) ] V a r [ x ( k ) ] \hat{x}^{(k)}=\dfrac{x^{(k)}-E[x^{(k)}]}{\sqrt{Var[x^{(k)}]}} x^(k)=Var[x(k)] x(k)E[x(k)]
但是如此简单暴力的将输入的每一维限制在均值为0方差为1的同分布内,会破坏每一层的表达能力。例如BN层会将输入特征限制在非线性函数(如sigmoid)的线性部分,多个线性层叠加和单个线性层是一样的,显然会使网络的表达能力下降。所以文章添加了两个参数 γ ( k ) , β ( k ) \gamma^{(k)},\beta^{(k)} γ(k),β(k) x x x在标准化后,再用这两个参数进行平移缩放(对方差进行缩放scale,对均值进行平移shift),如下所示
y ( k ) = γ ( k ) x ^ ( k ) + β ( k ) y^{(k)}=\gamma^{(k)}\hat{x}^{(k)}+\beta^{(k)} y(k)=γ(k)x^(k)+β(k)
γ ( k ) , β ( k ) \gamma^{(k)},\beta^{(k)} γ(k),β(k)是两个可学习的参数,用来恢复每层的表达能力,不再是单一的迫使每层同分布。BN算法如下图所示,图中的 x x x是指每一维的特征 x ( k ) x^{(k)} x(k)
在这里插入图片描述
这里也可以看出,每一层都会有一对参数 γ , β \gamma,\beta γ,β;每一层也会计算出相应mini-batch的 μ B , σ B 2 \mu_B,\sigma_B^2 μB,σB2。这四个量都是多维向量,每一维对应输入向量的一维。训练过程中,每层 γ , β \gamma,\beta γ,β都要更新,而且每层对应mini-batch的 μ B , σ B 2 \mu_B,\sigma_B^2 μB,σB2也在变动(随着参数更新,每层输入会变)。
反向传播更新参数的过程如下所示。
在这里插入图片描述

训练与预测时的Batch Normalization

       \space\space\space\space\space\space       训练和预测的算法如下所示。在训练的时候,文章中并没有将输入的每一维属性进行BN操作,而是选定了一个K大小的属性子集,然后在每个mini-batch上对这一子集进行BN操作,即Algorithm1(见上图)。在预测的时候,没有必要也不希望进行和训练时一样的操作,因为可能预测的时候只有一个样本,它的均值和方差是没有意义的。所以在预测时,对于每一层,我们将训练时的所有mini-batch对应的均值和方差取均值作为这一层的均值和方差,即
E ( x ) ← E B [ μ B ] E(x)\leftarrow E_B[\mu_B] E(x)EB[μB]
V a r ( x ) ← m m − 1 E B [ σ B 2 ] Var(x)\leftarrow \dfrac{m}{m-1}E_B[\sigma^2_B] Var(x)m1mEB[σB2]
(这里是对 σ B 2 \sigma^2_B σB2的无偏估计,即 m m − 1 E B [ σ B 2 ] = E B [ m m − 1 σ B 2 ] = E B [ m m − 1 1 m ∑ i = 1 m ( x i − μ B ) 2 ] = E B [ 1 m − 1 ∑ i = 1 m ( x i − μ B ) 2 ] \dfrac{m}{m-1}E_B[\sigma^2_B]=E_B[\dfrac{m}{m-1}\sigma^2_B]=E_B[\dfrac{m}{m-1}\dfrac{1}{m}\sum\limits_{i=1}^{m}(x_i-\mu_B)^2]=E_B[\dfrac{1}{m-1}\sum\limits_{i=1}^{m}(x_i-\mu_B)^2] m1mEB[σB2]=EB[m1mσB2]=EB[m1mm1i=1m(xiμB)2]=EB[m11i=1m(xiμB)2])
最终 y = γ V a r [ x ] + ϵ ⋅ x + ( β − γ E [ x ] V a r [ x ] + ϵ ) y=\dfrac{\gamma}{\sqrt{Var[x]+\epsilon}}\cdot x+(\beta-\dfrac{\gamma E[x]}{\sqrt{Var[x]+\epsilon}}) y=Var[x]+ϵ γx+(βVar[x]+ϵ γE[x])
在这里插入图片描述
       \space\space\space\space\space\space       与上述的神经网络对输入向量的每一维进行BN操作不同,对于卷积神经网络,BN操作的对象是以每一个特征图为单位的,即对输入特征图的每一个通道的特征图在mini-batch上求均值和方差,并对应一对参数 γ , β \gamma,\beta γ,β

Batch Normalization的优势

1.可以使用更大的学习率以及对参数初始化不用太小心谨慎
BN层会将每层输入强行拉回均值为0方差为1,或附近( γ , β \gamma,\beta γ,β平移缩放),对于某些激活函数(如sigmoid)这样避免了达到其饱和区域,从而不会由于梯度太小引起梯度消失或陷入局部最优解。
学习率过大,会使参数增长或下降过快,参数过大或者过小会使反向传播中梯度变大,从而导致梯度爆炸。而使用BN层会使得反向传播中的梯度对参数的大小不敏感。例如让参数扩大 a a a倍,有
B N ( ( a W ) u ) = γ a W u − a μ a 2 σ 2 + ϵ + β = B N ( W u ) = γ W u − μ σ 2 + ϵ + β BN((aW)u)=\gamma\dfrac{aWu-a\mu}{\sqrt{a^2\sigma^2+\epsilon}}+\beta= BN(Wu)=\gamma\dfrac{Wu-\mu}{\sqrt{\sigma^2+\epsilon}}+\beta BN((aW)u)=γa2σ2+ϵ aWuaμ+β=BN(Wu)=γσ2+ϵ Wuμ+β(由于 ϵ \epsilon ϵ很小可忽略),那么

∂ B N ( ( a W ) u ) ∂ u = ∂ B N ( W u ) ∂ u \dfrac{\partial BN((aW)u)}{\partial u}=\dfrac{\partial BN(Wu)}{\partial u} uBN((aW)u)=uBN(Wu)

∂ B N ( ( a W ) u ) ∂ ( a W ) = 1 a ∂ B N ( W u ) ∂ W \dfrac{\partial BN((aW)u)}{\partial (aW)}=\dfrac{1}{a}\dfrac{\partial BN(Wu)}{\partial W} (aW)BN((aW)u)=a1WBN(Wu)
可以看到参数越大并不会使梯度增大,反而使梯度更小。

2.有正则化的效果
BN层每次以一个mini-batch为单位进行操作,减少了单个数据尤其是异常数据对网络的影响,从而减少过拟合的风险。

论文地址:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值