Batch Normalization的理解体会

网络上对于Batch Normalization的讲解也非常多了,本文主要想记录下对此的心得体会,并总结下我所理解的BN的优势

在此先mark一下我认为写得比较全面的资料:
BN的原理(文章1):
【深度学习】深入理解Batch Normalization批标准化
BN的论文:
Batch Normalization: Accelerating Deep Network Training b
y Reducing Internal Covariate Shift

BN work的原因(文章2):
为什么Batch Normalization那么有用?

1. BN的优点

  1. 提升训练速度,使模型的收敛速度加快
  2. 增加了模型的泛化能力(减缓overfit)
  3. 对于超参的要求降低,如模型的初始化、学习率

2. 各优点的原因

  1. 提升训练速度,使模型的收敛速度加快

根据文章2的实验可以看出,BN对于模型梯度的稳定性提供了很大的作用。通俗来讲就是,模型在训练的过程中,会更多地向着最优的方向进行学习,而不会左右乱窜。因为在梯度忽大忽小的情况下,有可能会跳过了最优的时刻,又得回过头来学习。
在梯度不稳定的情况下,我们只能用较小的学习率来尽量减缓陡增的梯度所带来的负面影响。
反推过来就是说,在使用了BN后,我们能用更大的学习率来训练模型。
因此模型的收敛速度也会随之提升。
同时这也印证了BN第三个优点:对于超参的要求降低。

  1. 增加了模型的泛化能力(减缓overfit)

原文中介绍BN减缓了模型overfit的可能,因此在训练过程中,可以减少dropout的使用,以及L2正则化可以选择更小的权重(惩罚项减少)。
首先,减少dropout的使用,就是让模型同时有更多的参数参与训练,那么这也是模型训练速度更快的诱因之一。
另外,L2正则化的惩罚降低后,模型可以更专注地降低原本loss function的损失。通俗讲,就是有种再无过拟合的后顾之忧,放心去学的感觉。因此也进一步地提升了模型的训练速度,以及它的拟合能力。

那么为什么能缓解overfit呢,我认为是神经元之间插入了负责学习数据分布的归一化层后,进入神经元的数据都更倾向于归整到某个区域(不一定均值为0,这取决于shift学习的数值),神经元所学习的特征也都相对归整,那么神经元就不会倾向于往复杂化的方向去学习。
这其实就类似于L2正则化,目标是让模型在提升训练集性能的同时,不过多地让神经元复杂化,大有九九归一的味道(不复杂也就是让模型变得稀疏)。

  1. 对于超参的要求降低,如模型的初始化、学习率

首先,这并不是说模型的初始化不重要,甚至能把权重初始化为0。
在有BN之前,模型内部的数据可能会随着深度的加深,分布也随之偏移加剧,那么初始化值就相当于导致数据偏移的起点。初始化得恰当,模型也才能较稳定地训练。
而加入BN之后,数据的分布得到了学习,神经元之间的梯度也随之平滑,在初始值能接受的情况下,权重总会随着训练不断调整至较优。

同时排除了梯度陡然增减的情况下,学习率的大小更多是在影响模型训练的快慢,而非起到平滑梯度的作用。
因此可以适当提高学习率,加快模型的训练进度。

3. 总结

虽然更多的文章都在以sigmoid激活函数作为例子,来阐述BN有一种从梯度饱和区间往非饱和区间拉取的效果,但我个人感觉BN的精髓更多在于它的affine transform(可学习参数scale和shift)。反而它的normalize更多的只是在为affine transform做铺垫。就是我先帮你归一化到均值为0,方差为1,你再去学scale和shift会学得更顺利。
就像ResNet的残差学习,你原本需要学整个函数变换,加入shortcut之后你只需要学习它的残差。(学习数据的变化总比去数据变化要容易)

如果我们把BN的华丽之处更多的focus在它的affine transform上,就会发现,BN其实是在两个神经元之间的分布做调节作用。
我们作为人类,可能不能完全清楚每个神经元具体的贡献是什么,但是BN作为两个神经元中间的调和剂,它能在学习的过程中更加清晰的知道,下一个神经元更想要如何分布的input(internal input)。
他的主要工作是去配合下一个神经元

我们直觉上理解,神经元的主要工作是提取特征,也就是说专注点不会放在对分布的理解上,那么两个神经元之间加入BN层后,就多个一个专注于调节数据分布的调和剂,同时也能让神经元更专注于它的本分(如提取特征)。所以也能解释BN为何能提升模型的拟合能力。

基于BN的重点是在affine transform上,Normalize不管是在Batch还是在Group之上,更多的是影响Normalize的精度(“批次的均值和方差” 与 “整体数据的均值和方差” 的差距),跑多几个epoch后可以通过affine transform的学习来拟补。

4. 后记

其实很早很早就想用一篇文章去重温并概括我所有对于BN的理解,因为我觉得BN是一个充满智慧的创意。
这次也在我认为最合适的时机,记录下我对此的深入感受。

一个trick在work之后,能去思考它背后的原因与贡献,也是我们作为人类相较于机器而言的魅力之处了。

当然这里更多是我个人的深层理解,希望能帮助到你们对BN独到的体会。
同时也非常欢迎讨论~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值