本文介绍某些优化算法可以表示为对应常微分方程的离散形式。最后谈谈个人关于如何利用这一关系进行算法设计的经验。(封面图为网络下载,如有版权问题,请图片原作者及时联系。)
本文分享一下我们对常微分方程(Ordinary Differential Equation,简称ODE)与优化算法的关系的一些理解。概括地说,就是某些优化算法可以表示成对应常微分方程的离散形式。这里,我们不做常微分方程的解的存在性讨论,而只是给出示意性的描述。
我们首先用梯度下降和Nesterov加速算法来举例说明常微分方程与优化算法的关系。最后分享一下我们对如何利用这一关系指导算法设计的经验。
梯度下降是用得最多的优化算法之一。让我们回顾一下这个算法。假设函数是一个凸函数,我们想找到的最小值点,亦即,我们想求解下列问题:
我们知道在点的梯度为在处的值增加最快的方向。因此,为在处减少最快的方向。为求解,梯度下降法从一个任意的给定点开始,沿着的方向走到点,再沿着的方向前进到点,接着用相似的方式前进,直到某个停止条件满足为止。停止条件可以是到达了指定的最大行驶步数,或者是前进过程中两个相邻的点和(分别表示前进次与次到达的点)之间的距离非常的接近(表示在处沿着的方向行进,不再能减少的值,亦即,我们到了的最小值附近)。
下面,我们写出梯度下降的迭代公式。记为前进次到达的点,那么我们有
其中,为沿方向行进的步长。接下来,我们推导所对应的常微分方程。我们将变形,得到
观察,我们可知为下列常微分方程的有限差分下的显式欧拉离散:
这一节,我们介绍算法的加速算法。一般地,算法具有一阶收敛性。牛顿法可以达到二阶的收敛性(可以理解为比算法更快)。因此理论上牛顿法更快速。但牛顿法需要求解函数的二阶导数,在高维度以及不可以求二次导数的情况下,会显得不太适用。
一般地,用的一阶导数,我们能得到一阶收敛性,用的二阶导数,可以得到二阶收敛性,想要得到更高阶收敛性,我们需要更高阶导数的信息。
Nesterov提出了加速的办法,使得我们可以只用函数的梯度的情况下,达到高阶的收敛速度。具体地,Nesterov算法设置起点,,并使用下列公式生成迭代序列:
其中为选取的步长。Nesterov证明了当的梯度是—Lipschitz连续且时,Nesterov算法具有二阶收敛性。
下面,我们来推导算法所对应的ODE。下面的推导来自于论文:A Differential Equation for Modeling Nesterov's Accelerated Gradient Method: Theory and Insights[1]。由公式,我们可以得到
我们假设序列是由函数离散取值得到的,并且有关系,即为函数在点的近似值。因此,使用泰勒公式,我们有
类似地,我们有
以及
因此,我们从中得到
整理,我们得到
我们让趋近于,得到
等式即为算法对应的常微分方程。
我们需要注意是,算法的ODE形式与离散形式并不完全等价,这是因为对ODE进行离散后,离散算法较ODE有了误差。这些误差累积导致最后离散的算法不收敛。因此,我们需要根据每个ODE的具体形式,设计适合的离散算法。
在很多时候,我们初始想出来的优化算法并不收敛,编程实现的时候总不能得到满意的结果,这个时候,找到算法的ODE形式,再用其他方式重新离散ODE,能让我们得到更多的备选算法方案。例如,论文A Variational Perspective on Accelerated Methods[2]中,针对类似的ODE用不同的方法离散,能得到不同的加速算法。
[1]
A Differential Equation for Modeling Nesterov's Accelerated Gradient Method: https://jmlr.org/papers/volume17/15-084/15-084.pdf
[2]
A Variational Perspective on Accelerated Methods: https://arxiv.org/abs/1603.04245