为什么 Batch Normalization 那么有用?

 
 

点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

本文是arxiv文章

How Does Batch Normalization Help Optimization?

链接:https://arxiv.org/abs/1805.11604

的一篇阅读笔记。文章很好,通过对比实验帮助我们理解why BN work!

先上结论,再做分析:

  1. 没有证据表明BN的work,是因为减少了ICS(Interval Covariate Shift)。

  2. BN work的根本原因,是因为在网络的训练阶段,其能够让优化空间(optimization landscape)变的平滑。

  3. 其他的normalization技术也能够像BN那样对于网络的训练起到作用。 

   一、BN和ICS的关系

 

在文章Batch Normalization:Accelerating Deep Network Training by Reducing Internal Covariate Shift中,其对与ICS是这样解释的:由于前一层的参数更新,所以这一层的输入(前一层的输出)的分布会发生变化,这种现象被称之为ICS。同样,这篇文章的观点认为BN work的真正原因,在与其将数据的分布都归一化到均值为0,方差为1的分布上去。因此,每一层的输入(上一层输出经过BN后)分布的稳定性都提高了,故而整体减小了网络的ICS。

但是,本文作者就提出了两个疑问:

1、BN work的原因是否真的与ICS有关?
2、BN层是否真的能够稳定输入分布?

1.1 BN是否真的与ICS有关?

对比实验:

在训练阶段,使用一下三种训练方法进行训练

  • No BN

  • 标准的BN

  • noisy BN (在标准的BN层后,加上均值不为0,方差不为1的noisy,并且在每个训练step都改变noisy的分布,降低了输入分布的稳定性,使得网络的ICS变大)

01bfedeeb52c29a38d52ffcf7b37a754.jpeg

观察上图左,可以发现加了noisy BN和标准的BN在training accuracy和收敛速度上几乎没有差异,并且都优于不加BN的方法。

结论:

没有证据表明BN的性能是因为提高了输入分布的稳定性。即BN与ICS无关。

1.2 BN是否能够减少ICS

对比实验:(具体参看文章section 2.2)

  • 训练一个(25-layer deep linear network, DLN),即去除网络中的所有非线性激活层,只保留线性层,这么做的目的是为了在统计ICS时,减少非线性激活层对数据分布的影响。

  • 最后发现,带BN层的DLN不像预想的那样减少了ICS,反而增大了ICS。

结论:

从优化的角度来看,通过使用BN来控制layer的输入分布并不能减少ICS 

   二、Why does BN work?

 

Ioffe and Szegedy在文章中说,BN可以防止梯度爆炸或弥散、可以提高训练时模型对于不同超参(学习率、初始化)的鲁棒性、可以让大部分的激活函数能够远离其饱和区域。所有这些BN的性质,都可以帮助我们快速鲁棒的训练网络。但是该怎么解释呢?

2.1 BN的平滑影响

作者认为,BN能够work的真正原因在于BN重新改变了优化问题,使得优化空间变得非常平滑。

1d4198e80ea56933423627ff0f42a40e.jpeg

对于没有BN的神经网络,其loss函数是不仅非凸,并且还有很多flat regions、sharp minimal。这就使得那些基于梯度的优化方法变得不稳定,因为很容易出现过大或者过小的梯度值。

观察上图,可以发现,在使用了BN后,loss的变化变得更加稳定,不会出现过大的跳动;同样,梯度也变得更加平滑。

2.2 是否BN是最好或者唯一的方法来对优化空间进行平滑

对比实验:

  • 不使用BN

  • 使用标准BN

  • 使用L1 归一化方法

  • 使用L2归一化方法

  • 使用L outside_default.png 归一化方法

7c16b8470093369a0801574949a1901a.jpeg

结论:

很多normalization的方法都可以达到BN的效果,甚至更好。

2.3 理论分析

文章理论分析部分做了很多定理和推论,这里就不做具体分析啦。

 
 

好消息!

小白学视觉知识星球

开始面向外开放啦👇👇👇

 
 

9667204d39fb11a2abc294573dc1c650.jpeg

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。


下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。


下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。


交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值