Batch normalization是一个用于优化训练神经网络的技巧。具备有以下几个优点
1. 训练的更快
因为在每一轮训练中的前向传播和反响传播的额外计算会造成更慢的训练。Batch normalization可以让收敛速度更快。总的训练时间更短。
2. 容忍更高的学习率(learning rate)
为了网络能收敛,梯度下降通常需要更小的学习率。但是神经网络的层次越深,则反响传播时梯度越来越小,因此需要更多的训练迭代次数。Batch normalization可以容忍更高的学习率,则梯度下降的幅度更大,也就加快了训练的速度。
3. 让权重更容易初始化
权重的初始化通常来说比较麻烦,尤其是深层的神经网络。Batch normalization可以降低权重初始化的值的分布的影响。
4. 可支持更多的激活函数
有些激活函数在某些场景下表现很差。比如Sigmoid的随层次的增加梯度衰减的俄很快,也就无法用在深层的神经网络。ReLU的问题是可能导致神经元的死亡(即ReLU掉入0的区域),所以我们要小心输入他的值的范围。Batch normalization可以规范化输入,这些激活函数也可以使用了。
5. 简化创建深层的神经网络
以上四点就降低了创建神经网络的要求,可以创建更深层的神经网络,而更深层的网络也更有机会表现的更好。
6. 提供了一点正则化的功能
虽然Batch normalization 在某些情况下增加了一些网络的噪声。在Inception模型中,Batch normalization 起到了和dropout一样的正则化效果。考虑用Batch