Nesterov加速算法

Nesterov加速算法

上一届分析了近似点梯度法的收敛速度:如果光华部分的梯度是利普西茨连续的,则目标函数的收敛速度可以达到 O 1 k O{\frac{1}{k}} Ok1,一个自然的问题是如果仅用梯度信息,我们能不能取得更快的收敛速度。Nesterov分别再1983年、1988年和2005年提出了三种改进的一阶算法,收敛速度能到达 O ( 1 k 2 ) O({1}{k^2}) O(1k2)。实际上,这三种算法都可以应用到近似点梯度算法上。再Nesterov加速算法再但是并没有引起太多的关注。但几年来,随着数据量的增大,牛顿型方法由于其过大的计算复杂度,不便于有效地应用到实际中,Nesterov加速算法作为一种快速的一阶算法重新被挖掘出来并迅速流行起来。Beck和Teboulle在2008年给出了Nesterov在1983年提出的算法的近似点梯度法版本—FISTA。本节将对这些加速方法做一定的介绍和总结,主要讨论凸函数的加速算法。

一、FISTA算法
考虑如下如何问题
min ⁡ x ∈ R n ψ ( x ) = f ( x ) + h ( x ) (1) \min_{x\in\mathcal{R^n}}\psi(x)=f(x)+h(x) \tag{1} xRnminψ(x)=f(x)+h(x)(1)
其中 f ( x ) f(x) f(x)是连续可微的凸函数且梯度是利普西茨连续的, h ( x ) h(x) h(x)是适当的闭凸函数。优化问题(1)由光华部分 f ( x ) f(x) f(x)和非光滑部分 h ( x ) h(x) h(x)组成,可以使用近似点梯度法来求解这一问题,但其收敛速度只有 O 1 k O{\frac{1}{k}} Ok1。很自然地,我们希望能够加速近似点梯度算法,这就是本文要介绍的FISTA算法。
FISTA算法由两步组成:第一步沿着前两步的计算方向计算一个新点;第二部在该心点处做一步近似点梯度迭代,即
y k = x k − 1 + k − 2 k − 1 ( x k − 1 − x k − 2 ) , x k = p r o x t k h ( y k − t k ∇ f ( y k ) ) . \begin{aligned} y^k &=x^{k-1}+\frac{k-2}{k-1}(x^{k-1}-x^{k-2}), \\ x^k &=prox_{t_kh}(y^k-t_k\nabla f(y^k)). \end{aligned} ykxk=xk1+k1k2(xk1xk2),=proxtkh(yktkf(yk)).
图1给出FISTA算法的迭代序列图。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YMGgHRWz-1641886213293)(fig1_fista.PNG)]
可以看到这一做法对每一步迭代的计算几乎没有影响,而带来的效果是显著的。如果选取 t k t_k tk为固定的步长并小于或等于 1 L \frac{1}{L} L1,其收敛速度达到了 O 1 k 2 O\frac{1}{k^2} Ok21,完整的FISTA算法如下:


算法1:FISTA算法

  1. 输入: x 0 = x − 1 ∈ R n , k ← 1 x^0=x^{-1}\in\mathcal{R^n},k\leftarrow 1 x0=x1Rn,k1
  2. while 未达到收敛准则 do
  3. 计算 y k = x k − 1 + k − 2 k − 1 ( x k − 1 − x k − 2 ) y^k =x^{k-1}+\frac{k-2}{k-1}(x^{k-1}-x^{k-2}) yk=xk1+k1k2(xk1xk2)
  4. 选取 t k = t ∈ ( 0 , 1 L ] t_k=t\in(0,\frac{1}{L}] tk=t(0,L1],计算 x k = p r o x t k h ( y k − t k ∇ f ( y k ) ) x^k =prox_{t_kh}(y^k-t_k\nabla f(y^k)) xk=proxtkh(yktkf(yk))
  5. k ← k + 1 k\leftarrow k+1 kk+1
  6. end while

为了对算法做更好的推广,可以给出FISTA算法的一个等价变形,只是把原来算法钟的第一步拆分成亮部迭代,相应的算法见算法2。当 γ k = 2 k + 1 \gamma_k=\frac{2}{k+1} γk=k+12时,并且取固定步长时,两个算法时等价的。但当 γ k \gamma_k γk采用别的取法时,算法2将给出另一个版本的加速算法。
对于该算法框架,我们需要确定如何选取步长 t k t_k tk γ k \gamma_k γk,这决定了算法的收敛速度。


算法2:FISTA算法的等价变形

  1. 输入: v 0 = x 0 ∈ R n , k ← 1 v_0=x_0\in\mathcal{R^n},k\leftarrow 1 v0=x0Rn,k1.
  2. while 未达到收敛准则 do
  3. \quad 计算 y k = ( 1 − γ k ) x k − 1 + γ k v k − 1 y^k=(1-\gamma_k)x^{k-1}+\gamma_kv^{k-1} yk=(1γk)xk1+γkvk1.
  4. \quad 选取 t k t_k tk,计算 x k = p r o x t k h ( y k − t k ∇ f ( y k ) ) x^k=prox_{t_kh}(y^k-t_k\nabla f(y^k)) xk=proxtkh(yktkf(yk)).
  5. \quad 计算 v k = x k − 1 + 1 γ k ( x k − x k − 1 ) v^k=x^{k-1}+\frac{1}{\gamma_k}(x^k-x^{k-1}) vk=xk1+γk1(xkxk1</
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值