其他
神经网络优化中的Weight Averaging
©PaperWeekly 原创 · 作者|张子逊
研究方向|神经网络剪枝、NAS
Stochastic Weight Averaging (SWA)
在神经网络的优化中,有一个比较公认的问题就是 train loss 和 test loss 优化曲面不一致。导致这个问题可能的原因有很多,(以下是个人推测)可能是 train 和 test 数据本身存在分布不一致的问题、也可能是因为训练的时候在 train loss 中加入了一系列正则化等等。由于这个不一致的问题,就会导致优化出来的网络 generalization performance 可能会不好。
本文提出了一个比较简单直接的方式来解决这个问题,在优化的末期取 k 个优化轨迹上的 checkpoints,平均他们的权重,得到最终的网络权重,这样就会使得最终的权重位于 flat 曲面更中心的位置。这个方法也被集成到了 PyTorch 1.6 之后的版本中。
本文的实验分析部分也给出了详细的分析和结果来验证这样的一种方法是有效的。首先是分析的部分,本文通过可视化绘制了通过 SWA 和 SGD 在 loss landscape 上的收敛位置,以及 SGD 优化得到的权重对应的 loss 和 error 相比 SWA 得到的权重的距离,如下图所示。
从图上可以看到几个有趣的现象:首先,train loss 和 test loss 的 landscape 之间确实存在偏移;其次,SGD 更倾向于收敛到 flat 区域的边缘。比较直观的一种猜想就是,利用这样的性质,SWA 可以通过平均 flat 区域边缘的一些 checkpoints,来使得最终的收敛位置更靠近中心的位置。在实际实验中,也显示了类似的结果,经过 SWA 平均之后,网络的测试准确率都有不同程度的提升。
Stochastic Weight Averaging in Parallel
Lookahead Optimizer
前面提到的 SWA 在优化上,并没有改变原本优化器更新的梯度,只在结束之后选取一部分 checkpoints 进行 weight averaging 得到最终的权重。而这篇文章则是在更新过程中,利用指数移动平均的方式来计算梯度更新权重。
本文提出了一种权重的更新策略,每一个 step 的优化中维护两组权重,第一组称为 fast weight,就是常规优化器更新得到的权重,第二组称为 slow weight,是利用 fast weight 得到的权重。之所以称为 fast/slow,是由于二者的更新频率不同,先用 fast 更新 k 步,然后根据得到的 fast weight 更新 slow weight 1 步作为这一个优化 step 的结果,依次循环进行。
在实验中,本文也通过大量的实验,验证了 Lookahead 优化器在前期比 SGD 优化的更快。此外,在实验分析中,本文也发现了一个有趣的现象,就是每一轮从 slow weight 开始 fast weight(SGD/Adam 更新)反而让 loss 上升了,而经过 slow weight 移动平均之后 loss 又恢复了下降。
参考文献
更多阅读
#投 稿 通 道#
让你的论文被更多人看到
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学习心得或技术干货。我们的目的只有一个,让知识真正流动起来。
📝 来稿标准:
• 稿件确系个人原创作品,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向)
• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接
• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志
📬 投稿邮箱:
• 投稿邮箱:hr@paperweekly.site
• 所有文章配图,请单独在附件中发送
• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通
🔍
现在,在「知乎」也能找到我们了
进入知乎首页搜索「PaperWeekly」
点击「关注」订阅我们的专栏吧
关于PaperWeekly
PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。