一阶算法的发展历史
面对凸优化问题有各种各样的算法,本文探讨一阶算法的历史逻辑.
目标是极小化一个凸(强凸)函数:
\[\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)
\]
浙公网安备 33010602011771号