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 normalization 替代一些dropout的情况。
7. 可能得到更好的结果
一些实验结果表明Batch normalization 可以提高训练的表现。不过他主要还是用优化训练,让训练更快的方面。因为他能让你的网络训练的更快,你就能比不用Batch normalization 的时候迭代更多次或者收敛的更快。他也能让你构建更深的网络,深的网络有机会表现的更好。
总结
推荐使用Batch normalization~
关于我:
linxinzhe,全栈工程师,目前供职于某500强通信企业。人工智能,区块链爱好者。
GitHub:https://github.com/linxinzhe
欢迎留言讨论,也欢迎关注我~
我也会关注你的哦!
网友评论