神经网络中的BN层
BN层
BN,全称Batch Normalization(批规范化),是2015年提出的一种方法,在进行深度网络训练时,大都会采取这种算法。算法过程如下:
简单来说就是对上一层输出的数据进行规范化。
优势:
- 加快网络的训练和收敛的速度,即我们可以使用较大的学习率
- 控制梯度爆炸防止梯度消失
- 防止过拟合
1.加快训练速度
在深度神经网络中中,如果把每层的数据都在转换在均值为零,方差为1的状态下,这样每层数据的分布都是一样的训练会比较容易收敛。
原因在于神经网络学习过程本质就是为了学习数据分布,如果训练数据与测试数据的分布不同,那么网络的泛化能力也大大降低;另外一方面,深度网络的训练是一个复杂的过程,只要网络的前面几层发生微小的改变,那么后面几层就会被累积放大下去。如果每批训练数据的分布各不相同,那么网络就要在每次迭代都去学习适应不同的分布,这样将会降低网络的训练速度。
2.控制梯度爆炸防止梯度消失
2.1什么是梯度爆炸/消失
梯度消失与梯度爆炸其实是一种情况。以下图以三个隐层的单神经元网络为例:
以上图为例,假设每一层网络**后的输出为 ,其中 为第 层, 代表第 层的输入, 也就是第 层的输出, 是**函数, 那么, 可得出 简记为 BP算法基于梯度下降策略, 以目标的负梯度方向对参数进行调整, 参数的更新为 给定学习率 得出 。如果要更新第二隐藏层的权值信息,根据链式求导法则, 更新梯度信息: 很容易看出来 即对**函数求导后与权重相乘, 即第二隐层的输入与**函数求导后相乘。如果**函数求导后与权重相乘的积大于1,那么层数增多的时候,最终的求出的梯度更新信息将以指数形式增加, 即发生梯度爆炸,如果此部分小于1,那么随着层数增多,求出的梯度更新信息将会以指数形式衰减, 即发生了梯度消失。
2.2解决
通过规范化操作将输出信号规范化到均值为,方差为保证网络的稳定性。从上述分析分可以看到,反向传播式子中有的存在,所以的大小影响了梯度的消失和爆炸,Batch Normalization 就是通过对每一层的输出规范为均值和方差一致的方法,消除了带来的放大缩小的影响,进而解决梯度消失和爆炸的问题。
3.防止过拟合
在网络的训练中,BN的使用使得一个minibatch中所有样本都被关联在了一起,因此网络不会从某一个训练样本中生成确定的结果,即同样一个样本的输出不再仅仅取决于样本的本身,也取决于跟这个样本同属一个batch的其他样本,而每次网络都是随机取batch,这样就会使得整个网络不会朝特定方向使劲学习。一定程度上避免了过拟合。
4.为什么BN层常常不放在非线性单元后面
BN层一般用在线性层和卷积层后面,而不是放在非线性单元后,因为非线性单元的输出分布形状会在训练过程中变化,归一化无法消除他的方差偏移,相反的,全连接和卷积层的输出一般是一个对称,非稀疏的一个分布,更加类似高斯分布,对他们进行归一化会产生更加稳定的分布。例如Relu这样的**函数,如果你输入的数据是一个高斯分布,经过他变换出来的数据小于0的部分被抑制成0,输出已经不再是高斯分布了。