文章起源 | 恒源云社区(专一人工智能/深度学习云 GPU 服务器训练平台,官网体验网址:恒源智享云)
原文地址 | NAG优化器
原文作者 | 角灰
社区人才济济,小编明天又发现一个宝藏版主‘角灰’。
小编是个爱分享的人,看见好文章好作者怎能管制住不分享给大家呢?所以,接下来跟着小编我,一起疾速浏览一下文章内容吧!
注释开始
最近在看fairseq源码时发现NAG优化器 (Nesterov Accelerate gradient)的实现与torch自带的有些许不一样,于是打算查下材料理解分明。
先回顾下Momentm,该梯度降落法引入动量的概念,应用对历史梯度进行滑动指数加权均匀,最早的梯度衰减的最快,对以后更新影响小;反之,越靠近以后的梯度对更新的影响越大,公式为:
其中Vt、gt、g(t)别离代表t时刻的速度、梯度、模型参数,是动量系数,lr是学习率。该办法的思维是对网络参数进行平滑解决,让梯度的摆动幅度不要太大。
NAG相似Momentum,它们都是利用历史梯度来更新参数,区别在于,NAG先利用Vt,对t进行局部更新失去t+Vt,而后利用梯度g(t+Vt)更新失去t+1,其公式如下所示:
此处是学习率。
下图对Momentum和NAG作了形象解释:
Momentum应用以后地位A处的速度Vt和梯度g(t)间接更新到目的地C;而NAG从A点先沿着惯性方向走一小步到B,此处距C很靠近了, 再利用B处的梯度g(t+Vt)更新到C。
论文中认为这样能够疾速更新V,使得Nag比momentum更稳固,且更适宜于大学习率的场景。除此之外,如果Nag用Vt更新到B点较差时,因为B点梯度g(t+Vt)比momentum的g(t)更大,因而Nag能更快往回修改到起始点A。
言归正传,这是torch.optim.SGD的公式和代码[1]:
这是fairseq.optim.nag的公式和代码[2]:
能够看出两者实际上还是有些不同,而Fairseq的nag实际上和论文的公式基本一致,[3]中有推导:
其中的就是本文的动量系数,先对t+Vt做了代换失去t’后,最初将t’当成待更新的参数t,也就是每次更新的始终是t+Vt,对于这个的解释见下图及[4]:
总之,nag优化器能减速收敛,且应用很大的学习率也很稳固,难怪fairseq外面ConvS2S能应用0.5的学习率。
[1]torch sgd
[2]fairseq nag
[3]深度学习中优化办法
[4]CS231n Convolutional Neural Networks for Visual Recognition