前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Batch Norm

Batch Norm

作者头像
Steve Wang
发布2019-05-26 15:08:09
6370
发布2019-05-26 15:08:09
举报
文章被收录于专栏:从流域到海域

Batch Norm

本文总结自吴恩达深度学习系列视频:优化深层神经网络的Batch Norm部分,有所删减。

在tensorflow中,实现Batch Norm只需要一行代码:

代码语言:javascript
复制
tf.nn.batch_normalization

Bactch Normalization通过标准化让激活函数分布在线性区间,结果就是加大了梯度,让模型更大胆的进行梯度下降。

下面我们就了解一下Batch Norm的基本原理和计算方法。

Normalizing inputs to speed up learning

回想之前对输入层的规范化(Normalization)操作:

在这里插入图片描述
在这里插入图片描述

它使得梯度下降要走的路程从一个扁圆的椭圆变成了一个相对标准的圆,这意味着从起始点到最优点的距离变短了,所以它可以加快学习速度。

那我们能不能对激活层计算出的激活值也应用Normalization呢? 答案是可以的。

Implementing Batch Norm

Given some intermediate values in NN Z(1),...Z(m)Z^{(1)},...Z^{(m)}Z(1),...Z(m)

μ=1m∑i(Zi−μ)2\mu=\frac{1}{m}\sum_i^(Z_i-\mu)^2μ=m1​∑i(​Zi​−μ)2

Znorm(i)=Z(i)−μσ2+ϵZ_{norm}^{(i)}=\frac{Z^{(i)-\mu}}{\sqrt{\sigma^2+\epsilon}}Znorm(i)​=σ2+ϵ​Z(i)−μ​

Z~(i)=γZnorm(i)+β\widetilde{Z}^{(i)}=\gamma Z_{norm}^{(i)}+\betaZ(i)=γZnorm(i)​+β

参与网络计算的时候,我们使用Z~[l](i)\widetilde{Z}^{[l](i)}Z[l](i)而不是Z[l](i)Z^{[l](i)}Z[l](i)。

注意到: 如果γ=σ2+ϵ\gamma=\sqrt{\sigma^2+\epsilon}γ=σ2+ϵ​,β=μ\beta=\muβ=μ,那么Z~[l](i)=Z[l](i)\widetilde{Z}^{[l](i)}=Z^{[l](i)}Z[l](i)=Z[l](i),退化到没有对激活层使用normalization。

所以这跟对输入层规范化的区别在于,我们不希望隐藏层被强制成mean 0和variance 1。我们使用两个参数γ\gammaγ和β\betaβ来控制mean和variance,使得隐藏层有不同的计算分布,上述取值不会使用。

网络实现

在这里插入图片描述
在这里插入图片描述

在梯度下降算法中把上述式子加进去,就能在网络中实现。

因为我们减去了平均值μ\muμ,那么parameter bbb可以略去,因为不管bbb取任何值都在Normalization过程中被减掉了。

同理也可以在其他优化算法中实现。

更详细的说明,请参考: http://www.cnblogs.com/bonelee/p/8528722.html

从别的角度理解Batch Normalization

Covariate Shift

x→yx\rightarrow yx→y

从x到y的映射中,如果x发生了变动,应用同样的映射可能无法正确映射到y如下图这个猫从黑色变成其他颜色的例子。

在这里插入图片描述
在这里插入图片描述

更糟糕的情况可能是映射(即函数)也发生了改变,那么整个映射都不在有效。

这对于深层次的神经网络来说是一个问题。

Batch Normd修正了convariate shift
在这里插入图片描述
在这里插入图片描述

从网络第三层的角度来看,它之前的隐藏值随着时间不断发生变化,所以网络存在covariate shift的问题。

Batch Norm所做的事情是,它减小了这些隐藏层变动的幅度。 本小节重点在于: 执行Batch Norm意味着,从本例第三层角度来看,它通过将前面的层的值使用两个参数γ\gammaγ和β\betaβ限制在同一mean和variance,从而减小了这些值的偏移。这使得其之后层的学习变得更容易进行。

Batch Norm与正则化
在这里插入图片描述
在这里插入图片描述
  • 每一个mini-batch都被计算出的mean/variance缩放了。
  • 这在计算Z[l]Z^{[l]}Z[l]的值时,加入了一些噪音。仅从加入噪音这点而言,与dropout类似。
  • 但是其加入噪音的程度仅有一点点,很轻微,只能被视作是小小的副作用,不能认为也同时进行了regularization。所以Batch Norm和dropout会同时使用。

原英文解释如下: Because by adding noise to the hidden units, it’s forcing the downstream hidden units not to rely on too much on any one hidden unit. And so similar to dropout, it adds noise to the hidden layers and therefore has a very slight regularization effect. Because the noise added is quite small, this is not a huge regularization effect and you might choose to use batch norm together with dropout if you want the more powerful regularization effect of dropout.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年12月08日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Batch Norm
    • Normalizing inputs to speed up learning
      • Implementing Batch Norm
        • 网络实现
          • 从别的角度理解Batch Normalization
            • Covariate Shift
            • Batch Normd修正了convariate shift
            • Batch Norm与正则化
        相关产品与服务
        批量计算
        批量计算(BatchCompute,Batch)是为有大数据计算业务的企业、科研单位等提供高性价比且易用的计算服务。批量计算 Batch 可以根据用户提供的批处理规模,智能地管理作业和调动其所需的最佳资源。有了 Batch 的帮助,您可以将精力集中在如何分析和处理数据结果上。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档