一阶算法的发展历史

面对凸优化问题有各种各样的算法,本文探讨一阶算法的历史逻辑.

目标是极小化一个凸(强凸)函数:

\[\min\limits_{x} f(x) \]

对每个点用到的信息为自变量,函数值,一阶梯度信息, 设迭代点为指标为\(x_1\cdots x_k.\)

\[x_k, f(x_k), \nabla f(x_k). \]

标准梯度下降算法为:

\[x_{k+1}=x_k-\eta\nabla f(x_k). \]

若函数为凸函数, 收敛速率为 \(O(\frac{1}{k}).\)
若函数为强凸, 收敛速率为 \(O((1-\frac{\mu}{L})^k).\) \(\mu\)为强凸参数, \(L\) 为Lipschitz常数.

1964, polyark 需要二阶光滑的假设

\[x_{k+1}=x_k-\eta\nabla f(x_k)+\beta(x_k-x_{k-1}) \]

在函数为 \(C^2\) 情况下, 凸:\(O(\frac{1}{k^2})\). 强凸: \(O((1-\sqrt{\frac{\mu}{L}})^k)\).

1984, Nesterov 不需要二阶光滑的假设

\[y_k=x_k+\beta(x_k-x_{k-1}) \]

\[x_{k+1}=y_k-\frac{1}{L}\nabla f(y_k) \]

Nesterov 等价形式

\[y_k=\theta_kz_k+(1-\theta_k)x_k \]

\[z_{k+1}=z_k-\frac{1}{\theta_kL}\nabla f(y_k) \]

\[x_{k+1}=\theta_kz_{k+1}+(1-\theta_k)x_k \]

另一种等价形式

\[y_k=\theta_kz_k+(1-\theta_k)x_k \]

\[z_{k+1}=\arg\min\limits_{z}\{l_{f}(z,y_k)+\frac{\theta_kL}{2}\Vert z-z_k\Vert_2^2\} \]

\[x_{k+1}=\theta_kz_{k+1}+(1-\theta_k)x_k \]

进一步,将前面所有步数的信息整合在一起

\[z_{k+1}=\arg\min\limits_{z}\{\sum_{i=1}^{k} l_{f}(z,y_i)+\frac{\theta_kL}{2}\Vert z-z_0\Vert_2^2\} \]

后续工作就是在此基础上更改参数.

beck 工作就是将目标函数分解成两部分, 一部分凸,一部分L光滑, 然后用上述线性化形式加速方法.

\[F(x)=f(x)+g(x) \]

posted @ 2024-04-22 20:45  伟宇  阅读(62)  评论(0)    收藏  举报