1.1 归一化网络的激活函数(Normalizing activations in a network)

在深度学习兴起后,最重要的一个思想是它的一种算法,叫做 Batch 归一化,Batch归一化会使你的参数搜索问题变得很容易,使神经网络对超参数的选择更加稳定,超参数的范围会更加庞大,工作效果也很好,也会是你的训练更加容易,甚至是深层网络。实践中,经常做的是归一化z(i),i从 1 到m,在神经网络中,已知一些中间值,假设你有一些隐藏单元值,从z(1)到z(m),这些来源于隐藏层,公式计算方差,会取每个z(i)值,使其规范化:z(i)减去均值再除以标准偏差,标准化结果如下:

 归一化网络的激活函数(Normalizing activations in a network)_激活函数

我们不想让隐藏单元总是含有平均值 0 和方差 1的z分量,所以我们需要计算,我们称之为归一化网络的激活函数(Normalizing activations in a network)_神经网络_02归一化网络的激活函数(Normalizing activations in a network)_方差_03=归一化网络的激活函数(Normalizing activations in a network)_归一化_04,通过对γ和β合理设定,规范化过程,可以使我们构造含其它平均值和方差的隐藏单元值。

1.2 将 Batch Norm 拟合进神经网络(Fitting Batch Norm into a neural network)

假设你有一个这样的神经网络,我们可以认为每个单元负责计算两件事,第一,它先计算z,然后应用其到激活函数中再计算a。如果你没有应用 Batch 归一化,你会把输入X拟合到第一隐藏层,然后首先计算z[1],这是由w[1]和b[1]两个参数控制的,接着,通常而言,你会把z[1]拟合到激活函数以计算z[1];但 Batch 归一化的做法是将z[1]值进行 Batch 归一化,简称 BN,此过程将由β[1]和γ[1]两参数控制,这一操作会给你一个新的规范化的z[1]值(归一化网络的激活函数(Normalizing activations in a network)_神经网络_05),然后将其输入激活函数中得到a[1],即a[1]=g[1](归一化网络的激活函数(Normalizing activations in a network)_归一化_06),接下来,你需要应用a[2]值来计算z[2],与你在第一层所做的类似,你会将z[2]进行 Batch 归一化,这是由下一层的 Batch 归一化参数所管制的,即β[2]和γ[2],现在你得到归一化网络的激活函数(Normalizing activations in a network)_方差_07,再通过激活函数计算出a[2]等等,以此类推。

 Batch 归一化发生在z的计算和a之间,Batch 归一化学习参数β[1],β[2]等等和用于 Momentum、Adam、RMSprop 算法中的β不同,在深度学习框架中(Torch、TensorFlow等),Batch 归一化的过程,经常是类似一行代码的东西。Batch 归一化有效的原因有,它可以使权重比你的网络更滞后或更深层;何归一化输入特征值x,使其均值为 0,方差 1,便于快速学习;Batch 归一化减少了输入值改变的问题,它的确使这些值变得更稳定,神经网络的之后层就会有更坚实的基础。即使使输入分布改变了一些,它会改变得更少,它做的是当前层保持学习,减弱了前层参数的作用与后层参数的作用之间的联系,它使得网络每层都可以自己学习,稍稍独立于其它层,这有助于加速整个网络的学习。Batch 归一化还有一个作用,它有轻微的正则化效果。Batch 归一化将我们的数据以 mini-batch 的形式逐一处理,但在测试时,你可能需要对每个样本逐一处理,在训练时,u和σ2是在整个 mini-batch 上计算出来的,但在测试时,你可能需要逐一处理样本,但在实际操作中,我们通常运用指数加权平均来追踪在训练过程中你看到的u和σ2的值,如果你使用的是某种深度学习框架,通常会有默认的估算u和σ2的方式。


作者:​​zhang-X​