Batch Normalization论文总结

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值