在逻辑回归的训练中,我们对样本的特征进行归一化处理,每个样本特征减去均值,然后除以方差,使得最后使用的数据均值为0,方差为1。这样处理后可以加快训练速度。其可以加快训练速度的原因是:消除了特征取值范围不统一的问题,比如有个特征的取值是1-10,但是另一个取值是-1000到1000,如果不进行处理,训练会非常缓慢,归一化后将取值范围都归一化到了0到1之间,从而加速训练过程。
有一个问题,在深层神经网络中除了对输入样本进行归一化处理,是否也可以对Z,激活函数处理后的A,偏差B等参数进行归一化处理,以加快对W,B等参数的训练?
在历史上有一种争论,是对激活函数处理之后的A进行归一化处理,还是对激活函数处理之前的Z进行归一化处理,通常大家使用对激活函数处理之前的数据Z进行归一化处理更常见。
Batch-Normal归一化的作用是:它不止将归一化过程应用到输入层,而且将归一化过程应用到深层神经网络隐藏层的值中。加快神经网络的训练过程。
从更深的层次来说,BN的作用是,尤其是从处于神经网络后面的层来说,BN可以使它前面的层对后面的层的影响不会那么大,因为它们的值被限制从而拥有同样的方差和均值。
BN的另一个作用是它有轻微的正则化效果,和dropout类似,通过给隐藏层增加一些噪音(噪音来自于mini batch 的均值和方差, 与全体样本的均值和方差的差别),这些噪音迫使后面的隐藏层的神经元不过分依赖前面的任何一个隐藏层神经元。
batch-normalization:批归一化的作用:
可以让你的超参数搜索变得简单,可以让你的神经网络对于超参数选择不再那么敏感,让网络的鲁棒性更好,可以让你训练更深的网络。但是将归一化过程应用到输入层和应用到隐藏层的值中的一个区别是,对于隐藏层中的值,我们通常不希望是均值为0,方差为1,以便使得数据有多样性,保持不一样的方差。所以我们引入了r, b 这两个参数。
BN(batch-normalization)的执行过程:
对隐藏层中的每个一个神经元,每一个特征,在线性计算Z结束之后,在计算非线性激活函数的值A的之前,先对线性计算的结果Z进行归一化的处理。对Z进行归一化之后,Z会变成均值为0,方差为1的数据,但是我们通常不希望隐藏层单元的数据总是均值为0,方差为1,因为隐藏层单元有不同的分布的话,对训练来说更有意义。所以我们真正要计算的是Z_final = r* Z_normal + b.
详细过程参考:https://zhuanlan.zhihu.com/p/34879333
另外有一点需要注意,因为测试时没有mini-batch,测试时是针对每个样本进行的。所以在测试时,我们需要重新估算均值和方差,使用指数加权平均(across mini-batch)来估算均值和方差。