从动力学角度看优化算法:为什么学习率不宜过小?
©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 的交流群里。
从动力学角度看优化算法:为什么学习率不宜过小?相关推荐
- 从动力学角度看优化算法:自适应学习率算法
作者丨苏剑林 单位丨广州火焰信息科技有限公司 研究方向丨NLP,神经网络 个人主页丨kexue.fm 在从动力学角度看优化算法SGD:一些小启示一文中,我们提出 SGD 优化算法跟常微分方程(ODE) ...
- 从动力学角度看优化算法:GAN的第三个阶段
作者丨苏剑林 单位丨追一科技 研究方向丨NLP,神经网络 个人主页丨kexue.fm 在对 GAN 的学习和思考过程中,我发现我不仅学习到了一种有效的生成模型,而且它全面地促进了我对各种模型各方面的理 ...
- 从动力学角度看优化算法:一个更整体的视角
作者丨苏剑林 单位丨广州火焰信息科技有限公司 研究方向丨NLP,神经网络 个人主页丨kexue.fm 最近把优化算法跟动力学结合起来思考得越来越起劲了,这是优化算法与动力学系列的第三篇,我有预感还会有 ...
- 从动力学角度看优化算法SGD:一些小启示
作者丨苏剑林 单位丨广州火焰信息科技有限公司 研究方向丨NLP,神经网络 个人主页丨kexue.fm 在本文中,我们来关心优化算法 SGD(stochastic gradient descent,随机 ...
- 从动力学角度看优化算法:为什么SimSiam不退化?
©PaperWeekly 原创 · 作者|苏剑林 单位|追一科技 研究方向|NLP.神经网络 自 SimCLR [1] 以来,CV 中关于无监督特征学习的工作层出不穷,让人眼花缭乱.这些工作大多数都是 ...
- 【GAN优化】从动力学视角看GAN是一种什么感觉?
今天讲述的内容是GAN与动力学,这是一个非常好玩.非常新鲜的视角.考虑到很多人微积分和线性代数等知识的涉猎不多,我将会对涉及的内容都做出基本说明,也并不会涉及过深入的东西,然后争取串成一个故事,扩展一 ...
- 动态规划——最长上升子序列问题 两种角度及优化算法
最长上升子序列 OpenJ_Bailian - 2757 一个数的序列 bi,当 b1 < b2 < ... < bS的时候,我们称这个序列是上升的.对于给定的一个序列( a1, a ...
- Adam 那么棒,为什么还对 SGD 念念不忘?一个框架看懂深度学习优化算法
作者|Juliuszh 链接 | https://zhuanlan.zhihu.com/juliuszh 本文仅作学术分享,若侵权,请联系后台删文处理 机器学习界有一群炼丹师,他们每天的日常是: 拿来 ...
- Adam那么棒,为什么还对SGD念念不忘?一个框架看懂深度学习优化算法
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者|Juliuszh,https://zhuanlan.zhih ...
最新文章
- CSS清除浮动大全共8种方法
- [实现]Javascript代码的另一种压缩与加密方法——代码图片转换
- python template用法_python中Template的使用介绍
- 角色动作系统概述:战斗、3C相关
- 数组索引必须为正整数或逻辑值是什么意思_贪心算法:K次取反后最大化的数组和...
- Pandas入门3(dtype+fillna+replace+rename+concat+join)
- python3 tkinter详解_python tkinter基本属性详解
- [leetcode]190. 颠倒二进制位
- Tab,回车/换行组合符
- 随机生成一串字符串(java)
- libcrypto.so.1.0.0编译
- java组件技术考试题_Java核心技术2020年春答案试题题目及答案,期末考试题库,章节测验答案...
- 转易语言-网页游戏辅助,网络游戏辅助,手游辅助开发技术教程
- 推荐比较好的广告联盟之BloggerAds-部落格行销,来自台湾的CPM博客赚钱联盟
- 计算机快捷键word,电脑中怎样自定义Word2010快捷键【图文教程】
- 图像处理之计算任意点与轮廓点集中距离最近的点坐标
- 如何在桥接模式下使用Eero保持路由器的高级功能
- OpenAI 首个研究成果 生成式模型系列
- java IO的学习记录
- npj | 王德华/张学英等揭示荒漠啮齿动物通过“菌群-肠-肾”轴耐受高盐的机制...