原文地址:http://blog.youkuaiyun.com/hjimce/article/details/50866313
随机梯度下降训练深度网络简单高效,但是有一个毛病,需要人为的选择参数,比如学习率,参数初始化,权重衰减系数,Drop out 比例等,这些参数的选择对训练结果至关重要
BN算法可以克服这些困难,它的作用如下:
- 可以选择比较大的学习率,BN有快速训练收敛的特性
- 可以移出 drop out 和 l2 正则化参数了,因为 BN 层具有提高网络泛化的能力
- 不需要使用局部响应归一化层了,因为 BN 本身就是一个归一化的网络层
- 可以把训练数据彻底打乱
训练神经网络为什么要对数据进行归一化?
因为神经网络学习过程的本质就是为了学习数据的分布,一旦训练数据和测试数据分布不同,那网络的泛化能力就会大大降低,另外,一旦每批训练数据的分布不同,网络就会在每次迭代去适应不同的分布,降低了网络的训练速度
网络的训练过程中,参数不断发生更新,前面层的参数变化,会引起后面层数据的分布的变化,称之为“Internal Covariate Shift”,BN 就是为了解决中间层数据分布发生改变的情况
BN 概述
在网络的每一层输入的时候,插入一个归一化层,即先做一个归一化处理,再进入网路的下一层
白化也是一种预处理方法,然而白化的计算量太大了,很不划算。经过白化预处理后,数据满足:
1.特征的相关性降低,相当于 pca
2.数据均值,标准差归一化,也就使得每一维特征均值为0,方差为1.
如果特征的维度比较大,要进行 PCA ,也就是实现白化的第一步,需要计算特征向量,计算量非常大,所以作者忽略了第一步 PCA 的过程,仅仅使用了如下的近似白化预处理:
对某一层的网络输入数据做一个归一化处理,Exk是对每一批训练数据神经元 xk的平均值,分母是每一批数据神经元 xk 激活度的一个标准差
但这个并不是简单的对数据做归一化输入到下一层,因为这样会影响到本层学习到的特征,所以增加一个变换重构,引入两个可以学习的参数
两个参数让网络学习恢复出原始网络所要学习的特征
BN的前向传导公式如下所以
在 CNN 中使用 BN
从上面我们知道 BN 层是对每一个神经元做归一化处理,这样变换重构的参数量就很大了,所以 BN 也使用了权值共享的策略,把一整张图当作一个神经元处理,即相当于求取所有样本所对应的的一个特征图的所有神经元的平均值,方差,然后归一化。