【凸优化笔记5】-次梯度方法(Subgradient method)

【凸优化笔记5】-次梯度方法(Subgradient method)

目录

1.问题引入

2.次梯度的定义

3.次梯度优化条件(Subgradient optimality condition)

4.次梯度迭代算法

5.次梯度方法求解lasso问题


1. 问题引入

对于可导的凸函数,我们通常使用常规的梯度下降法处理,但当目标函数不可导(在某些点上导数不存在)时,我们就没法使用常规的梯度下降法处理。于是引入次梯度(Subgradient)用于解决此类目标函数并不总是处处可导的问题。

次梯度方法的优势是比传统方法能够处理的问题范围更大,不足之处就是算法收敛速度慢。

2. 次梯度的定义

2.1 回顾

对于凸函数 f ,如果它可导,那么对 \forall x,y\in domf ,都有:

f(y)\geq f(x)+\nabla f(x)^T(y-x)\\

此即凸函数的一阶条件,简单讲就是对于凸函数,其切线总是在函数的下方。具体可参考【凸优化笔记2】-第1.2节

2.2 次梯度定义

类比凸函数的一阶条件,给定函数 f ,对 \forall y ,如果满足:

f(y)\geq f(x)+g^T(y-x)\\

则称 g 是函数 f 在点 x 处的次梯度(Subgradient)

无论是凸函数还是非凸函数(非凸函数包括凹函数和非凸也非凹的函数),对所有满足上述条件的 g 都称为 fx 处的次梯度,因此次梯度不一定唯一,也可能不存在。
从不等式条件中也可以看出次梯度是在函数凸的区域上加以定义的。

fx 处所有次梯度构成的集合称为 fx 处的次微分(Subdifferential),记作 \partial f(x)

凸函数总有次梯度,非凸函数即使可微也不一定有次梯度。凸函数的次微分总是非空,凹函数的次微分是空集。

对于凸函数,我们总能找到一个 g ,使得上述对次梯度定义的条件成立。例如,如果凸函数在 x 处可导,取 g = \nabla f(x) 即可;如果凸函数在 x 处不可导,取 g 为在该点处的左导数或者右导数都可以,过该点以 g 为斜率的“切线”总在函数的下方。因而凸函数总有次梯度,次微分总是非空。
对于非凸函数,在凸的区域有可能找到这样的“切线”,而在凹的区域总是找不到这样的“切线”,使其位于函数的下方,因而非凸函数的次梯度不一定存在。在凹的区域更不可能存在次梯度也就不存在次微分。
对于优化问题,我们通常只考虑目标函数是凸函数的情况。

2.3 次梯度计算

设函数 f 在点 x_0 处不一定可导,以一维情况为例,按高等数学中我们对导数的定义可以求出:

fx_0 处的左导数:

a=\lim_{x\rightarrow x_0^-}\frac{f(x)-f(x_0)}{x-x_0}\\

fx_0 处的右导数:

b=\lim_{x\rightarrow x_0^+}\frac{f(x)-f(x_0)}{x-x_0}\\

凸函数 f 的次微分等于闭区间 [a\ ,\ b][a\ ,\ b] 中任何一个取值都是次梯度。

如果凸函数 f 在点 x 处是可导的,即 a=b ,次微分中只有一个元素,此时次梯度就是梯度,即 g 就等于 \nabla f(x)
如果凸函数 f 在点 x 处是不可导的,即 a\ne b ,此时次梯度是次微分中的任意一个取值,它是不唯一的。
例如 f(x)=|x| ,则 g=\begin{cases}sgn(x) & x\ne0 \\ any \in [-1,1] & x=0\end{cases} ,其中 sgn(x) 为符号函数, any 表示任意一个元素。

3. 次梯度优化条件(Subgradient optimality condition)

x^* 是函数 f (无论是否是凸的)的最优解,当且仅当次微分中包含 0 。即:

f(x^*)=\min_x f(x)\Leftrightarrow0\in \partial f(x^*)\\

证明:我们可以把 g=0 代入到 2.2 节对次梯度定义的式子中,即,对于 \forall y ,都有f(y)\geq f(x^*)+0(y-x^*)\geq f(x^*)

4. 次梯度迭代算法

类似于梯度下降算法,只是将梯度更换成了次梯度,初始化 x^{(0)} ,重复:

x^{(k)}=x^{(k-1)}-t_kg^{(k-1)}\ ,\ k=1,2,3...\\

其中 t_k 为步长,g^{(k-1)}\in \partial f(x^{(k-1)}) ,即从次微分中随机选择一个次梯度作为梯度。

从这个算法中可以看出次梯度算法并不总是下降的,这也就解释了为什么将其称作次梯度算法而非次梯度下降算法。

为了使更新的参数呈递减的趋势,对第 k 次的参数更新同步使用如下策略:

f(x_{best}^{(k)})=\min_{i=0,...,k}f(x^{(i)})\\

即在第 k 次更新参数时,如果使用次梯度算法计算得到的 \tilde{x}^{(k)} 能够使 f 更小,则 x^{(k)}=\tilde{x}^{(k)} ,否则 x^{(k)}=x^{(k-1)}

次梯度算法使用如下步长选择准则:

i. 固定的步长。 t_k = t\ ,\ k=1,2,...,k ;

ii. 衰减的步长。t_k 满足如下条件:

\sum_{k=1}^{\infty}{t_k^2}<\infty,\ \sum_{k=1}^{\infty}{t_k}=\infty\\

例如,取 t_k=\frac{1}{k}\ ,\ k=1,2,...,\infty ,则 \sum_{k=1}^{\infty}{t_k^2}=\sum_{k=1}^{\infty}{\frac{1}{k^2}} (为 p 级数且 p>1)收敛且 \sum_{k=1}^{\infty}{t_k}=\sum_{k=1}^{\infty}{\frac{1}{k}} (为调和级数,即 p=1)发散,因而是满足条件的。【关于 p 级数的敛散性可自行参考高等数学中级数敛散性相关内容】。

衰减的步长能够保证步长在逐步减小趋近于 0 的同时变化的幅度不会太大,次梯度算法不像梯度下降算法那样可以自适应地计算当前次的步长,其步长是预先指定的。

只要选择的步长合适,算法总会收敛,只是算法收敛速度比较慢。

5. 次梯度算法求解lasso问题

lasso问题:

\min_\beta \ \frac{1}{2}||y-X\beta||_2^2 + \lambda||\beta||_1\\

由次梯度优化条件, 0 是这个目标函数在最优解上次微分的一个元素,即: \begin{aligned} &{\ \ \ \ \ \ } 0 \in \partial\frac{1}{2}||y-X\beta||_2^2 +\partial \lambda||\beta||_1\\ &\Rightarrow 0 \in -X^T(y-X\beta) +\partial \lambda||\beta||_1\\ &\Rightarrow X^T(y-X\beta) = \lambda v\ ,\ v=\partial ||\beta||_1\\ \end{aligned}\ \ \ \ \ \ (1)\\

根据次梯度的计算方式,得到 v 的第 i 个分量满足:

v_i= \begin{cases} 1 \ & \beta_i>0\\ -1 \ & \beta_i<0\\ [-1, 1] \ & \beta_i=0\\ \end{cases}\ \ \ \ \ \ (2)\\

为简单起见,我们假设 X=II 为单位矩阵,则由 (1) 式有:

\beta_i=y_i-\lambda v_i\ \ \ \ \ \ (3)\\

综合 (2) 和 (3),有以下推论:

i. 当 \beta_i > 0 时, v_i = 1\beta_i=y_i-\lambday_i>\lambda ;

ii. 当 \beta_i < 0 时, v_i = -1\beta_i=y_i+\lambday_i<-\lambda ;

iii. 当 \beta_i=0 时, |v_i|\leq 1|y_i|=\lambda |v_i|\leq\lambda ;

即当 X=I 时最优解 \beta^*=S_\lambda(y) ,其每一个分量满足:

\beta^*_i=[S_\lambda(y)]_i=\begin{cases}y_i-\lambda & y_i>\lambda \\ 0 & \ |y_i| \leq\lambda\\ y_i+\lambda & \ y_i<-\lambda\end{cases}\\

S_\lambda(x) 称为软阈值(Soft-thresholding )公式, \lambda 被称为阈值,可以参考【凸优化笔记4】-4.3软阈值算子


参考文献:

CMU凸优化课件-次梯度

【机器学习】次梯度(subgradient)方法

编辑于 2020-01-19 19:32