Nesterov’s Accelerated Gradient Descent
一般的梯度下降算法的收敛速率为
o(1/t)
,
t
表示迭代的次数。但是人们已经证明了随着迭代次数
1.简介:
加速梯度算法(AGD)是梯度算法(GD)的一个改进的版本。Nesterov 在1983年首次提出。人们已经证明AGD算法是所有基于梯度算法(或者说一阶)算法中最好的方法。然而原始的AGD算法仅能处理光滑的凸优化问题。最新的进展是,将AGD扩展到了更广泛类型的凸优化问题:
其中 f(x) 是平滑的凸函数, g(x) 是闭凸函数。同样可以获得相似的收敛速率。
2.算法
AGD算法可以概括为算法1:,其中有两种方式确定步长
γ
首先,类似于梯度下降算法,为了确保收敛率,我们可以设置
γ
为一个足够小的数,特别的,
γ≤(||▽2f(x)||−1)∀x
。其次,我们可以使用直线搜索,自适应地确定步长,满足:
其中:
proxγg(⋅)(⋅) 表示近端操作(近似操作)。即:
通常给定
γ
的情况下,我们先求解:
v=yk−γ▽f(yk)
,然后再求解
proxγg(⋅)(v)
.
注意:序列
{tk}
满足下面的三个属性:
- {tk} 是正的,并且递增
- tk+1≥tk+12
- fract0−1t1=0 并且 limt→∞tk−1tk+1=1
3.收敛率:
AGD 是最优的基于梯度的方法。因为它提供了最优的收敛率。假定满足下面的Lipschitz 条件。
假设1. 假定平滑的凸函数
f(x)
拥有一个Lipschitz梯度。也就是说存在常数L,满足:
在这个假设下,如果步长选择的足够小,或者通过直线搜索确定,那么我们有下面的收敛率:
另外一种解释方法:
首先定义下面的序列:
注意: γs≤0 ,。现在算法通过下面的等式简单的定义,初始点 x1=y1 是任意的。
换句话说:
Nesterov加速梯度下降法执行简单的梯度下降步骤,从
xs
到
ys+1
。然后通过先前的点
y
给定的方向上,轻微的滑动,进一步的远离
参考文献:
- https://blogs.princeton.edu/imabandit/2013/04/01/acceleratedgradientdescent/
[ORF523: Nesterov’s Accelerated Gradient Descent] - CSC 576: Accelerated Gradient Descent Algorithm
- Gradient methods for minimizing composite objective function [Nesterov2007]