正则化网络的激活函数
在深度学习兴起后,最重要的一个思想是它的一种算法叫做batch归一化。Batch归一化会使你的参数搜索问题变得很容易,使神经网络对超参数的选择更加稳定。
对logistic回归进行归一化输入特征,帮助我们更有效的训练w和b。对一个深层网络而言,如果我们可以归一化z[2],同样会更有效的帮助我们训练w[3]和b[3]。
通过上述处理,我们使得z的每一个分量都含有平均值0和方差1.但我们不想让隐藏单元总是含有平均值0和方差1,也许隐藏单元有了不同的分布会有意义。所以我们要做如下操作:
其中γ和β是模型的学习参数,它们可以使结果为任意分布。
归一化输入特征X能够有助于神经网络的优化,batch归一化的作用是使归一化过程不只用于输入层,甚至可以适用于神经网络中的深度隐藏层。其二者的唯一区别是我们不想隐藏单元值的平均值必须为0以及方差必须为1。
将Batch归一化拟合进神经网络
我们可以认为每个单元负责计算两件事:第一,它先计算z;第二,将其应用到激活函数中再计算a。如果不使用batch归一化,我们会直接把z[1]拟合到激活函数以计算a[1]。使用batch归一化后,我们将归一化的新z[1]拟合到激活函数中以得到a[1]。此时,我们的输出值参数列表从w、b扩展成w、b、β、γ。
Batch归一化通常和训练集mini-batch一起使用。
Batch归一化为什么奏效
Batch归一化奏效的原因使它可以使权重比网络更滞后或更深层。
假设已经在所有黑猫的图像上训练了数据集,如果现在要把此网络应用于有色猫,那么除了重新训练网络还能怎么办呢?我们需要有使数据改变分布的想法。
我们从第三隐层来看学习过程,它得到一些输入特征值,第三层的工作是找到一种方式,使这些值映射到y帽。Batch归一化做的是它减少了这些隐藏值分布变化的数量。无论它们的值怎样变化,它们的平均值都是0以及方差都是1或者由β和γ决定。总而言之,它限制了前层数据的更新会影响数据分布的程度。
Batch归一化减少了输入值改变的问题,其使这些值变得更稳定从而让神经网络之后的层有了更坚实的基础。通俗的讲,它减弱了前层参数的作用与后层参数的作用之间的联系,从而使得网络每层都可以自己学习,稍稍独立于其它层。
测试时的Batch 归一化
Batch归一化将数据以mini-batch的形式逐一处理,但在测试时,可能需要对每一个样本逐一处理。