Loading

近端梯度下降(proximal gredient descent)

(27条消息) *端梯度法(Proximal Gradient Descent)_zbwgycm的博客-CSDN博客_*端梯度法

【凸优化笔记4】-*端梯度下降(Proximal gradient descent) - 知乎 (zhihu.com)

机器学* | *端梯度下降法 (proximal gradient descent) - 知乎 (zhihu.com)

非线性规划:Proximal Gradient - 知乎 (zhihu.com)


在凸优化问题中,对于可微分的目标函数,我们可以通过梯度下降法(gradient descent)迭代求解最优解,而对于不可微分的目标函数,通过引入次梯度(subgradient)也可以迭代求解最优解。

然而比起梯度下降法,次梯度法的速度比较缓慢。为此,针对于一些整体不可微分但却可以分解的目标函数来说,我们可以使用一种更快的算法——*端梯度法。

一、*端算子proximal operator

对于一个带变量约束的优化任务:

\[\operatorname { minimize } f ( x ), \quad \text { subject to } x \in C \]

函数 \(f\) 在点 \(v\) 处的*端算子可以表示为:

\[\operatorname { prox } _ { f ( v ) } = \underset { x \in C } { \operatorname { argmin } } \left( f ( x ) + \frac { 1 } { 2 } \| x - v \| _ { 2 } ^ { 2 } \right) \]

这个公式的意义可以解释为:在约束集 \(C\) 上找到一点 \(x\) 使得函数 \(f(x)\) 的值比较小的同时又距离 \(v\) 比较*。

remark:这个在一定程度上可以实现类似梯度下降类似的功能


二、*端梯度下降 proximal gredient descent

假设无约束优化问题为:

\[f ( w ) = g ( w ) + h ( w ) \]

其中 \(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\) 的迭代递推公式为:

\[\begin{aligned} \boldsymbol { w } ^ { k } &= \arg \min _ { z }\{ g ( z )+h ( z ) \}\\&\approx \arg \min _ { z } \{g ( w^{k-1} ) + \nabla g ( w^{k-1} ) ^ { T } ( z - w^{k-1} ) + \frac { 1 } { 2 t } \| z - w^{k-1} \| _ { 2 } ^ { 2 } + h ( z )\}\\&=\arg \min _ { z } \{\frac { t } { 2 } \left\| \nabla g \left( \boldsymbol { w } ^ { k - 1 } \right) \right\| _ { 2 } ^ { 2 } + \nabla g \left( \boldsymbol { w } ^ { k - 1 } \right) ^ { \top } \left( \boldsymbol { z } - \boldsymbol { w } ^ { k - 1 } \right) + \frac { 1 } { 2 t } \left\| \boldsymbol { z } - \boldsymbol { w } ^ { k - 1 } \right\| _ { 2 } ^ { 2 }+h ( z ) \}\\ & = \arg \min _ { \boldsymbol { z } } \{ \frac { 1 } { 2 t } \left\| \boldsymbol { z } - \left( \boldsymbol { w } ^ { k - 1 } - t \nabla g \left( \boldsymbol { w } ^ { k - 1 } \right) \right) \right\| _ { 2 } ^ { 2 } +h ( \boldsymbol { z } ) \} \\& = \operatorname { prox } _ { t h ( \cdot ) } \left( \boldsymbol { w } ^ { k - 1 } - t \nabla g \left( \boldsymbol { w } ^ { k - 1 } \right) \right) \end{aligned} \]


公式第三行中的 \(\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\) 函数是一范数,其*端映射可以使用软阈值法来计算:





posted @ 2020-12-28 09:38  xiaqiu  阅读(1416)  评论(0)    收藏  举报