背景
在分布式训练时,提升计算通讯占比是提升计算加速比的有效手段,当网络通讯优化到必定程度时,只有经过增长每一个worker上的batch size来提高计算量,进而提升计算通讯占比。然而一直以来Deep Learning模型在训练时对Batch Size的选择都是异常敏感的,一般的经验是Large Batch Size会使收敛性变差,而相对小一点的Batch Size才能收敛的更好。当前学术界和工业界已经有一些论文来论证Large Batch Size对收敛性的影响,甚至提出了一些如何使用Large Batch去提升收敛性的方法,本文将对这些论文的重点和脉络作一个梳理。
论文脉络梳理
Large Batch Training是目前学术界和工业界研究的热点,其理论发展很是迅速。但因为非凸优化和Deep Learning的理论研究自己还处于并将长期处于初级阶段,因此即便存在各类各样的理论解释和证实,Large Batch Training相关的理论也还没有获得完全的解释。为了可以让读者可以更容易理解Large Batch Training当前的学术发展,也为了让论文的阅读更有脉络,咱们把学术界中的相关论文按照观点的提出顺序做为梳理以下。下面列出的每篇论文后面都有其要点,便于读者阅读时有个大概的感受。由于本篇主要梳理Large Batch Training的理论部分,因此会对重点的论文进行分析解释。
- 《Accurate, Large Minibatch SGD:Training ImageNet in 1 Hour》:这是FaceBook提出的一篇极具争议性的论文,从实践上来讲它的的复现难度也是比较大的。该论文从实践的角度出发,在ResNet上提出了一种针对Large batch training的训练方法,即learning rate scaling rule。当batch size相对于baseline增长N倍时,learning rate也要相应的增长N倍,但也指出batch size的提高有一个upper bound,超过这个值,泛化性依然会变得不好。这篇论文对learning rate scaling rule有一些公式推导,但并不本质,更多的是作了较强的假设。整体来讲,这是一篇实验作得比较solid,但理论基础并不丰满的实践论文。
- 《A BAYESIAN PERSPECTIVE ON GENERALIZATION AND STOCHASTIC GRADIENT DESCENT》:这是Google发在ICLR 2018上的一篇理论和实验都比较完善的论文。由于在ResNet上已经有了Learning Rate Scaling Rule的成功经验,所以该论文从贝叶斯的角度解释了泛化性和SGD。论文的核心观点是指出了Batch Training相对于Full Batch Training来讲引入了Noise,而Noise具备波动的效果,这在论文里被称为Flucturate,它能够在更新时在必定程度上偏离Sharp Minima,从而进入Broad Minima,进而有了较好的泛化性,因此Noise起了较大的做用。进一步的,论文中将SGD的更新公式进行进行分析,等价为一个微分方程的定积分结果,经过将SGD更新公式与微分方程进行等价,导出了Flucturate的表达式,肯定了影响其值的变更因素,即和Learning Rate与Batch size有关。若把Flucturate看作常量,那么Learning Rate与Batch Size能够近似看作是线性关系,这与论文2中的Learning Rate Scaling Rule一致。整体来讲,这篇论文数学理论相对丰满的解释了Learning Rate Scaling Rule。
- 《Don't Decay the Learning Rate, Increase the Batch Size》:这是Google发在ICLR 2018上的第二篇论文,这篇论文的实验和结论很是简单,可是理论基础依然来自于论文3,因此阅读此篇论文以前必定要精度论文3。该论文从推导出的Mini Batch SGD的Flucturate公式出发,提出了一种使用Large Batch Training的加速方法。由于在一个完整的模型训练过程当中,一般会随着轮数的增长而适当对Learning Rate作Decay。经过论文3中给出的公式,即Flucturate固定时,Learning Rate与Batch Size成正比关系,引起了思考:到底是Learning Rate自己须要Decay才能使训练过程继续,仍是Learning Rate的Decay间接影响了Noise的Flucturate才能使训练过程继续?经过实验验证,真正影响训练过程的本质是Noise的Flucturate。所以咱们考虑到Learning Rate与Batch Size的正比例关系,咱们能够固定Learning Rate不变,而将Batch Size增长N倍来缩小Noise的Flucturate。定时增长Batch Size不但能够维持原有方式的Flucturate,还能够加速训练过程,减小Update的更新频次,增长计算通讯占比,提升加速比。整体来讲,该论文基于论文3为理论基础,提出了一种逐渐增长Batch Size提升计算加速比和收敛加速比的方法。
要点梳理
能够按顺序梳理成如下几个方面
理论基础
- 从贝叶斯理论角度出发,论证Broad Minima相对于Sharp Minima具备更好的泛化性
- 用贝叶斯理论解释泛化性是有效的
- 贝叶斯理论与SGD
- 随机偏微分方程的与Scaling Rule的推导
优化方法
- 使用Large Batch Training提升训练速度
理论基础
理论基础来自于论文《A BAYESIAN PERSPECTIVE ON GENERALIZATION AND STOCHASTIC GRADIENT DESCENT》,这里只对重点内容进行记录。
从贝叶斯理论角度出发,论证broad minima相对于sharp minima具备更好的泛化性
内容
这部分公式较多,但确实是贝叶斯的理论基础,因此尽可能以简单的形式展示出来。首先假设某模型M只有一个参数w,训练样本为x,Label为y,那么能够跟据贝叶斯公式直接写出下面的等式
其中等号右面分母上的第一项能够看作似然函数
通常状况下,咱们对模型参数的分布会作高斯假设
能够看出这个公式就是模型训练中Loss Function的主要部分,前面一项H(w;M)是Cost,然后面一项是正则项。咱们要最小化Loss Function,本质上是最大化C(w;M)这一项。假设咱们训练了两组模型参数,如何判断哪个模型的泛化性更好?这里使用以下公式来判断。
等式右面的第二项是对模型的偏好因子,在这里应该均设置为1,消除偏置的影响。右边第一项咱们叫作Bayesian Evidence Ratio,它描述了训练样本改变了咱们对模型先验偏好的程度。为了计算这个比值,咱们须要计算分子和分母。
使用泰勒展开式对C(w;M)在最优值w_0附近进行近似展开,获得以下式子。
至此,咱们能够对上述公式的结果进行分析。上述公式中最后一项其实就是Occam Factor。经过分析咱们也知道二阶导数正负衡量的是函数的凹凸性,而二阶导数的大小衡量和曲率相关。当C''(w_0)越大时,该位置附近就越弯曲,越接近sharp minima,进而致使P(y|x;M)的几率越低,这符合Occam Razor的原则,越简单的模型泛化性越好,这是由于简单的模型是在Broad Minima上。也能够提升正则系数对C''(w_0)进行惩罚,从而控制Occam factor,提升泛化性。当扩展到多个参数后,该公式以下所示。
分析方法相同,再也不赘述。
小结
这一部分做者从贝叶斯理论出发,从公式上推导出了Occam Razor的结论,而且论证了落入Sharp Minima的模型泛化性较差的缘由,同时也得出了正则项对Sharp Minima具备惩罚做用。
用贝叶斯理论解释泛化性是有效的
内容
这里做者借鉴了论文《Understanding deep learning requires rethinking generalization》中的实验来从贝叶斯理论解释泛化性,与ICLR 2017的这篇Best Paper使用的Deep Learning Model不一样,做者使用了最简单的线性模型进行实验,缘由是线性模型在计算Bayesian Evidence的时候比Deep Learning简单不少。具体的实验配置能够参考论文,这里直接给出图表。
注:Bayesian Evidence其实是Log Bayesian Evidence,对上面的结果取了对数。
这个实验主要是为了证实Bayesian Evidence的曲线和Test Cross Entropy的变化趋势是一致的,而且也复现了《Understanding deep learning requires rethinking generalization》中呢Deep Learning Model的结果。
小结
这一节中的实验证实,使用贝叶斯理论解释泛化性是有效的,而且得出了预期一致的结果。
贝叶斯理论与SGD
内容
在得出Bayesian Evidence和泛化性是强相关关系的结论以后,做者再次对SGD产生了思考。由于不管是Large Batch仍是Small Batch,他们都是Full Batch的近似结果,因此都会引入Noise。做者认为形成不一样Batch Size产生不一样泛化性的根本缘由是Noise的Flucturate程度。必定程度的Noise能够逃离Sharp Minima,带领模型进入Bayesian Evidence较大的区域,即Broad Minima区域;而Batch Size越大,Noise的Flucturate就越小,就很容易陷入Sharp Minima。(这部分的公式推导在这里先不给出,由于这不是这篇文章的重点,有兴趣的同窗能够关注这篇论文的附录A)这说明SGD的更新规则自己就带有了一些正则化效果,这个正则化的效果很大程度上来自于SGD自己引入的Noise。这与ICLR 2017 Best Paper《Understanding deep learning requires rethinking generalization》观察到的现象和得出的结论一致,该篇文章中主要思考的一个问题是,SGD在训练彻底部样本以后,为何不是记住全部的样本,而是还学到了一些泛化性?
回到这篇论文,做者认定必定存在一个最佳Batch Size,这个Batch Size既没有使模型进入Sharp Minima区域,又有必定的复杂性,使之让当前的模型效果最好。因而作了不一样的实验,获得如下结果。
这些实验其实就是验证不一样Batch Size训练出的模型在test集上的表现,并说明存在一个最佳的Batch Size,使用它训练出的模型,其泛化性优于其余Batch Size训练出的模型。
小结
这一部分从对贝叶斯与泛化性的思考入手,进而尝试解释SGD的特色,从而试图验证不一样Batch Size对泛化性的影响。Batch Size的选取能够当作是Depth(Sharp)和Breadth(Broad)的Trade off,因此存在一个最佳的Batch Size,在其余超参数固定时使模型达到最好的泛化效果。
随机偏微分方程的与scaling rule的推导
内容
由于Batch Size的选取,从贝叶斯角度去理解,实际上就是Depth和Breadth的Trade off。因此能够更进一步的对SGD引入的Noise进行分析,进一步去探究这个Noise带来的Flucturate与哪些因素相关,这就须要和随机偏微分方程创建联系了。
其中N表明训练集的样本数,ε表明学习率。假设咱们用<>表明指望的计算,那么咱们有
根据中心极限定理,咱们能够得出如下结论
因此标准的Stochastic Gradient Descent能够当作是标准梯度加上一个Noise,这个Noise就是α中的内容。下面进一步研究Noise的性质。
其中,F(w)为梯度的协方差项,δ_ij表明了Indicator,即当i=j时,δ_ij=1,不然等于0。这是由于样本和样本之间是相互独立的关系,因此协方差应该等于0。若是看不懂这个公式能够按照下面的原型推理,一目了然。
根据协方差矩阵的可列可拆的性质,咱们求得以下指望。
至此,Noise的统计特性已经所有计算出来,下面须要和随机偏微分方程进行等价。首先,SGD的Update规则是一个离散的过程,不是连续的过程。若是咱们把SGD的每一步想象成为一个连续的可微分的过程,每次Update一个偏微分算子,那么能够将上述学习率为ε的Update公式当作是某个微分方程的定积分结果,下面先介绍这个偏微分方程(这个偏微分方程的产生来自于《Handbook of Stochastic Methods》)。
这里t是连续的变量,η(t)表明了t时刻的Noise,具备以下性质。
由于咱们知道Noise的指望一定等于0,而方差会有个波动的Scale,且波动的大小是以F(w)有关,因此这个Scale咱们用g来表示,即Flucturate。而SGD的Update规则能够改写以下所示。
为了探求g的变化因素,咱们须要将偏微分方程的最后一项的方差和SGD的α方差对应起来,获得
上面最后的积分公式推导可能会有些迷惑,大概是会迷惑在积分的方差是如何化简到二重积分这一过程,其实积分符号只是个对连续变量的求和过程,因此依然可使用协方差的可列可拆的性质,若是仍是不习惯,将积分符合和dt换成求和符号再去使用协方差公式便可轻松获得结论。
因此,咱们获得了至关重要的结论,这是在必定程度上可以解释Learning Rate Scaling Rule的结论。
因此,咱们获得告终论,SGD引入了一些Noise,这个Noise具备必定的Flucturate,它的大小是和Batch Size成反比,与Learning Rate成正比。
小结
这一节使用偏微分方程和SGD的更新规则,通过一系列的数学推导,获得了SGD引入的Noise对更新过程的Flucturation大小与Batch size和Learning rate的关系。这是这篇论文十分重要的结论,也是Learning Rate Scaling Rule的理论基石。
理论总结
至此,理论基础部分梳理完毕,虽然公式较多较为复杂,可是结论却很是简单。做者从贝叶斯理论的角度出发,推导出了Occam Razor的形式表达,并从公式上论证了Sharp Minima相对于Broad Minima泛化性差的缘由。然后又验证了Bayesian Evidence和模型泛化性一致的结论,进而从贝叶斯理论的角度对SGD的更新过程进行了猜想:SGD会引入Noise,而正是Noise的Flucturate帮助模型在更新过程当中逃离Sharp Minima,进入更高的Bayesian Evidence区域,即Broad Minima,因此指出Batch Size的选择其实是Noise Flucturate的调整,本质上是Sharp Minima和Broad Minima的Trade off。最后做者经过将SGD更新公式进行改写,并联合偏微分方程,得出了Noise的Fluctruate的形式表达,它Batch Size成反比,和Learning Rate成正比。
以前FAIR发表的论文《Accurate, Large Minibatch SGD:Training ImageNet in 1 Hour》中提出了Learning Rate Scaling Rule在ResNet上具备很好的效果,该论文在实验上作的比较充分,可是在理论上并无特别Solid,而Google的这篇论文能够做为它的理论基石之一。
优化方法
优化方法来自论文《Don't Decay the Learning Rate, Increase the Batch Size》,这篇论文在理解完前一篇论文以后会显得很是简单,彻底是一篇实验性论文,实验作得较为充分,这里只会对重要内容作个简单的梳理。
理论基础公式
对于SGD来讲,Flucturation形式表达为
对于Momentum-SGD来讲,形式表达为(公式推导来自于langvein动力学)
Large batch training的优化原理
不管是SGD仍是Momentum-SGD,咱们均可以发现g与Batch Size成反比,与Learning Rate成正比,而在通常的Deep Learning Model训练过程当中,会在固定轮数对Learning Rate作Decay,这个过程让做者引起了思考,究竟在训练过程当中,泛化性的提高是因为Learning Rate作Decay致使的,仍是g发生变化致使的?若是是后者,那么定时增长Batch Size也应该会达到一样的效果,所以做者作了几组实验。
做者作了三组实验,一组是标准的对Learning Rate作Decay,一组是固定Rearning Rate不变,在原来发生Learning Rate Decay的轮数将Batch Size扩大N倍(N是Learning Rate Decay的Factor,即与Learning Rate的Decay为相同力度)。另外一组是两者的结合Hybrid,即先Learning Rate Decay,后变化Batch Size。实验证实三者的泛化性曲线相同,因此证实了Learning Rate Decay其实是对g作了Scale down。然而增长Batch Size不但能够达到一样的效果,还能提升计算通讯占比,而且在总体训练过程当中减小Update的次数,这是Increase Batch Size Training的优化点。
关于Momentum-SGD
在Momentum-SGD的flucturation形式表达中,咱们还看到了momentum的做用,即增长m的值能够增长g的值。可是实验证实,增长m同时扩大batch size获得的泛化性相对于改变learning rate和batch size要差一些。这是由于提升momentum会使Momentum-SGD中的accumulator须要更多的轮数才能到达稳定的状态,而在到达稳定状态以前,update的scale是会被supressed的,做者在论文附录中论证了这一观点,这里再也不详细赘述。后续的实验也证实了这一点。
更大Batch Size和消除Warm Up
在论文《Accurate, Large Minibatch SGD:Training ImageNet in 1 Hour》中,做者实验的最大Batch Size为8192。然而在这篇论文中,做者使用更大的初始Batch Size(最大尝试到65536)对ImageNet进行训练,而且在固定的轮数对Noise作Decay(增长Batch Size)。做者消去了Warm Up的过程,可是引入了Mometum的超参调优,当使用更大Batch Size时,不只调整初始Learning Rate,还增长m值来进一步放大Noise,帮助训练过程逃离Sharp Minima。实验效果以下。
小结
此篇论文更像是《A BAYESIAN PERSPECTIVE ON GENERALIZATION AND STOCHASTIC GRADIENT DESCENT》工做的延续,以该篇论证的理论基础出发,得出了一种提升训练计算加速比和收敛加速比的方法。结论和实验比较简单,但背后的数学推导较为复杂。
总结
工业界的分布式算力提高对Large Batch Training提出了需求,由于增长Batch Size显然是提升计算通讯占比的最佳方式,因此Large Batch Training固有的收敛性问题就成为了学术界研究的重点方向。本文经过梳理近些年来学术界对Large Batch Training的论文研究,从理论角度阐述了Large Batch Training形成收敛性较差的缘由——容易陷入Broad Minima。而Google发表的论文从贝叶斯角度给出了另外的解释——不一样Batch Size训练引入的Noise不一样形成Fluctuate也不一样,最终致使收敛性的不一样。为了验证这一观点,Google又从实践角度给出了验证——经过固定Learning Rate,逐步增大Batch Size来稳定Fluctuate,达到使用大Batch Size加速训练的目的。截止到目前,这些理论方面的论证和解释依然处于蓬勃发展之中,将来还会有更深刻研究在学术界中出现。