关闭

[水文]Batch Normalization

935人阅读 评论(0) 收藏 举报
分类:

转载两个答案

答案一

作者:魏秀参

链接:http://www.zhihu.com/question/38102762/answer/85238569
来源:知乎

这里分五部分简单解释一下Batch Normalization (BN)。
1. What is BN?
顾名思义,batch normalization嘛,就是“批规范化”咯。Google在ICML文中描述的非常清晰,即在每次SGD时,通过mini-batch来对相应的activation做规范化操作,使得结果(输出信号各个维度)的均值为0,方差为1. 而最后的“scale and shift”操作则是为了让因训练所需而“刻意”加入的BN能够有可能还原最初的输入(即当
从而保证整个network的capacity。


关于DNN中的normalization,大家都知道白化(whitening),只是在模型训练过程中进行白化操作会带来过高的计算代价和运算时间。因此本文提出两种简化方式:1)直接对输入信号的每个维度做规范化(“normalize each scalar feature independently”);2)在每个mini-batch中计算得到mini-batch mean和variance来替代整体训练集的mean和variance. 这便是Algorithm 1.
关于DNN中的normalization,大家都知道白化(whitening),只是在模型训练过程中进行白化操作会带来过高的计算代价和运算时间。因此本文提出两种简化方式:1)直接对输入信号的每个维度做规范化(“normalize each scalar feature independently”);2)在每个mini-batch中计算得到mini-batch mean和variance来替代整体训练集的mean和variance. 这便是Algorithm 1.

2. How to Batch Normalize?
怎样学BN的参数在此就不赘述了,就是经典的chain rule:


3. Where to use BN?
BN可以应用于网络中任意的activation set。文中还特别指出在CNN中,BN应作用在非线性映射前,即对x=wu+b做规范化。另外对CNN的“权值共享”策略,BN还有其对应的做法(详见文中3.2节)。

4. Why BN?
好了,现在才是重头戏--为什么要用BN?BN work的原因是什么?
说到底,BN的提出还是为了克服深度神经网络难以训练的弊病。其实BN背后的insight非常简单,只是在文章中被Google复杂化了。
首先来说说“Internal Covariate Shift”。文章的title除了BN这样一个关键词,还有一个便是“ICS”。大家都知道在统计机器学习中的一个经典假设是“源空间(source domain)和目标空间(target domain)的数据分布(distribution)是一致的”。如果不一致,那么就出现了新的机器学习问题,如,transfer learning/domain adaptation等。而covariate shift就是分布不一致假设之下的一个分支问题,它是指源空间和目标空间的条件概率是一致的,但是其边缘概率不同,即:对所有

,但是. 

大家细想便会发现,的确,对于神经网络的各层输出,由于它们经过了层内操作作用,其分布显然与各层对应的输入信号分布不同,而且差异会随着网络深度增大而增大,可是它们所能“指示”的样本标记(label)仍然是不变的,这便符合了covariate shift的定义。由于是对层间信号的分析,也即是“internal”的来由。
那么好,为什么前面我说Google将其复杂化了。其实如果严格按照解决covariate shift的路子来做的话,大概就是上“importance weight”(ref)之类的机器学习方法。可是这里Google仅仅说“通过mini-batch来规范化某些层/所有层的输入,从而可以固定每层输入信号的均值与方差”就可以解决问题。如果covariate shift可以用这么简单的方法解决,那前人对其的研究也真真是白做了。此外,试想,均值方差一致的分布就是同样的分布吗?当然不是。显然,ICS只是这个问题的“包装纸”嘛,仅仅是一种high-level demonstration。
那BN到底是什么原理呢?说到底还是为了防止“梯度弥散”。关于梯度弥散,大家都知道一个简单的栗子:0.9^30≈0.04。在BN中,是通过将activation规范为均值和方差一致的手段使得原本会减小的activation的scale变大。可以说是一种更有效的local response normalization方法(见4.2.1节)。

5. When to use BN?
OK,说完BN的优势,自然可以知道什么时候用BN比较好。例如,在神经网络训练时遇到收敛速度很慢,或梯度爆炸等无法训练的状况时可以尝试BN来解决。另外,在一般使用情况下也可以加入BN来加快训练速度,提高模型精度。


诚然,在DL中还有许多除BN之外的“小trick”。别看是“小trick”,实则是“大杀器”,正所谓“The devil is in the details”。希望了解其它DL trick(特别是CNN)的各位请移步我之前总结的:Must Know Tips/Tricks in Deep Neural Networks


答案二
作者:纳米酱
链接:http://www.zhihu.com/question/38102762/answer/84238772
来源:知乎

用点比较俏皮的语言简单说说个人理解,学术上可能有点过于俏皮:
  1. 批训练会带来梯度之间的互相竞争,竞争有好处,诸如避开局部优,然而也带来效率上的问题,比如10个batch,前8个要求z方向+0.1,后两个要求z方向-0.4,最终有效梯度为0.8-0.4*2=0,这种竞争消耗着效率。
  2. 对于深层模型,越底层,越到训练后期,这种batch梯度之间的方向竞争会变得厉害(这是统计上的,某个时刻不一定成立),类似饱和。深层模型都用不着坐等梯度衰减,光是batch方向感就乱了训练效率。如果将不同batch看成不同的人,本来要求适当的竞争回避局部优,结果导致恶性竞争乱了大局。
  3. 改变措施很多,如在优化中引入不同batch梯度的记忆,包括强度的记忆(rmsprop)和以及强度和方向的记忆(adam),这样可以利用前面一些batch的长处或者某种统计倾向去修正后面的batch的梯度。这些方法,都是要求后来人忍让前面的人从而规范的,是出了事才去约束竞争的方法,是局部以及某个小训练时刻的动态调整,不是全局调整。
  4. BN算一种全局的调整(实际算法需要动态更新一些参数,只是因为算不动而做,不是算法思想本身需要)。虽然BN是对每层的输入进行线性变换,但这完全可以等价到该层的参数变换去,于是,抽取掉每时每刻都不均一的输入方差和中心,统一换用训练调整出来的方差和中心(gamma和beta这些),直观上,一定程度限制参数在不同batch上瞎跑,防止梯度方向竞争进入”白热化“。俏皮点说,类似是规范了行业标准,发现batch之间的恶性方向竞争会弱化。
  5. 但是,BN仍然不是最好的全局调整,最好的应该是随时都能保证参数的分布在不同层都有可比的标准,就是说:行业规范及早定,定好就不要频繁的动态变更。这种思考,便是Natural Gradient,Natural Gradient在ML中相当于引入大约束到损失函数,这个约束规范并控制着参数的分布保持不变,也有几何上的理解,具体参考:arxiv.org/abs/1301.3584arxiv.org/abs/1303.0818。近来NIPS上有些研究声称利用Natural Gradient思想到深层神经网络,其某种近似类似BN,但是效果会比BN强一点。arxiv.org/abs/1507.0021
  6. BN大法好,但可能不是最好!猜测一下,这些看起来一点也不漂亮的调参是不是都是trick,黑魔法背后会不会有非常朴素干净统一的理解呢?蛤~

参考文献
Ioffe, Sergey, and Christian Szegedy. "Batch normalization: Accelerating deep network training by reducing internal covariate shift."arXiv preprint arXiv:1502.03167 (2015).

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

batch normalization 正向传播与反向传播

Understanding the backward pass through Batch Normalization Layer Feb 12, 2016 At the moment there is a wonderful course running at Standford Univers...
  • xiaojiajia007
  • xiaojiajia007
  • 2017-02-08 11:42
  • 1507

Batch Normalization论文翻译——中文版

Batch Normalization论文翻译——中文版
  • Quincuntial
  • Quincuntial
  • 2017-09-28 16:01
  • 1240

深度学习(二十九)Batch Normalization 学习笔记

近年来深度学习捷报连连,声名鹊起,随机梯度下架成了训练深度网络的主流方法。尽管随机梯度下降法,将对于训练深度网络,简单高效,但是它有个毛病,就是需要我们人为的去选择参数,比如学习率、参数初始化等,这些参数的选择对我们的训练至关重要,以至于我们很多时间都浪费在这些的调参上。那么学完这篇文献之后,你可以...
  • hjimce
  • hjimce
  • 2016-03-12 17:00
  • 74287

[深度学习] Batch Normalization算法介绍

很早就打算写这篇博客了,最近遇到的问题比较多,所以拖了又拖,今天问题似乎解决了,等着程序运行的时候再来回顾一下Batch Normalization算法。 Batch Normalization是2015年Google研究员在论文《Batch Normalization: Accelerating...
  • lhanchao
  • lhanchao
  • 2017-04-21 11:34
  • 2929

深入浅出——深度学习中的Batch Normalization使用

《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shi
  • u010402786
  • u010402786
  • 2016-04-24 15:33
  • 7102

关于Batch Normalization的另一种理解

Batch Norm可谓深度学习中非常重要的技术,不仅可以使训练更深的网络变容易,加速收敛,还有一定正则化的效果,可以防止模型过拟合。在很多基于CNN的分类任务中,被大量使用。 但我最近在图像超分辨率和图像生成方面做了一些实践,发现在这类任务中,Batch Norm的表现并不好,加入了Batch ...
  • AIchipmunk
  • AIchipmunk
  • 2017-01-11 16:00
  • 3525

【深度学习:CNN】Batch Normalization解析(3)

转载:http://blog.csdn.net/intelligence1994/article/details/53888270 白化(sphering) 参考 http://ufldl.stanford.edu/wiki/index.php/%E7%99%BD%E5%8C%96 举例来...
  • SMF0504
  • SMF0504
  • 2017-01-18 14:19
  • 782

Batch Normalization--全连接神经网络和卷积神经网络实战

Batch Normalization原理网上博客一大堆,说的也很明白,这里就简单的说一下我的个人理解:对每一个特征值进行 0均值化,利于神经网络拟合时,对于自身的参数b,无需修改很多次,就可以达到收敛。(因为b的初始值是设为0的) 去相关化,由于图像信息相邻像素间的信息有很多是相关的,去相关虽然有...
  • qq_34695147
  • qq_34695147
  • 2017-04-28 22:33
  • 359

Batch Normalization反方向传播求导

作者给出的批标准化的算法如下: 算法中的ε是一个常量,为了保证数值的稳定性 反向传播求梯度: 因为: 所以: 因为: 所以: 因为: 和 所以: 所以: 对于BN变换是可微分的,随着...
  • dongapple
  • dongapple
  • 2017-08-04 10:48
  • 447

<深度学习优化策略-3> 深度学习网络加速器Weight Normalization_WN

前面我们学习过深度学习中用于加速网络训练、提升网络泛化能力的两种策略:Batch Normalization(Batch Normalization)和Layer Normalization(LN)。今天讨论另一种与它们类似的策略:Weight Normalization(Weight No...
  • lqfarmer
  • lqfarmer
  • 2017-05-19 10:06
  • 1043
    个人资料
    • 访问:128357次
    • 积分:1468
    • 等级:
    • 排名:千里之外
    • 原创:32篇
    • 转载:8篇
    • 译文:0篇
    • 评论:112条
    邮件
    wenhuach87_at_gmail_dot_com
    博客专栏
    文章分类
    最新评论