Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

苏剑林作者广州火焰信息科技有限公司单位NLP,神经网络研究方向

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

从动力学角度看优化算法SGD:一些小启示一文中,我们提出 SGD 优化算法跟常微分方程(ODE)的数值解法其实是对应的,由此还可以很自然地分析 SGD 算法的收敛性质、动量加速的原理等等内容。

在这篇文章中,我们继续沿着这个思路,去理解优化算法中的自适应学习率算法。

RMSprop

首先,我们看一个非常经典的自适应学习率优化算法:RMSprop。RMSprop 虽然不是最早提出的自适应学习率的优化算法,但是它却是相当实用的一种,它是诸如 Adam 这样更综合的算法的基石,通过它我们可以观察自适应学习率的优化算法是怎么做的。

算法概览

一般的梯度下降是这样的:

很明显,这里的 γ 是一个参数,便是学习率,它可能需要在不同阶段做不同的调整。而 RMSprop 则是:

算法分析

对比朴素的 SGD,可以发现 RMSprop 在对 θ 的更新中,将原来是标量的学习率 γ,换成了一个向量。

如果把这个向量也看成是学习率,那么 RMSprop 就是找到了一个方案,能够给参数的每个分量分配不同的学习率

这个学习率的调节,是通过因子来实现的,而则是梯度平方的滑动平均。本质上来说,“滑动平均”平均只是让训练过程更加平稳一些,它不是起到调节作用的原因,起作用的主要部分是“梯度”,也就是说,可以用梯度大小来调节学习率

自适应学习

为什么用梯度大小可以来调节学习率呢?其实这个思想非常朴素。

极小值点和ODE

话不多说,简单起见,我们先从一个一维例子出发:假设我们要求 L(θ) 的一个极小值点,那么我们引入一个虚拟的时间参数 t,转化为 ODE:

不难判断,L(θ) 的一个极小值点就是这个方程的稳定的不动点,我们从任意的 θ0 出发,数值求解这个 ODE,可以期望它最终会收敛于这个不动点,从而也就得到了一个极小值点。

最简单的欧拉解法,就是用去近似,从而得到:

也就是:

这就是梯度下降法了,θt+γ 相当于 θn+1,而 θt 相当于 θn,也就是每步前进 γ 那么多。

学习率思想

问题是,γ 选多少为好呢?当然,从“用去近似”这个角度来看,当然是 γ 越小越精确,但是 γ 越小,需要的迭代次数就越多,也就是说计算量就越大,所以越小越好是很理想,但是不现实。

所以,最恰当的方案是:每一步够用就好。可是我们怎么知道够用了没有?

因为我们是用去近似的,那么就必须分析近似程度:根据泰勒级数,我们有:

在我们这里有,那么我们有:

可以期望,当 γ 比较小的时候,误差项,也就是说,在一定条件下,γ∣L′(θt)∣ 本身就是误差项的度量,如果我们将 γ∣L′(θt)∣  控制在一定的范围内,那么误差也被控制住了。即:

其中 γ̃ 是一个常数,甚至只需要简单地 γ∣L′(θt)∣=γ̃(暂时忽略 L′(θt)=0 的可能性,先观察整体的核心思想),也就是:

这样我们就通过梯度来调节了学习率

滑动平均处理

读者可能会诟病,把 γ=γ̃/∣L′(θt)∣ 代入原来的迭代结果,不就是:

整个梯度你只用了它的符号信息,这是不是太浪费了?过于平凡:也就是不管梯度大小如何,每次迭代 θ 都只是移动固定的长度。

注意,从解 ODE 的角度看,其实这并没有毛病,因为 ODE 的解是一条轨迹 (t,θ(t)),上面这样处理,虽然 θ 变得平凡了,但是 t 却变得不平凡了,也就是相当于 t,θ 的地位交换了,因此还是合理的。

只不过,如果关心的是优化问题,也就是求 L(θ) 的极小值点的话,那么上式确实有点平凡了,因为如果每次迭代 θ 都只是移动固定的长度,那就有点像网格搜索了,太低效。

所以,为了改善这种不平凡的情况,又为了保留用梯度调节学习率的特征,我们可以把梯度平均一下,结果就是:

这个 λ 是一个接近于 1 但是小于 1 的常数,这样的话 Gt 在一定范围内就比较稳定,同时在一定程度上保留了梯度 L′(θt) 本身的特性,所以用它来调节学习率算是一个比较“机智”的做法。为了避免 t+γ̃,t+γ 引起记号上的不适应,统一用 n,n+1 来表示下标,得到:

这就是开头说的 RMSprop 算法了。

高维情形分析

上面的讨论都是一维的情况,如果是多维情况,那怎么推广呢? 

也许读者觉得很简单:把标量换成向量不就行了么?并没有这么简单,因为 (13) 推广到高维,至少有两种合理的选择:

或:

前者用梯度的总模长来累积,最终保持了学习率的标量性;后者将梯度的每个分量分别累积,这种情况下调节后的学习率就变成了一个向量,相当于给每个参数都分配不同的学习率。要是从严格理论分析的角度来,其实第一种做法更加严密,但是从实验效果来看,却是第二种更为有效。

我们平时所说的 RMSprop 算法,都是指后者 (15)。但是有很多喜欢纯 SGD 炼丹的朋友会诟病这种向量化的学习率实际上改变了梯度的方向,导致梯度不准,最终效果不够好。所以不喜欢向量化学习率的读者,不妨试验一下前者。

结论汇总

本文再次从 ODE 的角度分析了优化算法,这次是从误差控制的角度给出了一种自适应学习率算法(RMSprop)的理解。至于我们更常用的 Adam,则是 RMSprop 与动量加速的结合,这里就不赘述了。

将优化问题视为一个常微分方程的求解问题,这其实就是将优化问题变成了一个动力学问题,这样可以让我们从比较物理的视角去理解优化算法(哪怕只是直观而不严密的理解),甚至可以把一些 ODE 的理论结果拿过来用,后面笔者会试图再举一些这样的例子。

PaperWeekly
PaperWeekly

推荐、解读、讨论和报道人工智能前沿论文成果的学术平台。

理论优化算法SGD自适应学习
1
相关数据
网格搜索技术

网格搜索是一项模型超参数优化技术,常用于优化三个或者更少数量的超参数,本质是一种穷举法。对于每个超参数,使用者选择一个较小的有限集去探索。然后,这些超参数笛卡尔乘积得到若干组超参数。网格搜索使用每组超参数训练模型,挑选验证集误差最小的超参数作为最好的超参数。

迭代 技术

模型的权重在训练期间的一次更新。迭代包含计算参数在单个批量数据上的梯度损失。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

收敛技术

在数学,计算机科学和逻辑学中,收敛指的是不同的变换序列在有限的时间内达到一个结论(变换终止),并且得出的结论是独立于达到它的路径(他们是融合的)。 通俗来说,收敛通常是指在训练期间达到的一种状态,即经过一定次数的迭代之后,训练损失和验证损失在每次迭代中的变化都非常小或根本没有变化。也就是说,如果采用当前数据进行额外的训练将无法改进模型,模型即达到收敛状态。在深度学习中,损失值有时会在最终下降之前的多次迭代中保持不变或几乎保持不变,暂时形成收敛的假象。

学习率技术

在使用不同优化器(例如随机梯度下降,Adam)神经网络相关训练中,学习速率作为一个超参数控制了权重更新的幅度,以及训练的速度和精度。学习速率太大容易导致目标(代价)函数波动较大从而难以找到最优,而弱学习速率设置太小,则会导致收敛过慢耗时太长

自适应学习技术

自适应学习也称为适应性教学(Adaptive Learning),是一种以计算机作为交互式教学手段的教学方法,根据每个学习者的特别需求,以协调人力资源和调解资源的分配。计算机根据学生的学习需求(如根据学生对问题、任务和经验的反馈)调整教育材料的表达方式。自适应学习技术已经涵盖了来自各个研究领域,包括计算机科学,教育,心理学和脑科学等等。

超参数技术

在机器学习中,超参数是在学习过程开始之前设置其值的参数。 相反,其他参数的值是通过训练得出的。 不同的模型训练算法需要不同的超参数,一些简单的算法(如普通最小二乘回归)不需要。 给定这些超参数,训练算法从数据中学习参数。相同种类的机器学习模型可能需要不同的超参数来适应不同的数据模式,并且必须对其进行调整以便模型能够最优地解决机器学习问题。 在实际应用中一般需要对超参数进行优化,以找到一个超参数元组(tuple),由这些超参数元组形成一个最优化模型,该模型可以将在给定的独立数据上预定义的损失函数最小化。

梯度下降技术

梯度下降是用于查找函数最小值的一阶迭代优化算法。 要使用梯度下降找到函数的局部最小值,可以采用与当前点的函数梯度(或近似梯度)的负值成比例的步骤。 如果采取的步骤与梯度的正值成比例,则接近该函数的局部最大值,被称为梯度上升。

动量技术

优化器的一种,是模拟物理里动量的概念,其在相关方向可以加速SGD,抑制振荡,从而加快收敛

推荐文章
暂无评论
暂无评论~