神经网络算法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的未来。可申请加入“大牛部落”,参加线上直播。

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


本文作者:大牛讲堂


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

相关文章
|
8天前
|
算法 JavaScript 数据安全/隐私保护
基于GA遗传优化的最优阈值计算认知异构网络(CHN)能量检测算法matlab仿真
本内容介绍了一种基于GA遗传优化的阈值计算方法在认知异构网络(CHN)中的应用。通过Matlab2022a实现算法,完整代码含中文注释与操作视频。能量检测算法用于感知主用户信号,其性能依赖检测阈值。传统固定阈值方法易受噪声影响,而GA算法通过模拟生物进化,在复杂环境中自动优化阈值,提高频谱感知准确性,增强CHN的通信效率与资源利用率。预览效果无水印,核心程序部分展示,适合研究频谱感知与优化算法的学者参考。
|
2月前
|
运维 监控 算法
解读 C++ 助力的局域网监控电脑网络连接算法
本文探讨了使用C++语言实现局域网监控电脑中网络连接监控的算法。通过将局域网的拓扑结构建模为图(Graph)数据结构,每台电脑作为顶点,网络连接作为边,可高效管理与监控动态变化的网络连接。文章展示了基于深度优先搜索(DFS)的连通性检测算法,用于判断两节点间是否存在路径,助力故障排查与流量优化。C++的高效性能结合图算法,为保障网络秩序与信息安全提供了坚实基础,未来可进一步优化以应对无线网络等新挑战。
|
2月前
|
监控 算法 安全
基于 PHP 语言深度优先搜索算法的局域网网络监控软件研究
在当下数字化时代,局域网作为企业与机构内部信息交互的核心载体,其稳定性与安全性备受关注。局域网网络监控软件随之兴起,成为保障网络正常运转的关键工具。此类软件的高效运行依托于多种数据结构与算法,本文将聚焦深度优先搜索(DFS)算法,探究其在局域网网络监控软件中的应用,并借助 PHP 语言代码示例予以详细阐释。
51 1
|
17天前
|
运维 监控 安全
如何高效进行网络质量劣化分析与流量回溯分析?-AnaTraf
在数字化时代,网络质量分析与流量回溯对保障业务运行至关重要。网络拥塞、丢包等问题可能导致业务中断、安全隐患及成本上升。传统工具常缺乏细粒度数据,难以溯源问题。流量回溯分析可还原现场,助力精准排障。AnaTraf网络流量分析仪作为专业工具,能高效定位问题,提升团队响应力,降低运营风险。
如何高效进行网络质量劣化分析与流量回溯分析?-AnaTraf
|
15天前
|
大数据
“你朋友圈的真面目,大数据都知道!”——用社交网络分析看透人情世故
“你朋友圈的真面目,大数据都知道!”——用社交网络分析看透人情世故
60 16
|
16天前
|
数据采集 机器学习/深度学习 算法
别急着上算法,咱先把数据整明白:大数据分析的5个基本步骤,你都搞对了吗?
别急着上算法,咱先把数据整明白:大数据分析的5个基本步骤,你都搞对了吗?
50 4
|
1月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GA遗传优化TCN-GRU时间卷积神经网络时间序列预测算法matlab仿真
本项目基于MATLAB2022a开发,提供无水印算法运行效果预览及核心程序(含详细中文注释与操作视频)。通过结合时间卷积神经网络(TCN)和遗传算法(GA),实现复杂非线性时间序列的高精度预测。TCN利用因果卷积层与残差连接提取时间特征,GA优化超参数(如卷积核大小、层数等),显著提升模型性能。项目涵盖理论概述、程序代码及完整实现流程,适用于金融、气象、工业等领域的时间序列预测任务。
|
1月前
|
存储 监控 算法
员工行为监控软件中的 Go 语言哈希表算法:理论、实现与分析
当代企业管理体系中,员工行为监控软件已逐步成为维护企业信息安全、提升工作效能的关键工具。这类软件能够实时记录员工操作行为,为企业管理者提供数据驱动的决策依据。其核心支撑技术在于数据结构与算法的精妙运用。本文聚焦于 Go 语言中的哈希表算法,深入探究其在员工行为监控软件中的应用逻辑与实现机制。
61 14
|
2月前
|
存储 人工智能 编解码
Deepseek 3FS解读与源码分析(2):网络通信模块分析
2025年2月28日,DeepSeek 正式开源其颠覆性文件系统Fire-Flyer 3FS(以下简称3FS),重新定义了分布式存储的性能边界。本文基于DeepSeek发表的技术报告与开源代码,深度解析 3FS 网络通信模块的核心设计及其对AI基础设施的革新意义。
Deepseek 3FS解读与源码分析(2):网络通信模块分析
|
1月前
|
存储 监控 算法
基于 Python 哈希表算法的局域网网络监控工具:实现高效数据管理的核心技术
在当下数字化办公的环境中,局域网网络监控工具已成为保障企业网络安全、确保其高效运行的核心手段。此类工具通过对网络数据的收集、分析与管理,赋予企业实时洞察网络活动的能力。而在其运行机制背后,数据结构与算法发挥着关键作用。本文聚焦于 PHP 语言中的哈希表算法,深入探究其在局域网网络监控工具中的应用方式及所具备的优势。
70 7