写点什么

恒源云 _ 语音识别与语义处理领域之 NAG 优化器

作者:恒源云
  • 2021 年 12 月 08 日
  • 本文字数:913 字

    阅读完需:约 3 分钟

恒源云_语音识别与语义处理领域之NAG优化器

文章来源 | 恒源云社区(专注人工智能/深度学习云 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

用户头像

恒源云

关注

专注人工智能云GPU服务器训练平台 2020.12.25 加入

还未添加个人简介

评论

发布
暂无评论
恒源云_语音识别与语义处理领域之NAG优化器