近端梯度下降(proximal gredient descent)
(27条消息) *端梯度法(Proximal Gradient Descent)_zbwgycm的博客-CSDN博客_*端梯度法
【凸优化笔记4】-*端梯度下降(Proximal gradient descent) - 知乎 (zhihu.com)
在凸优化问题中,对于可微分的目标函数,我们可以通过梯度下降法(gradient descent)迭代求解最优解,而对于不可微分的目标函数,通过引入次梯度(subgradient)也可以迭代求解最优解。
然而比起梯度下降法,次梯度法的速度比较缓慢。为此,针对于一些整体不可微分但却可以分解的目标函数来说,我们可以使用一种更快的算法——*端梯度法。
一、*端算子proximal operator
对于一个带变量约束的优化任务:
函数 \(f\) 在点 \(v\) 处的*端算子可以表示为:
这个公式的意义可以解释为:在约束集 \(C\) 上找到一点 \(x\) 使得函数 \(f(x)\) 的值比较小的同时又距离 \(v\) 比较*。
remark:这个在一定程度上可以实现类似梯度下降类似的功能
二、*端梯度下降 proximal gredient descent
假设无约束优化问题为:
其中 \(g(w)\) 凸、可微,$h(w) $凸、不可微。
实际问题:给定 \(\boldsymbol { X } \in \mathbb { R } ^ { m \times n } , \boldsymbol { y } \in \mathbb { R } ^ { m }\),若拟合线性回归表达式为 \(\boldsymbol { y } = \boldsymbol { X } \boldsymbol { w }\) ,其中变量 \(\boldsymbol { w } \in \mathbb { R } ^ { n }\) 表示系数向量。优化的目标函数可以写成如下形式:
\[f ( \boldsymbol { w } ) = \underbrace { \frac { 1 } { 2 } \| \boldsymbol { y } - \boldsymbol { X } \boldsymbol { w } \| _ { 2 } ^ { 2 } } _ { g ( \boldsymbol { w } ) } + \underbrace { \lambda \| \boldsymbol { w } \| _ { 1 } } _ { h ( \boldsymbol { w } ) } \]其中,\(\| \cdot \| _ { 1 }\) 表示 \(l_1\) 范数;\(\| \cdot \| _ { 2 }\) 表示 \(l_2\) 范数;正则项中的 \(l_1\) 会导致变量 \(w\) 是稀疏的。在这个目标函数中,正则项中 \(l_1\) 范数便是一个不可微的凸函数。
变量 \(w\) 的迭代递推公式为:
公式第三行中的 \(\frac { t } { 2 } \left\| \nabla g \left( \boldsymbol { w } ^ { k - 1 } \right) \right\| _ { 2 } ^ { 2 }\) 和第四行的 \(g \left( \boldsymbol { w } ^ { k - 1 } \right)\) 均与决策变量 \(z\) 无关,不会影响到最后\(z\) 的值。
在实际问题中,\(g ( \boldsymbol { w } ) = \frac { 1 } { 2 } \| \boldsymbol { y } - \boldsymbol { X } \boldsymbol { w } \| _ { 2 } ^ { 2 }\) ,可得:\(\nabla g ( \boldsymbol { w } ) = - \boldsymbol { X } ^ { \top } ( \boldsymbol { y } - \boldsymbol { X } \boldsymbol { w } )\) ,带入上式可得到使用*端梯度下降法的变量 \(w\) 的*端梯度更新公式:
\[\boldsymbol { w } ^ { k } = \operatorname { prox } _ { t h ( \cdot ) } \left( \boldsymbol { w } ^ { k - 1 } + t \boldsymbol { X } ^ { \top } \boldsymbol { y } - t \boldsymbol { X } ^ { \top } \boldsymbol { X } \boldsymbol { w } ^ { k - 1 }\right) \]
remark: 对于很多 \(h\) 函数,其*端映射\(\operatorname { prox } _ {t,h}\)有解析解,例如当 \(h\) 函数是一范数,其*端映射可以使用软阈值法来计算:

浙公网安备 33010602011771号