次梯度方法

次梯度方法

次梯度方法(subgradient method)是传统的梯度下降方法的拓展,用来处理不可导的凸函数。它的优势是比传统方法处理问题范围大,劣势是算法收敛速度慢。但是,由于它对不可导函数有很好的处理方法,所以学习它还是很有必要的。

次梯度(subgradient

1.定义

所谓次梯度,定义是这样的:

\[\partial f= \{ [g|f(x)\ge f(x_0)+g^T(x-x_0),\forall x \in domf,f:R^n \to R ] \} \]

ps.花括号不知道为什么打不出来,,用中括号代替吧。

用图片表示,即为

也就是,在\(x_0\)处所有的支撑超平面的超平面的法向量\(g^T\)的转置\(g\)构成的集合。即\(g \in \partial f\)

一维次梯度称为次导数,通过求函数在点的每一分量的次导数可以求出函数在该点的次梯度。

可以证明,在点\(x_0\)的次导数的集合是一个非空闭区间\([a,b]\),其中a和b是单侧极限,\(a = \lim \limits_{x \to x_0^-} {{f(x) - f(x_0)} \over {x - x_0}},b = \lim \limits_{x \to x_0^+} {{f(x) - f(x_0)} \over {x - x_0}}\) ,它们一定存在,且满足\(a≤b\)。所有次导数的集合\([a,b]\)称为函数\(f\)\(x_0\)的次导数。

举例:\(y=|x|\)\(x=0\)的次梯度为\([-1,1]\)

注: 如果\(f\)可导,那么它的次梯度等于它的梯度。如果不可导,在最优点处,\(0 \in \partial f\)

2. 性质

  • 数乘不变性。\(\forall \alpha \ge 0,\partial (\alpha f)(x)=\alpha \partial f(x)\)
  • 加法不变性。\(f=f_1+\ldots+f_m,\partial f(x)=\partial f_1(x)+\ldots+\partial f_m(x)\)
  • 仿射特性。如果\(f\)是凸函数,那么\(\partial f(Ax+b)=A^T \partial f(Ax+b)\)

3. 扩展

对于一个凸优化问题,

\[\min f_0(z),s.t. f_i(z) \le x,Ax=y \]

对偶问题为

\[\max g(\lambda)-x^T\lambda-y^T v \]

那么,由全局扰动不等式,我们有

\[f(x,y) \ge f(\hat x,\hat y)-{\lambda^ * }^T(x-\hat x)-{v^ * }^T(y-\hat y) \]

其中,假设Slater条件成立,且在\(x=\hat x,y=\hat y\)处满足强对偶性。

从上式可以看出,\(-(\lambda^ * ,v^ * )\in \partial f(\hat x,\hat y)\)

也就是说\((\lambda^ * ,v^ * )^T\)\((\hat x,\hat y)\)处的一个支持超平面的法线。

次梯度方法

首先,我们想到的方法是推广一下梯度下降法。

\[x^{(k+1)}=x^{(k)}-\alpha_k g^{(k)} \]

其中,\(g^{(k)} \in \partial f(x^{(k)})\)

然而,\(-g^{(k)}\)可能不再是下降方向。所以常用的方式是一直保留最小的函数值,直到结果收敛。

\[f_{best}^{(k)} = \min \{ ( f_{best}^{(k)},f({x^{(k)}}) )\} \]

注:步长选择和收敛性分析在这里不再赘述。(回头有精力再写)

应用(duality+subgradient method)

用法1

对于凸优化问题

\[\min f_0(z),s.t. f_i(z) \le x \]

对偶问题为

\[\max g(\lambda),s.t. \lambda \ge 0 \]

其中,\(g(\lambda)=\inf \limits_x L(x,\lambda)=f_0(x^ * (\lambda))+\sum \limits_{i=1}^{m} \lambda_i f_i(x^ * (\lambda))\)
假设Slater条件成立,那么我们可以通过解决对偶问题求得原问题的解。

那么,使用次梯度方法时,需要使得

\[\lambda^{(k+1)}=(\lambda^{(k)}-\alpha_k h),h \in \partial (-g)(\lambda^{(k)}) \]

也就是,

\[h=-(f_1(x^ * (\lambda)),\ldots,f_m(x^ * (\lambda))) \in \partial (-g)(\lambda^{(k)}) \]

用法2

对比原来的$ \nabla L(x,\lambda ^ * ) = 0 $
这里经常用的是 $0 \in \nabla L(x,\lambda ^ * ) $

posted @ 2015-09-10 11:12  connorzx  阅读(21159)  评论(5编辑  收藏  举报