2020-6-15 吴恩达-改善深层NN-w3 Batch归一化(3.6 Batch Norm 为什么奏效?归一化前层输出的均值和方差,减少了对后层的影响,有助于加速NN学习。副作用是正则。)

274 篇文章 24 订阅
233 篇文章 0 订阅

1.视频网站:mooc慕课https://mooc.study.163.com/university/deeplearning_ai#/c
2.详细笔记网站(中文):http://www.ai-start.com/dl2017/
3.github课件+作业+答案:https://github.com/stormstone/deeplearning.ai

3.6 Batch Norm 为什么奏效?Why does Batch Norm work?

为什么Batch归一化(简称BN)会起作用呢?

我们已经学习过如何归一化输入特征值 x x x,使其均值为0,方差1。它又是怎样加速学习的,有一些从0到1而不是从1到1000的特征值,通过归一化所有的输入特征值 x x x,以获得类似范围的值,可以加速学习,优化代价函数J更加简单。(因为任何位置都可以快速下降,步长大)

所以Batch归一化起的作用的一个原因,直观的一点就是,它在做类似的工作。但不仅仅对于这里的输入值,还有隐藏单元的值。
这只是Batch归一化作用的冰山一角,还有些深层的原理,它会有助于你对Batch归一化的作用有更深的理解,下面会做详细介绍。

Batch归一化有效的第二个原因是,它可以使权重比你的网络更滞后或更深层。
比如,第10层的权重更能经受得住变化,相比于NN中前层的权重,比如第1层。为了解释我的意思,让我们来看看这个最生动形象的例子。
在这里插入图片描述

观察上图。
这是一个网络的训练,或许是浅层网络,比如逻辑回归。也有可能是深层网络,这无关紧要,只需要知道这个网络是建立在我们著名的猫脸识别检测上。

假设你已经在所有黑猫的图像上训练了数据集(图左),如果现在你要把此网络模型应用于有色猫(图右)。这种情况下, y = 1 y=1 y=1的例子不只是左边的黑猫,还有右边其它颜色的猫,那么你的模型可能拟合的不会很好。
在这里插入图片描述

再说的简单一点,观察上图。
你的训练集是左图这个样子的,你的 y = 1 y=1 y=1例子是红色圈, y = 0 y=0 y=0例子是黑色叉。
你试图把它们都统一于一个类似右图数据集,同样也是 y = 1 y=1 y=1例子是红色圈, y = 0 y=0 y=0例子是黑色叉。
你也许无法期待,在左边训练得很好的模型,同样在右边也运行得很好。即使存在运行都很好的同一个函数,如果只看左图数据的话,你不会希望你的学习算法去发现绿色的决策边界。

所以就有了使你数据改变分布的这个想法,它有个有点怪的名字“Covariate shift”。如下图。
在这里插入图片描述

想法是这样的,假设你已经学习了 x x x y y y 的映射,如果 x x x 的分布改变了,那么你可能需要重新训练你的学习算法。

“Covariate shift”的问题怎么应用于NN呢?
在这里插入图片描述

观察上图。试想一个像这样的深度网络,让我们从这层(第三层)来看看学习过程。
此网络已经学习了参数 w [ 3 ] w^{[3]} w[3] b [ 3 ] b^{[3]} b[3],从第三隐藏层的角度来看,它从前面的层中取得一些值,接着它需要做些什么,使希望输出值(预测值) y ^ \hat y y^ 接近真实值 y y y

在这里插入图片描述

如上图,让我们先遮住左边的部分。
从第三隐藏层的角度来看,它得到一些值,称为 a 1 [ 2 ] a^{[2]}_1 a1[2] a 2 [ 2 ] a^{[2]}_2 a2[2] a 3 [ 2 ] a^{[2]}_3 a3[2] a 4 [ 2 ] a^{[2]}_4 a4[2],这些值在这里也可以称作是特征值 x 1 x_1 x1 x 2 x_2 x2 x 3 x_3 x3 x 4 x_4 x4。第三层隐藏层的工作就是找到一种方式,通过学习参数 w [ 3 ] w^{[3]} w[3] b [ 3 ] b^{[3]} b[3],或 w [ 4 ] w^{[4]} w[4] b [ 4 ] b^{[4]} b[4] w [ 5 ] w^{[5]} w[5] b [ 5 ] b^{[5]} b[5],使这些值映射到 y ^ \hat y y^
在这里插入图片描述

现在我们把网络的左边部分揭开,如上图。
这个网络还有参数 w [ 2 ] w^{[2]} w[2] , b [ 2 ] b^{[2]} b[2] w [ 1 ] w^{[1]} w[1] , b [ 1 ] b^{[1]} b[1],如果这些参数改变, a i [ 2 ] a^{[2]}_i ai[2]的值也会改变。
所以从第三层隐藏层的角度来看, a i [ 2 ] a^{[2]}_i ai[2]的值在不断地改变,所以它就有了“Covariate shift”的问题。

Batch归一化做的,是它减少了这些隐藏值(如上例中的 a i [ 2 ] a^{[2]}_i ai[2])分布变化的数量。
在这里插入图片描述

如上图,绘制这些隐藏单元值的分布,这是以重整第二层隐藏层值 z z z为例。
观察左图,在这里只绘制两个值 z 1 [ 2 ] z^{[2]}_1 z1[2] z 2 [ 2 ] z^{[2]}_2 z2[2]而不是四个值,以便我们设想为2D坐标。
当参数 w [ 2 ] w^{[2]} w[2] , b [ 2 ] b^{[2]} b[2] w [ 1 ] w^{[1]} w[1] , b [ 1 ] b^{[1]} b[1]发生变化, z 1 [ 2 ] z^{[2]}_1 z1[2] z 2 [ 2 ] z^{[2]}_2 z2[2]值会从红色叉叉变为黑色圈圈。

Batch归一化可以确保无论 z 1 [ 2 ] z^{[2]}_1 z1[2] z 2 [ 2 ] z^{[2]}_2 z2[2]怎样变化,它们的均值和方差都保持不变。所以即使 z 1 [ 2 ] z^{[2]}_1 z1[2] z 2 [ 2 ] z^{[2]}_2 z2[2]的值改变,至少他们的均值和方差也会是均值0,方差1,或不一定必须是均值0,方差1(如右图),而是由 β [ 2 ] \beta^{[2]} β[2] γ [ 2 ] \gamma^{[2]} γ[2] 决定的归一化值。

BN限制了前层参数 w [ 2 ] w^{[2]} w[2] , b [ 2 ] b^{[2]} b[2] w [ 1 ] w^{[1]} w[1] , b [ 1 ] b^{[1]} b[1]的更新,对值 z i [ 2 ] z^{[2]}_i zi[2]或者 a i [ 2 ] a^{[2]}_i ai[2]分布影响的程度。第三层看到的这种情况,因此得到学习。

BN减少了输入值改变的问题,它会使这些值变得更稳定,NN之后的层就会有更坚实的基础。即使输入分布改变了一些,BN也会让它改变得更少。它做的是前面层保持学习,当前面层改变时,可以减少后层被迫需要适应改变的程度

你可以这样理解

  • BN减弱了前层参数作用与后层参数作用之间的联系。它使得网络每层都可以自己学习,稍稍独立于其它层,这有助于加速整个网络的学习。
  • 从NN后层的角度而言,前层不会变动的很多,因为它们被同样的均值和方差所限制。所以这会使得后层的学习工作变得更容易些。

Batch归一化还有一个作用,它有轻微的正则化效果。

对于每个mini-batch,mini-batch X { t } X^{\{t\}} X{t}的值为 z [ l ] z^{[l]} z[l],在mini-batch计算中,由均值和方差缩放。因为在mini-batch上计算的均值和方差,是由一小部分数据估计得出的,并不是在整个数据集上,所以均值和方差会有一些小的噪声。由此,从 z z z z ~ \tilde z z~ 的缩放过程也会有一些噪音,因为它是用有些噪音的均值和方差计算得出的。

和dropout相似,BN往每个隐藏层的激活值上增加了噪音。

dropout有增加噪音的方式,它使一个隐藏的单元,以一定的概率乘以0,以一定的概率乘以1。所以你的dropout含几重噪音,因为它(在每一层)乘以0或1。

Batch归一化含几重噪音,因为标准偏差的缩放和减去均值带来的额外噪音。这里的均值和标准差的估计值也是有噪音的。所以类似于dropout,Batch归一化有轻微的正则化效果,因为给隐藏单元添加了噪音,这迫使后部单元不过分依赖任何一个隐藏单元。因为添加的噪音很微小,所以并不是巨大的正则化效果。如果你想得到比dropout更强大的正则化效果,可以将BN和dropout一起使用。

另一个轻微非直观的效果是,如果你应用了较大的mini-batch,比如说,用了512。通过应用较大的min-batch,你减少了噪音,因此减少了正则化效果。这是dropout的一个奇怪的性质,就是应用较大的mini-batch会减少正则化效果

但是不要把Batch归一化当作正则化,应该把它当作将你归一化隐藏单元激活值并加速学习的方式。正则化几乎是一个意想不到的副作用,它会对你的算法有额外的期望效应或非期望效应。

还有一个细节需要提醒。

Batch归一化一次只能处理一个mini-batch数据,它在mini-batch上计算均值和方差。测试时,你试图做出预测,评估NN,你也许没有mini-batch的例子,也许一次只能进行一个简单的例子,所以测试时,你需要准备一些不同的东西以确保你的预测有意义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值