深度学习笔记(17):Batch Norm简介

剖析与心得

我们已经发现了在初始化的时候将输入数据归一化会得到更快的梯度下降速度与效果。那么其实很容易就会想到,如果我们能在神经网络的每一个隐藏层中都控制这些数值的分布,也许效果会不错。那么Batch norm就诞生了。它可以使你训练更深层次的神经网络,并且使得下降更快。

实现过程

只需要四步:
1)求出来每一行的 z z z均值 μ \mu μ
2)求出来每一行的方差 σ \sigma σ2
3)得到归一化的 z z znorm ,此时的均值为0,方差为1(前三步也就是按照行进行正则化)
4)使用 β \beta β[i] γ \gamma γ[i] z z z[i]调整为 z ~ \widetilde{z} z [i].(调整方差与均值)

深度学习笔记(17):Batch Norm简介_第1张图片

要注意,我们的batch norm是对于隐藏层的所有列的每一个属性 z z z进行的(也就是说把每一行的所有元素在一起取均值,求方差,注意我们正则化是对于所有数据的同一个属性进行统计和调整,对于一个数据的各个属性的正则化没有意义),
在我们使用 z z z[i]= w w w[i] a a a[i-1]+ b b b[i]计算出 z z z之后,在套用 a = g ( z ) a=g(z) a=g(z)求出 a a a之前,这中间加这一步,每一层都需要额外的参数 β \beta β[i] γ \gamma γ[i](注意也是需要训练的参数,而不是预设的超参数)。
在这里插入图片描述其实在TF这也就是一行代码的事。
还需要注意,在我们正则化的时候,由于每一行都需要加上同一个数值, b b b[l]的对应位置,所以归一化的时候,会被算到均值中被减掉,所以其实 b b b我们就不需要设置了。实际上 β \beta β[l]取代了 b b b[l]的位置。
深度学习笔记(17):Batch Norm简介_第2张图片

为什么Batch norm奏效

我们首先要了解一个概念叫做covirate shift,就是说当我们对于输入的变量进行较大的变化时,我们的神经网络可能就无法很好的囊括住了。
深度学习笔记(17):Batch Norm简介_第3张图片
Batch norm使得每一层的z都在一定的区域内(由我们预设的 β \beta β[i] γ \gamma γ[i]来决定),所以这种情况会得到很好的缓解。和dropout近似,我们的神经元每一层之间会有更少的依赖性和传递的稳定性,我们的神经网络也会因此具有更好的鲁棒性和广泛性。

对于CNN的batchNorm的补充

在卷积神经网络中,由于其特性,我们必须要把我们的batchNorm的思维上升一个层次才能理解。
在NN中,因为我们需要利用不同神经元学习出特性,所以我们只想保留下不同神经元之间的独立,而归一化其他的特性,比如对于具有 x 1 , x 2 , x 3 x1,x2,x3 x1,x2,x3特性的一个batch,我们将其每一个的x1拿出来归一以此类推,因为我们对于某一个神经元位置的所有batch都做了相同的映射,所以要把这些batch归一化掉;但是在CNN中,由于我们想利用filter卷积核的共享思想,我们对于所有batch的所有图的每一个像素点都用了一组filter嘛,所以我们其实只想保留下不同filters产生的不同的channel之间的独立性,所以我们对于其他的所有z,即该batch所有图片长宽的每一个像素点值z,将他们每一个channel的( b a t c h s i z e ∗ p i c t u r e X s i z e ∗ p i c t u r e Y s i z e batchsize*pictureXsize*pictureYsize batchsizepictureXsizepictureYsize个z)全部拿出来做一个归一化。

所以batchNorm的思维升华了就是对于我们每一次的映射,保证输入量的归一于均匀,这应当是batchnorm的最核心思想。

你可能感兴趣的:(吴恩达深度学习笔记,神经网络,笔记)