批归一化(Batch Normalization,BN)

深度神经网络,其在训练过程中,每一层的参数都会随之更新。以第i层为例,其输入数据与之前所有层(第1层到第i-1层)的网络参数取值都有很大的关系;在训练过程中,如果之前层参数被更新后,第i层的输入数据的分布必然也跟着发生变化,此即为内部协变量偏移。

网络越深,这种现象越明显。内部协变量偏移会给深度神经网络的训练过程带来诸多问题:

(1)网络每一层需要不断适应输入数据的分布的变化,这会影响学习效率,并使学习过程变得不稳定。

(2)网络前几层参数的更新,很可能使得后几层的输入数据变得过大或者过小,从而掉进激活函数的饱和区,导致学习过程过早停止。

(3)为了尽量降低内部协变量偏移带来的影响,网络参数的更新需要更加谨慎,在实际应用中一般会采用较小的学习率(避免参数更新过快),而这会降低收敛速度。

在之前的网络训练过程中,一般会采用非饱和型激活函数(如ReLU)、精细的网络参数初始化、保守的学习学习率等方法来降低内部协变量偏移带来的影响。这些方法会使网络的学习速度太慢,并且最终效果也特别依赖于网络的初始化。

批归一化就是为了解决上述问题而提出的,它的主要作用是确保网络中的各层,即使参数发生了变化,其输入/输出数据的分布也不能产生较大的变化,从而避免发生内部协变量偏移现象。采用批归一化后,深度神经网络的训练过程更加稳定,对初始值不再敏感,可以采用较大的学习率来加速收敛。

批归一化公式:

其中,x(k)和y(k)分别是原始输入数据和归一化后的输出数据,u(k)和 σ(k)分别是输入数据 的均值和标准差。

β(k)和 γ(k)分别是可学习的平移参数和缩放参数,上标k表示数据的第k维(批归一化在数据各个维度上是独立进行的),ε是为防止分母为0的一个小量。

批归一化的过程中可设置β和γ两个可学习的参数。作用如下:

(1)保留网络各层在训练过程中的学习成果。如果没有β和γ,批归一化退化为普通的标准化,这样在训练过程中,网络各层的参数虽然在更新,但是它们的输出分布却几乎不变(始终是均值为0、标准差为1),不能有效的进行学习。添加β和γ参数后,网络可以为每个神经元自适应地学习一个量身定制的分布(均值为β,标准差为γ),保留每个神经元的学习成果。

(2)保证激活单元的非线性表达能力。没有β和γ,批归一化的输出分布始终是均值为0,标准差为1。此时,如果激活函数采用诸如Sigmoid、Tanh等函数,则经过批归一化的数据基本上都落在这些激活函数的近似线性区域,没能利用上他们的非线性区域,这回极大地削弱模型的非线性特征提取能力和整体的表达能力。添加β和γ参数后,批归一化的数据就可以进入激活函数的非线性区域。

(3)使批归一化模块具有自我关闭能力。若β和γ分别取数据的均值和标准差,则可以复原初始的输入值,即关闭归一化模块。因此,当批归一化导致特征分布被破坏,或者使网络泛化能力减弱时,可以通过这两个参数将其关闭。

批归一化在网络中一般放在什么位置?

(1)把批归一化放在激活层之前,可以有效避免归一化破坏非线性特征的分布;另外,批归一化还可以使数据点尽量不落入激活函数的饱和区域,缓解梯度消失的问题。

(2)由于现在常用ReLU激活函数,它没有Sigmoid、Tanh函数的那些问题,因此也可以把批归一化放在激活层之后,避免数据在激活层之前被转化成相似的模式从而使得非线性特征分布趋于同化。

以上内容,来源《百面深度学习——算法工程师带你去面试》,如有侵权,请联系删除。

猜你喜欢

转载自blog.csdn.net/qq_41251963/article/details/108653290