神经网络算法Batch Normalization的分析与展望 | 大牛讲堂-阿里云开发者社区

开发者社区> 青衫无名> 正文

神经网络算法Batch Normalization的分析与展望 | 大牛讲堂

简介:
+关注继续查看

雷锋网(公众号:雷锋网)按:作者罗恒,地平线机器人技术资深算法研究员。2011年博士毕业于上海交通大学,后随Yoshua Bengio从事博士后研究,2014年加入百度深度学习实验室,参与深度学习在搜索中应用、PaddlePaddle研发等工作。2016年加入地平线机器人公司,负责深度学习模型压缩与加速。

 神经网络算法Batch Normalization的分析与展望 | 大牛讲堂

训练更深的神经网络近年来一直是深度学习领域的重要趋势之一,2015年初Google提出的Batch Normalization 算法使得深层神经网络训练更加稳定,加快了收敛的速度,甚至同时起到了正则化的作用。本期罗老师将为大家分析Batch Normalization背后的动机和原理,以及后续的发展。

1.引言

现在正是神经网络的第三次研究的热潮,与之前两次不同,这次神经网络(深度学习)在很多实际问题上取得了巨大的成功,吸引了越来越多的人投身其中。刚开始接触神经网络的同学们,往往发现无从下手,有很多理论的文章,但是似乎对实际用处不大。谈论最多的往往是各种各样的tricks。

Batch Normalization [1] 是近年来最火爆的tricks之一,几乎成了前向神经网络的标配。在我看来,BN主要做的比较好的是在恰当的地方做标准化(Normalization),在矩阵乘之后,在激活之前;BN的参数神经网络算法Batch Normalization的分析与展望 | 大牛讲堂神经网络算法Batch Normalization的分析与展望 | 大牛讲堂使得输出仍旧保持一定的灵活性;为什么这两方面比较重要下面我会做些分析。最后我会简单讨论一些把BN应用到RNN的工作。

2. 升降桌和中心极限定理

在开始之前先来个广告,地平线机器人最近搬家了,我发现所有的桌子都换成了电动升降桌,如下图

 神经网络算法Batch Normalization的分析与展望 | 大牛讲堂

前面的数字是桌面的高度,精确到毫米,那两个三角可以调节升还是降,但是经常调完了之后出现“78.3”、“77.9”之类的数字,而我更喜欢整数“78”,我最常用的策略就是当接近78的时候,交替地(为了对符号均匀采样)快速地按(力争每次按击独立)上升、下降,很快数字就会停到了78。这是因为按照中心极限定理,我压了一堆均值接近0的随机数(+0.1, -0.2, +0.3之类的),那么这些随机数的累加和(桌子的最终高度)会服从正态分布,我会很大概率见到0,也就是整数的高度。这里也就引出了今天介绍Batch Normalization的一个角度,一些随机数的累加和很可能服从正态分布(Normal distribution),中心极限定理。

3. 神经网络训练困难的一个例子

广告结束,言归正传。神经网络很多年了,一个很大的困难在于比较难训练。比较难训练的一个可能原因在于,神经网络高度冗余,同一个函数神经网络算法Batch Normalization的分析与展望 | 大牛讲堂我们可以找到很多很多参数不同的网络来确切的等价于这个函数,而这些不同参数的网络有的优化起来很容易,有的则非常困难。比如这样一个函数,神经网络算法Batch Normalization的分析与展望 | 大牛讲堂(这是个线性函数,里面没有非线性变换,主要是为了简单。不过当我们用ReLU作为激活函数,当都是正的,当输入也是正的,下面的分析也都可以保持正确),我们发现,神经网络算法Batch Normalization的分析与展望 | 大牛讲堂神经网络算法Batch Normalization的分析与展望 | 大牛讲堂表达的函数完全一样,但是当我们做sgd的时候后者的优化会变得十分困难。假如些X=1,损失函数传来的梯度是神经网络算法Batch Normalization的分析与展望 | 大牛讲堂(损失函数希望网络能输出个小的y),对于第二组参数代表的网络求得的梯度为神经网络算法Batch Normalization的分析与展望 | 大牛讲堂,如果拿这个去更新第二组参数,那么数值小的参数改变巨大,大的参数则几乎不变,训练过程将会变得非常不稳定。

4. BN的动机和成功的原因

训练神经网络,通常是用反向传播算法(BP)+随机梯度下降(SGD),具体到一个具体的第L层连接神经元i和神经元j的参数神经网络算法Batch Normalization的分析与展望 | 大牛讲堂的更新就是神经网络算法Batch Normalization的分析与展望 | 大牛讲堂,通常我们会希望这个更新比较稳定。因此,首先有很多的工作在于选择自适应的学习率神经网络算法Batch Normalization的分析与展望 | 大牛讲堂,对于上面的例子如果我们能够找到非常适合的各个参数大小不同的学习率,训练过程依旧可以变得很稳定;其次,也有些tricks可以看做稳定从网络上层回传的错误神经网络算法Batch Normalization的分析与展望 | 大牛讲堂,比如随机shuffle训练数据,当样本不均衡时做些采样;第三类工作则是稳定神经网络算法Batch Normalization的分析与展望 | 大牛讲堂(其中神经网络算法Batch Normalization的分析与展望 | 大牛讲堂神经网络算法Batch Normalization的分析与展望 | 大牛讲堂是某个非线性函数)。之前有过工作直接对神经网络算法Batch Normalization的分析与展望 | 大牛讲堂来标准化,效果有限。BN的结果之所以更好,可能作对了两个地方,第一,正像我们之前讲的,一堆随机数的和(神经网络算法Batch Normalization的分析与展望 | 大牛讲堂)更接近一个正态分布,在这个和上来做标准化更加容易使得神经网络算法Batch Normalization的分析与展望 | 大牛讲堂通过非线性神经网络算法Batch Normalization的分析与展望 | 大牛讲堂之后依然保持稳定,对于使用sigmoid非线性的时候,神经网络算法Batch Normalization的分析与展望 | 大牛讲堂对于一个mini batch而言大概接近68%的值在[0.27 0.73]之间,95%的值在[0.12 0.88]之间,这当然很好,基本都在sigmoid函数的线性部分,不会出现饱和的情况(这里的梯度不会接近0),这样的好处就是训练在一开始可以变得很快,如下图。但是问题在于假如神经网络算法Batch Normalization的分析与展望 | 大牛讲堂真的始终是接正态分布,那么这些神经元就很难达到它的饱和区域。

 神经网络算法Batch Normalization的分析与展望 | 大牛讲堂

BN的作者引入的神经网络算法Batch Normalization的分析与展望 | 大牛讲堂可能是为了解决这个问题,但是我觉得可能很难,从神经网络算法Batch Normalization的分析与展望 | 大牛讲堂的梯度神经网络算法Batch Normalization的分析与展望 | 大牛讲堂可以看出,这个梯度可能会在一个mini batch内相互抵消,从而变得很小(有兴趣的同学可以做实验看看是不是会比较小)。当然也可能通过在开始初始化的时候把直接设成比较适合的值,不过这就是另一个问题了。从上图也可以看出,似乎模型的在MNIST上也是underfitting,是否是上面说的原因呢?

不过BN的设计的背景本身就是为了很深的网络+ReLU这类激活函数。换句话说是如何使得深层ReLU网络在较大学习率的情况下训练保持稳定。那么我们在ReLU的情况下继续讨论,假设神经网络算法Batch Normalization的分析与展望 | 大牛讲堂来自正态分布,标准化之后(0均值1方差),那么总会有一半左右的数据通过ReLU之后为0,也就是说当前这个神经元对于后续的计算不在起作用了(但是还是会有关于这些样本的梯度传回)。BN的作者引入的神经网络算法Batch Normalization的分析与展望 | 大牛讲堂可能是为了解决这个问题,从神经网络算法Batch Normalization的分析与展望 | 大牛讲堂的梯度神经网络算法Batch Normalization的分析与展望 | 大牛讲堂可以看出,如果有更多的错误传来,神经网络算法Batch Normalization的分析与展望 | 大牛讲堂则会变小,从而允许更多的样本向上传递非零的信号。在训练过程中把神经元的平均的非零可视化出来可能也会比较有意思。从这里的分析,也可以看出来,BN网络相对而言更加需要全局的彻底的随机shuffle,如果没有彻底的shuffle,几条样本总是出现在同一个mini batch中,那么很可能有些样本对于在经过标准化之后,在很多神经元的输出总是零,从而难以将信号传递到顶层。这可能就是为什么[1]提到增加了shuffle之后,结果在验证集上有所变好。同时这也可能为什么当使用了BN+随机shuffle之后dropout的作用在下降的一个原因,因为数据随机的组合,利用mini batch统计量标准化之后,对于特定样本的特定神经元可能随机地为0,那么和dropout的机制有类似的地方。但是如果使用很大的mini batch又会如何呢?

除了上面提到的在适合的地方做标准化、使用神经网络算法Batch Normalization的分析与展望 | 大牛讲堂神经网络算法Batch Normalization的分析与展望 | 大牛讲堂保持灵活性之外,BN把均值和方差的计算也看作整个运算的一部分(参与梯度的计算),从而避免了反向过程中梯度试图改变均值和方差,然而前向过程的BN层又会取消梯度的这些企图。

BN取得了很大的成功,同时也暗示了后来的研究方向:首先,梯度消失和爆炸在RNN中更为常见,如何应用BN到RNN;其次,如何克服BN对mini batch的大小敏感;第三如何统一训练和测试过程等等。

5. 应用BN到RNN的一些工作

BN之后,很快就开始有一些工作尝试在RNN中加入BN。首先我们来看RNN,神经网络算法Batch Normalization的分析与展望 | 大牛讲堂,其中的激活函数常用的tanh。在[2]中先尝试了直接加入BN,神经网络算法Batch Normalization的分析与展望 | 大牛讲堂,结果不好,即使是在训练集也会略差(直接加入BN后模型的优化、拟合都出了问题)。[2]又改为神经网络算法Batch Normalization的分析与展望 | 大牛讲堂,overfitting(训练集好,验证集差)。我的理解在于神经网络算法Batch Normalization的分析与展望 | 大牛讲堂神经网络算法Batch Normalization的分析与展望 | 大牛讲堂可能是很不同的正态分布,他们求和之后再做标准化,可能会有害处。[3]中进一步做了如下调整,神经网络算法Batch Normalization的分析与展望 | 大牛讲堂,这样将两个不同的正态分布分别标准化再相加就合理多了。同时[3]中还有两个tricks,第一,不再初始化为1而是初始化为比较小的数,如0.1。我估计这个可能和LSTM中大量的sigmoid和tanh有关(有兴趣的同学可以自己分析看看);第二,不同的时间步t各自统计自己的mean和std,这个可能对于之前overfitting的一个回应,就是说工作[2]中overfitting的原因在于训练的时候用来做标准化的统计量(每层每个mini batch计算得到)和测试的过程中使用的统计量(使用训练中各层共享的、不断地做moving avearge的统计量)显著不同。

另外一个在RNN中做Normalization比较重要的工作是[4]。Layer Normalization与BN的机制似乎不太相同,这里不展开分析了。LN除了可以作用在RNN之外,也可以用于前向全连接的网络,论文也也给出了比较试验,如下图,

神经网络算法Batch Normalization的分析与展望 | 大牛讲堂


从右边的图可以看出太小的mini batch对于BN无论是在训练的过程和测试过程中使用训练过程统计的统计量都造成了危害。从左边的图则可以看出,由于LN是对每条样本做标准化从而失去了上面讨论的BN带来的正则化效果。

参考文献

[1] Sergey Ioffe and Christian Szegedy. Batch normalization: Accelerating deep network training by reducing internal covariate shift. ICML, 2015.

[2] Ce ́sar Laurent, Gabriel Pereyra, Phile ́mon Brakel, Ying Zhang, and Yoshua Bengio. Batch normalized recurrent neural networks. arXiv preprint arXiv:1510.01378, 2015.

[3] Tim Cooijmans, Nicolas Ballas, Ce ́sar Laurent, and Aaron Courville. Recurrent batch normalization. arXiv preprint arXiv:1603.09025, 2016.

[4] Ba, J. L., Kiros, J. R., and Hinton, G. E. (2016). Layer normalization. arXiv preprint arXiv:1607.06450.

END

本周四(17日)晚19:00-19:45,罗恒博士即将参与大牛直播间线上活动,在“大牛部落”微信群中,为大家在线解答技术问题,并与大家一起展望Batch Normalization的未来。可申请加入“大牛部落”,参加线上直播。

注:本文由大牛讲堂发布雷锋网,如需转载请联系原作者,并注明作者和出处,不得删减内容。有兴趣可以关注公号【地平线机器人技术】,了解最新消息。


本文作者:大牛讲堂


本文转自雷锋网禁止二次转载,原文链接

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
一文详解神经网络 BP 算法原理及 Python 实现
  什么是梯度下降和链式求导法则 假设我们有一个函数 J(w),如下图所示。 梯度下降示意图 现在,我们要求当 w 等于什么的时候,J(w) 能够取到最小值。从图中我们知道最小值在初始位置的左边,也就意味着如果想要使 J(w) 最小,w的值需要减小。
2600 0
YFIOServer后台驱动算法优化
以前,虽然YFIOServer的驱动实现了各种PLC的通信(如PPI,MPI,Modbus等等),但是以前的IO变量读写并没有优化,所以当要访问的变量一多,效率就成为问题
342 0
RestTemplate源码分析
RestTemplate是Spring提供的访问Rest服务的客户端,它简化了和http服务器的交互。 HTTP 协议特点是纯文本协议,其媒体类型MediaType可以为text/html、text/xml、application/json等,HTTP消息必须使用content-type进行自我描述,否则不能区分媒体类型。
3745 0
虚拟化VMware简介9——网络 I/O 控制 (NIOC) 简介
文章整理自VMware 官网: 网络 I/O控制 (NIOC) 通过持续监控网络上的 I/O负载并根据具体业务需求动态分配可用  I/O 资源,划分网络访问的优先级。
943 0
DL之RNN:人工智能为你写小说——基于TF利用RNN算法训练数据集(William Shakespeare的《Coriolanus》)替代你写英语小说短文、训练&测试过程全记录
DL之RNN:人工智能为你写小说——基于TF利用RNN算法训练数据集(William Shakespeare的《Coriolanus》)替代你写英语小说短文、训练&测试过程全记录
14 0
新颖训练方法——用迭代投影算法训练神经网络
本文介绍了一种利用迭代投影算法对神经网络进行训练的方法,首先介绍了交替投影的基础知识,说明投影方法是寻找非凸优化问题解决方案的一种有效方法;之后介绍了差异图的基础知识,将差异图与一些其他算法相结合使得差分映射算法能够收敛于一个好的解决方案;当投影的情况变多时,介绍了分治算法,最后将迭代投影算法应用到神经网络训练中,给出的例子实验结果表明效果不错。
6819 0
网络安全与机器学习(一):网络安全中的机器学习算法
网络安全遇见机器学习,会摩擦出怎样的火花呢?
2897 0
计算机网络 自顶向下方法 第二章 应用层
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a724888/article/details/78197072 计算机网络 自顶向下方法 第二章 应用层  分类:计算机网络-笔记(2)  版权声明:本文为博主原创文章,未经博主允许不得转载。
1218 0
+关注
3598
文章
840
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载