次梯度方法
次梯度方法
次梯度方法(subgradient method)是传统的梯度下降方法的拓展,用来处理不可导的凸函数。它的优势是比传统方法处理问题范围大,劣势是算法收敛速度慢。但是,由于它对不可导函数有很好的处理方法,所以学习它还是很有必要的。
次梯度(subgradient)
1.定义
所谓次梯度,定义是这样的:
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. 扩展
对于一个凸优化问题,
对偶问题为
那么,由全局扰动不等式,我们有
其中,假设Slater条件成立,且在\(x=\hat x,y=\hat y\)处满足强对偶性。
从上式可以看出,\(-(\lambda^ * ,v^ * )\in \partial f(\hat x,\hat y)\)
也就是说\((\lambda^ * ,v^ * )^T\)是\((\hat x,\hat y)\)处的一个支持超平面的法线。
次梯度方法
首先,我们想到的方法是推广一下梯度下降法。
其中,\(g^{(k)} \in \partial f(x^{(k)})\)
然而,\(-g^{(k)}\)可能不再是下降方向。所以常用的方式是一直保留最小的函数值,直到结果收敛。
注:步长选择和收敛性分析在这里不再赘述。(回头有精力再写)
应用(duality+subgradient method)
用法1
对于凸优化问题
对偶问题为
其中,\(g(\lambda)=\inf \limits_x L(x,\lambda)=f_0(x^ * (\lambda))+\sum \limits_{i=1}^{m} \lambda_i f_i(x^ * (\lambda))\)
假设Slater条件成立,那么我们可以通过解决对偶问题求得原问题的解。
那么,使用次梯度方法时,需要使得
也就是,
用法2
对比原来的$ \nabla L(x,\lambda ^ * ) = 0 $
这里经常用的是 $0 \in \nabla L(x,\lambda ^ * ) $