batch归一化

本文来自于网易云课堂
在深度学习兴起后,最重要的一个思想是一个算法-Batch归一化,由Sergey Ioffe和Christian Szegedy两位研究者创造。Batch归一化会使参数搜索问题变得很容易,使神经网络对超参数的旋转更加稳定,超参数的范围会更庞大,工作效果也很好。
在逻辑回归中,我们学过归一化输入会让算法运行的更好。
这里写图片描述
那么我们可不可以归一化每一层的a来使得下一次的参数训练的更好呢?简单来说,Batch归一化做的就是这个事情。严格的说,归一化的不是a而是z。
归一化的过程如下:
这里写图片描述
前三个公式让z的每一个分量都含有平均值0和方差1,但我们不想让隐藏单元总是含有平均值0和方差1,也许隐藏单元有了不同的分布会有意义,所以有了第四个公式。 注意, γβ γ 和 β 是模型的学习参数,他们的作用是允许我们可以随意设置 z~ z ~ 的平均值,事实上,如果 γ=σ2+ϵ γ = σ 2 + ϵ β=μ β = − μ ,那么 z~(i)=z(i) z ~ ( i ) = z ( i ) 。通过对 γβ γ 和 β 合理设定,可以使你构造含其他平均值和方差的隐藏单元值。于是,我们将会使用 z~(i) z ~ ( i ) 来替代 z(i) z ( i ) ,方便神经网络中的后续计算。
怎么将bantch归一化加到神经网络中呢?
这里写图片描述
那么batch归一化为什么会有效呢?
首先,从之前的输入特征归一化可以看到,它可以将不同参数的范围变换到相似的范围,可以加速学习。但是batch归一化不仅仅是对输入值,而且还对隐藏单元进行归一化。
第二个原因是,它可以使权重比你的网络更滞后或更深层。比如第10层的权重比第一层的权重更能经受的住变化。这是什么意思呢?下面给出一个生动形象的例子。
对于下面这个猫脸识别的神经网路,可能是深层也可能是浅层。假设你已经在所有黑猫的图像上训练了数据集,如果现在你要把此网路应用于有色猫,这种情况下,正面的例子不仅是黑色猫还有有色猫。那么你的cosfa可能适用的不会很好(cosfa是啥意思?是classify吗?)。如果在黑猫图像中,你的训练集是一种情况,加上有色猫以后,如果你试图把黑猫和有色猫统一与一个数据集,那么你就不应该期待左边训练很好的模块同样在右边也运行的很好。
这里写图片描述
所以,使你的数据分布改变的想法有个有点怪的名字-covariate shift。如果你已经学习了x->y的映射,如果x的分布改变了,那么你可能需要重新训练你的学习算法。covariate shift的问题怎么应用于神经网络呢?
让我们从第三层来看看神经网络的学习过程。假如此网络已经学习了参数w3,b3,从第三隐藏层的角度来看,它从前层中取一些值,然后做些什么希望使输出值\hat \hat 接近于真实值y。
这里写图片描述
假如将前面的遮住,从第三隐藏层的角度来看,它得到一些值 a1,a2... a 1 , a 2 . . . ,第三隐藏层的工作是找到一种方式使这些值映射到\hat \hat 。但是将前面的层打开,我们可以看到前面的层的参数会导致 a1,a2... a 1 , a 2 . . . 的变化。从第三隐藏层来看,这些隐藏单元的值在不断的改变,所以它就有了covariate shift的问题。
这里写图片描述
batch归一化做的就是它减少了这些隐藏层分布变化的数量。如果是绘制这些隐藏的单元值的分布,从2d的视角来看。即使z1、z2会改变,而的确也在改变,batch归一化能够使的z1、z2的均值和方差保持不变。即使z1和z2一直在变,batch归一化至少能够保证其均值为0,方差为1或者是由 γβ γ 和 β 决定的值。也就是它限制了在前层的参数更新会影响数值分布的程度。当前面参数改变了它使得后面的参数适应的程度减小了,或许你可以这样想,它减少了前层参数与后层参数之间的联系,使得网络每层都可以自己学习,稍稍独立与其他层,这将有助于加速整个网络的学习。
这里写图片描述
batch还有一个作用,它有一个轻微的正则化的作用。
这里写图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值