吴恩达神经网络和深度学习-学习笔记-17-batch归一化(Batch Normalization)(BN)

简介和作用

Batch Normalization会使你的参数搜索问题变得很容易,使神经网络对超参数的选择更加稳定,超参数的范围会扩大,工作效果也很好,同时也能使你更容易地训练深层网络。

针对一个单层的网络,我们讲了归一化输入(将input X归一化,详见笔记8)。
吴恩达神经网络和深度学习-学习笔记-17-batch归一化(Batch Normalization)(BN)_第1张图片

Batch Normalization是指:
面对深度网络,对于任何一个隐藏层而言,我们归一化上一层的a值,以更快地训练这一层的W和b(严格来讲,我们真正归一化的是上一层的Z而不是上一层的a)。
这个操作在PyTorch中有写好的函数,所以原理我没仔细听,但大概还是均值方差那一套,但均值和方差不一定为0和1。
吴恩达神经网络和深度学习-学习笔记-17-batch归一化(Batch Normalization)(BN)_第2张图片
吴恩达神经网络和深度学习-学习笔记-17-batch归一化(Batch Normalization)(BN)_第3张图片
Batch Normalization的作用是他适用的归一化过程不只是输入层,甚至同样适用于神经网络的深度隐藏层。
在用于隐藏层时,我们也许不想隐藏单元值必须是平均值0和方差1(比如使用sigmoid函数的时候)。
有了γ和β两个参数后,我们可以确保所有Z(i)的值是我们想赋予的任意值(均值和方差由两个参数γ和β控制)。
它的真正作用是保证隐藏的单元均已使用均值和方差标准化(即:Z(i)有固定的均值和方差)。

加速计算的原理

BN起作用的一个直观理解是:它在做相似的事情,但不仅仅对于这里的输出值,还有隐藏单元值(BN作用的冰山一角)。

BN有效的第二个原因(更深的原因):它可以使权重比你的网络更滞后或更深层(makes weights, later or deeper than your network),比如第10层的权重相比于神经网络中前层的权重,更能经受得住变化(more robust to change to weights in earlier layers of the nerual networks)。
吴恩达神经网络和深度学习-学习笔记-17-batch归一化(Batch Normalization)(BN)_第4张图片
会遇到convariate shift(Google翻译为协变量转移)的问题。

吴恩达神经网络和深度学习-学习笔记-17-batch归一化(Batch Normalization)(BN)_第5张图片
我们以第三层为例,此网络已经学习了参数W[3], b[3]。从第三隐藏层的角度来看,它从前层中取得一些值,借着做些什么,希望使得输出值接近真实值。
吴恩达神经网络和深度学习-学习笔记-17-batch归一化(Batch Normalization)(BN)_第6张图片
单独看第三隐藏层,它的工作是找到一种方式,将a的值映射到y的预测值。可能在现在训练好的W[3],b[3]和W[4],b[4]
但这个网络还有前面的W[2],b[2]和W[1],b[1]。如果这些参数改变,会导致第三隐藏层的输入改变。
所以从第三隐藏层的角度来看,这些隐藏单元的值在不断变化。所以就有了convariate shift的问题。

所以BN做的是减少了这些隐藏值的分布变化的数量。
吴恩达神经网络和深度学习-学习笔记-17-batch归一化(Batch Normalization)(BN)_第7张图片
在网络参数更新的时候,z[1],z[2](这里以二维举例,当然实际情况不一定是二维)的值也会相应改变。而BN保证了,无论其怎么变化,二者的方差和均值都不变。
更具体地说,BN限制了在前层的参数更新影响数值分布的程度(W,b变化对z分布的影响程度),从而减少了各个层的输入值改变的问题,以至于神经网络的之后层就会有更坚实的基础。
或者换句话说,BN减弱了前层参数的作用后层参数的作用之间的联系。它使得网络每层都可以自己学习,稍稍独立于其他层。而这有助于加速整个网络的学习。

**另外,BN有轻微的正则化效果。**均值和标准偏差的估值会带来噪音,这迫使后部单元不过分依赖于任何一个隐藏单元。
应用较大的mini-batch size,可以减少正则化效果。

在神经网络的应用

BN一次只能处理一个mini-batch的数据。
我们可以认为每个单元负责计算两件事:

  • 计算z
  • 由z通过激活函数计算a

吴恩达神经网络和深度学习-学习笔记-17-batch归一化(Batch Normalization)(BN)_第8张图片

而在应用BN的神经网络中,会在计算z和计算a之间进行Batch Normalization的操作。如下:
在这里插入图片描述
相应的,模型的参数就会有W,b,β,γ。
吴恩达神经网络和深度学习-学习笔记-17-batch归一化(Batch Normalization)(BN)_第9张图片这个操作在PyTorch中有写好的函数,但是理解原理还是很不错的。

在实践中,BN和mini-batch经常一起使用。所以我们应用BN的方式就是:
吴恩达神经网络和深度学习-学习笔记-17-batch归一化(Batch Normalization)(BN)_第10张图片
另外参数b的大小不再起作用,因为最终会被Normalization的均值抵消。所以我们在使用BN的时候可以不用b,或者将其置零。
吴恩达神经网络和深度学习-学习笔记-17-batch归一化(Batch Normalization)(BN)_第11张图片
参数维度如下:
吴恩达神经网络和深度学习-学习笔记-17-batch归一化(Batch Normalization)(BN)_第12张图片

小结

我们来梳理一下应用了BN的神经网络的前向传播和反向传播。
吴恩达神经网络和深度学习-学习笔记-17-batch归一化(Batch Normalization)(BN)_第13张图片
在每个epoch中:
我们先前向传播,途中用归一化的z来代替原来的z,使z具有确定的均值和方差(符号见图,我为了简单就都用z表示了)。
之后再反向传播,更新参数W,β,γ的值(不用管b)。

你可能感兴趣的:(吴恩达神经网络和深度学习-学习笔记-17-batch归一化(Batch Normalization)(BN))