<深度学习优化策略-1>Batch Normalization(BN)

今天给大家带来深度学习的优化策略篇的第一篇Batch Normalization(BN)。BN可以看做对输入样本的一种约束,最大作用是加速收敛,减少模型对dropout,careful weight initialnization依赖,可以adopt higher learning rate的优势,收敛速度可以提高10倍以上。

问题提出:

深度网络参数训练时内部存在协方差偏移(Internal Covariate Shift)现象:深度网络内部数据分布在训练过程中发生变化的现象。

为什么会带来不好影响:训练深度网络时,神经网络隐层参数更新会导致网络输出层输出数据的分布发生变化,而且随着层数的增加,根据链式规则,这种偏移现象会逐渐被放大。这对于网络参数学习来说是个问题:因为神经网络本质学习的就是数据分布(representation learning),如果数据分布变化了,神经网络又不得不学习新的分布。为保证网络参数训练的稳定性和收敛性,往往需要选择比较小的学习速率(learning rate),同时参数初始化的好坏也明显影响训练出的模型精度,特别是在训练具有饱和非线性(死区特性)的网络,比如即采用S或双S激活函数网络,比如LSTM,GRU。

解决办法:引入Batch Normalization,作为深度网络模型的一个层,每次先对input数据进行归一化,再送入神经网络输入层。

Batch normalization实现:

1、使网络某一层的输入样本做白化处理(最后发现等价于零均值化(Normalization)处理,拥有零均值,方差为1),输入样本之间不相关。通过零均值化每一层的输入,使每一层拥有服从相同分布的输入样本,因此克服内部协方差偏移的影响。

《<深度学习优化策略-1>Batch Normalization(BN)》” /></p><p>E(X)是输入样本X的期望,Var是输入样本X的方差。注意,对于一个d维的输入样本X=(x1,x2,….xd),要对某一层所有的维度一起进行零均值化处理,计算量大,且部分地方不可导,因此,这里的是针对每个维度k分别处理。</p><p>2、数据简化:输入样本X规模可能上亿,直接计算几乎是不可能的。因此,选择每个batch来进行Normalization,得出Batch Normalization(BN)的处理方式:</p><p><img layer-src=微信公众号“深度学习与NLP”或“DeepLearning_NLP”或扫描二维码添加关注。

    原文作者:lqfarmer
    原文地址: https://www.jianshu.com/p/1b5e36cf2017
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞