©PaperWeekly 原创 · 作者|苏剑林

单位|追一科技

研究方向|NLP、神经网络

本文的主题是“为什么我们需要有限的学习率”,所谓“有限”,指的是不大也不小,适中即可,太大容易导致算法发散,这不难理解,但为什么太小也不好呢?一个容易理解的答案是,学习率过小需要迭代的步数过多,这是一种没有必要的浪费,因此从“节能”和“加速”的角度来看,我们不用过小的学习率。

但如果不考虑算力和时间,那么过小的学习率是否可取呢?Google 最近发布在 Arxiv 上的论文 Implicit Gradient Regularization [1] 试图回答了这个问题,它指出有限的学习率隐式地给优化过程带来了梯度惩罚项,而这个梯度惩罚项对于提高泛化性能是有帮助的,因此哪怕不考虑算力和时间等因素,也不应该用过小的学习率。

对于梯度惩罚,笔者已有过多次讨论,在文章对抗训练浅谈:意义、方法和思考(附 Keras 实现)和泛化性乱弹:从随机噪声、梯度惩罚到虚拟对抗训练中,我们就分析了对抗训练一定程度上等价于对输入的梯度惩罚,而文章《我们真的需要把训练集的损失降低到零吗?》[2] 介绍的 Flooding 技巧则相当于对参数的梯度惩罚。

总的来说,不管是对输入还是对参数的梯度惩罚,都对提高泛化能力有一定帮助。

降得最快的方向

该论文跟这个系列的文章一样,将优化过程看成是求解微分方程。回顾之前的文章从动力学角度看优化算法:一个更整体的视角,设损失函数为







,我们将




看成是看成是沿着某种时间参数 t 变化的轨迹







,现在我们考虑它的变化率:

我们希望










随着时间的变化是递减的(Loss 越小越好),所以希望上式小于 0,当模长














固定时,上式右端的最小值在梯度的反方向

















取到,所以我们说梯度的负方向下降得最快方向。简单期间,我们可以直接令:

那么求解参数




就转化为求解上述常微分方程组,这也是“从动力学角度看优化算法”这个系列的基本出发点。

藏在学习率中的正则

然而,实际的问题是,我们没法真正去求解微分方程组(2),我们只能用数值迭代,比如采用最简单的欧拉法,得到:

这其实就是最朴素的梯度下降法,其中




也就是我们常说的学习率。上式本质上就是一个差分方程。

可以想象,从






出发,得到的点



























与方程组(2)的精确解





















会有一定的出入。

如何衡量出入到什么程度呢?不妨这样想象,



























其实也是某个类似(2)的微分方程组的精确解,只不过对应的










换成了某个新的















,我们比较


























的差异就好了。

经推导,如果仅保留到




的一阶项,那么有:

推导过程我们放在下一节。可以看到,其实就相当于往损失函数里边加入了梯度惩罚形式的正则项























,而梯度惩罚项有助于模型到达更加平缓的区域,有利于提高泛化性能。

这也就是说,离散化的迭代过程隐式地带来了梯度惩罚项,反而是对模型的泛化是有帮助的,而如果






,这个隐式的惩罚则会变弱甚至消失。

因此,结论就是学习率不宜过小,较大的学习率不仅有加速收敛的好处,还有提高模型泛化能力的好处。当然,可能有些读者会想,我直接把梯度惩罚加入到 loss 中,是不是就可以用足够小的学习率了?理论上确实是的,原论文将梯度惩罚加入到 loss 中的做法,称为“显式梯度惩罚”。

差分方程到微分方程

对于差分方程到微分方程的转换,我们可以用普通的“摄动法”来求解,笔者也有过简单介绍(可以查看标签“摄动” [3] )。不过更漂亮的解法是直接利用算符的级数运算来做,参考之前的文章《算符的艺术:差分、微分与伯努利数》[4] 。

我们用泰勒级数展开











如果将对 t 求导的运算记为 D,那么上式实际上是:

所以差分方程(3)可以写为:

跟常规的代数运算一样,我们有:

等号左端就是














,因此等号右端就是
















的表达式了,保留到一阶项为:

也就是:

所以一阶的 ,推导完毕。

例行公事的小总结

深度学习的发展和普及离不开基于梯度下降的优化器的成功应用,而梯度下降为何能如此成功,依然还没得到深刻的解释。众多研究人员在“炼丹”过程中,多多少少也能总结出一些不知道为什么有效的“奇技淫巧”出来,诸如 batch_size 该取多大、学习率该怎么调,估计每个人也有自己的经验。

对于“学习率不能过小”这个现象,大家应该都有所体会,很多时候可能已经默认作为一个“常识”使用,而懒得思考背后的原理了。

Google 的这篇论文则为理解这个现象提供了一个可能的解释:适当而不是过小的学习率能为优化过程带来隐式的梯度惩罚项,有助于收敛到更平稳的区域。笔者认为其分析过程还是值得参考学习的。

参考文献

[1] https://arxiv.org/abs/2009.11162

[2] https://kexue.fm/archives/7643

[3] https://kexue.fm/tag/%E6%91%84%E5%8A%A8/

[4] https://kexue.fm/archives/3018

更多阅读

#投 稿 通 道#

 让你的论文被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学习心得技术干货。我们的目的只有一个,让知识真正流动起来。

???? 来稿标准:

• 稿件确系个人原创作品,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向)

• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接

• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志

???? 投稿邮箱:

• 投稿邮箱:hr@paperweekly.site

• 所有文章配图,请单独在附件中发送

• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通

????

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

关于PaperWeekly

PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。

从动力学角度看优化算法:为什么学习率不宜过小?相关推荐

  1. 从动力学角度看优化算法:自适应学习率算法

    作者丨苏剑林 单位丨广州火焰信息科技有限公司 研究方向丨NLP,神经网络 个人主页丨kexue.fm 在从动力学角度看优化算法SGD:一些小启示一文中,我们提出 SGD 优化算法跟常微分方程(ODE) ...

  2. 从动力学角度看优化算法:GAN的第三个阶段

    作者丨苏剑林 单位丨追一科技 研究方向丨NLP,神经网络 个人主页丨kexue.fm 在对 GAN 的学习和思考过程中,我发现我不仅学习到了一种有效的生成模型,而且它全面地促进了我对各种模型各方面的理 ...

  3. 从动力学角度看优化算法:一个更整体的视角

    作者丨苏剑林 单位丨广州火焰信息科技有限公司 研究方向丨NLP,神经网络 个人主页丨kexue.fm 最近把优化算法跟动力学结合起来思考得越来越起劲了,这是优化算法与动力学系列的第三篇,我有预感还会有 ...

  4. 从动力学角度看优化算法SGD:一些小启示

    作者丨苏剑林 单位丨广州火焰信息科技有限公司 研究方向丨NLP,神经网络 个人主页丨kexue.fm 在本文中,我们来关心优化算法 SGD(stochastic gradient descent,随机 ...

  5. 从动力学角度看优化算法:为什么SimSiam不退化?

    ©PaperWeekly 原创 · 作者|苏剑林 单位|追一科技 研究方向|NLP.神经网络 自 SimCLR [1] 以来,CV 中关于无监督特征学习的工作层出不穷,让人眼花缭乱.这些工作大多数都是 ...

  6. 【GAN优化】从动力学视角看GAN是一种什么感觉?

    今天讲述的内容是GAN与动力学,这是一个非常好玩.非常新鲜的视角.考虑到很多人微积分和线性代数等知识的涉猎不多,我将会对涉及的内容都做出基本说明,也并不会涉及过深入的东西,然后争取串成一个故事,扩展一 ...

  7. 动态规划——最长上升子序列问题 两种角度及优化算法

    最长上升子序列 OpenJ_Bailian - 2757 一个数的序列 bi,当 b1 < b2 < ... < bS的时候,我们称这个序列是上升的.对于给定的一个序列( a1, a ...

  8. Adam 那么棒,为什么还对 SGD 念念不忘?一个框架看懂深度学习优化算法

    作者|Juliuszh 链接 | https://zhuanlan.zhihu.com/juliuszh 本文仅作学术分享,若侵权,请联系后台删文处理 机器学习界有一群炼丹师,他们每天的日常是: 拿来 ...

  9. Adam那么棒,为什么还对SGD念念不忘?一个框架看懂深度学习优化算法

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者|Juliuszh,https://zhuanlan.zhih ...

最新文章

  1. CSS清除浮动大全共8种方法
  2. [实现]Javascript代码的另一种压缩与加密方法——代码图片转换
  3. python template用法_python中Template的使用介绍
  4. 角色动作系统概述:战斗、3C相关
  5. 数组索引必须为正整数或逻辑值是什么意思_贪心算法:K次取反后最大化的数组和...
  6. Pandas入门3(dtype+fillna+replace+rename+concat+join)
  7. python3 tkinter详解_python tkinter基本属性详解
  8. [leetcode]190. 颠倒二进制位
  9. Tab,回车/换行组合符
  10. 随机生成一串字符串(java)
  11. libcrypto.so.1.0.0编译
  12. java组件技术考试题_Java核心技术2020年春答案试题题目及答案,期末考试题库,章节测验答案...
  13. 转易语言-网页游戏辅助,网络游戏辅助,手游辅助开发技术教程
  14. 推荐比较好的广告联盟之BloggerAds-部落格行销,来自台湾的CPM博客赚钱联盟
  15. 计算机快捷键word,电脑中怎样自定义Word2010快捷键【图文教程】
  16. 图像处理之计算任意点与轮廓点集中距离最近的点坐标
  17. 如何在桥接模式下使用Eero保持路由器的高级功能
  18. OpenAI 首个研究成果 生成式模型系列
  19. java IO的学习记录
  20. npj | 王德华/张学英等揭示荒漠啮齿动物通过“菌群-肠-肾”轴耐受高盐的机制...

热门文章

  1. python多个list合并成一个table_python – 将同一表模式的多个备份合并到一个主表中...
  2. 前端常见知识点一之HTTP
  3. 异步加载js的三种方法
  4. 题解报告:hdu 4907 Task schedule
  5. 你不可不知的30个项目管理术语(中英文对照)
  6. window 内核详尽分析
  7. movzbl和movsbl
  8. ms SQL Server表自增字段重置
  9. 分别是什么意思_美国FBA头程:空派/海派分别是什么意思?
  10. oracle 排序的分析函数,Oracle分析函数用法详解