赞
踩
批量归一化(Batch Normalization),由Google于2015年提出,是近年来深度学习(DL)领域最重要的进步之一。该方法依靠两次连续的线性变换,希望转化后的数值满足一定的特性(分布),不仅可以加快了模型的收敛速度,也一定程度缓解了特征分布较散的问题,使深度神经网络(DNN)训练更快、更稳定。
随着网络的深度增加,每层特征值分布会逐渐的向激活函数的输出区间的上下两端(激活函数饱和区间)靠近,长此以往则会导致梯度消失,从而无法继续训练model。BN就是通过方法将该层特征值分布重新拉回标准正态分布,特征值将落在激活函数对于输入较为敏感的区间,输入的小变化可导致损失函数较大的变化,使得梯度变大,避免梯度消失,同时也可加快收敛。
我们的激活函数本质上想要放大差别,而随着网络深度的增加,就好像我们小时候玩的听筒传话游戏,每个人将听到的信息轮流传下去,信息便会在传递的过程中变得离谱起来。如下图:
ps:图上b为
b
a
t
c
h
=
3
batch = 3
batch=3
在大多数情况下,批量标准化可以提高深度学习模型的性能。但是我们想知道黑匣子里到底发生了什么。问题是,我们还不完全知道是什么让 Batch Normalization 的效果这么好。结果是明确的:BN 层使训练更快,并允许更广泛的学习率,而不会影响训练收敛。[1]
即:有BN的模型比没有BN的激活曲线更平滑。
我们可以从曲线中得出结论:
假设1:
假设2:
有一个细微但非常重要的区别。在这里,归一化的目的是减少层之间的相互依赖(从分布稳定性的角度来看),因此优化器可以通过仅调整两个参数来选择最佳分布!
添加 BN 层显着降低了训练期间各层之间的相互依赖性(从分布稳定性的角度来看)。Batch Normalization就像一个阻止流动的阀门。也就是说BN层通过对每个隐藏单元内的信号进行归一化,并允许使用
β
\beta
β 和
γ
\gamma
γ 进行分布调整。此时,BN就像是一个阀门,从某种程度上来说,可以更方便地控制流量,而不会降低网络的底层复杂性。[4]
假设3:BN ➜ 隐藏单元内输入信号的归一化 ➜ 使优化环境更平滑➜ 更快、更稳定的训练。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。