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

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

 

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

1.引言

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

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

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

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

 

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

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

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

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

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

 

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

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

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

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

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

BN之后,很快就开始有一些工作尝试在RNN中加入BN。首先我们来看RNN,,其中的激活函数常用的tanh。在[2]中先尝试了直接加入BN,,结果不好,即使是在训练集也会略差(直接加入BN后模型的优化、拟合都出了问题)。[2]又改为,overfitting(训练集好,验证集差)。我的理解在于可能是很不同的正态分布,他们求和之后再做标准化,可能会有害处。[3]中进一步做了如下调整,,这样将两个不同的正态分布分别标准化再相加就合理多了。同时[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之外,也可以用于前向全连接的网络,论文也也给出了比较试验,如下图,

从右边的图可以看出太小的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的未来。可申请加入“大牛部落”,参加线上直播。

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

本文作者:大牛讲堂

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

时间: 2024-11-03 11:04:15

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

《BI那点儿事》Microsoft 神经网络算法

原文:<BI那点儿事>Microsoft 神经网络算法 Microsoft神经网络是迄今为止最强大.最复杂的算法.要想知道它有多复杂,请看SQL Server联机丛书对该算法的说明:"这个算法通过建立多层感知神经元网络,建立分类和回归挖掘模型.与Microsoft决策树算法类似,在给定了可预测属性的每个状态时, Microsoft神经网络算法计算输入属性每个可能状态的概率.然后可以用这些概率根据输入属性预测被预测属性的输出."什么时候用这个算法呢?推荐在其他算法无法得出有意

搜索引擎优化:神经网络算法

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 神经网络算法是什么? 神经网络是新技术领域中的一个时尚词汇.很多人听过这个词,但很少人真正明白它是什么.本文的目的是介绍所有关于神经网络的基本包括它的功能.一般结构.相关术语.类型及其应用. "神经网络"这个词实际是来自于生物学,而我们所指的神经网络正确的名称应该是"人工神经网络(ANNs)". 一个真

BP神经网络算法与实践概述

神经网络曾经很火,有过一段低迷期,现在因为深度学习的原因继续火起来了.神经网络有很多种:前向传输网络.反向传输网络.递归神经网络.卷积神经网络等.本文介绍基本的反向传输神经网络(Backpropagation 简称BP),主要讲述算法的基本流程和自己在训练BP神经网络的一些经验. BP神经网络的结构p>神经网络就是模拟人的大脑的神经单元的工作方式,但进行了很大的简化,神经网络由很多神经网络层构成,而每一层又由许多单元组成,第一层叫输入层,最后一层叫输出层,中间的各层叫隐藏层,在BP神经网络中,只

神经网络算法可能存在的问题?

问题描述 神经网络算法可能存在的问题? 关于神经网络算法梯度下降法和随机梯度下降法可能存在的问题: (小白刚注册第一次发帖,原谅没有多少金币...还请各路大神多指点,非常感谢!!!) 用梯度下降法修改权值,是当训练集里所有的样本都输入完之后,将所有样本的误差加和来修改权值.总觉得哪地方不对,这样是不是放大了误差对权值的作用?得到的网络不仅仅是不容易找到全局最小值的问题,而且是很不精确?由于不是每个样本输入后都进行一次权值修改,相对于随机梯度下降法优点是计算速度快? 随机梯度下降法每一个样本的输入

vc++-径向基函数神经网络算法在VC++中实现模式识别,该怎么做?有大神吗?

问题描述 径向基函数神经网络算法在VC++中实现模式识别,该怎么做?有大神吗? RBF算法在VC++中进行模式识别,形如图片,一点思路没有,求大神指导,这个算法和识别怎么连接起来呀,算法是什么? 解决方案 http://wenku.baidu.com/link?url=JXipeWt2B6hU-BOHpLqQetLYyHrLJDTgYd3dh0Ol5mB8toDvkluTMzoEEDTBhbAdKtnqrqKzMH2J_O7cHiYH1rjEALjmoEZpKS4qo5_zE3y

神经网络算法能拟合所有函数吗?

问题描述 神经网络算法能拟合所有函数吗? 单层的神经网络几乎等价于N元一次方程多层的神经网络有什么意义?能拟合所有函数吗? 如果能能介绍一下相关的证明过程/研究成果吗?(证明它能拟合所有函数)如果不能是不是说神经网络是基本上没用的 解决方案 http://wenku.baidu.com/link?url=fBV2jF23VDKQVDJ_D_RJyHxhA37ZwqlIoheY71MM9GK0LbknOxlid1zK47_Tm6AtfXmCLzZuw23w3O4unjJCxl6V6Vlu8HKSx

算法设计技巧与分析的问题 求指教

问题描述 算法设计技巧与分析的问题 求指教 Horner 规则求多项式的值 求指教 算法设计技巧与分析沙特版第五章习题 解决方案 http://blog.csdn.net/liyuanbhu/article/details/38678515

神经网络算法的输入层节点有限制吗?

问题描述 神经网络算法的输入层节点有限制吗? 求大神告知神经网络的输入层中输入节点是不是不能太多,比如200个以上?跪求大神解答,在线等!!!

搜索引擎排名算法根据什么来分析网站内容相关度高低

摘要: 网站内容相关度是什么?如何提高网站内容相关度?有那些技巧能够提升网站整体内容相关度?这是这篇文章特别关注的,好了废话不多说,先来搞清楚什么是网站内容相关度. 网站内 网站内容相关度是什么?如何提高网站内容相关度?有那些技巧能够提升网站整体内容相关度?这是这篇文章特别关注的,好了废话不多说,先来搞清楚什么是网站内容相关度. 网站内容相关度是什么? 网站内容相关度通俗的讲:"网站是否集中讨论某一个话题".比方说我的站,我就集中讨论了一个话题"seo".搜索引擎排