次梯度(subgradient)方法

写在前面

本篇博客来自其他几篇博客的整合(详见参考文献),主要是提取了一些利于自己理解的小点。

一、为什么需要次梯度方法

次梯度方法是传统梯度下降算法的拓展,传统梯度下降算法是为了解决可导凸函数的问题,而次梯度方法主要是为了解决不可导梯度的问题。但是其算法收敛速度会相对较慢。

二、次梯度的定义

次梯度是指对于函数 f f 上的点 x x 满足一下条件的 gRn g ∈ R n :

f(y)f(x)+gT(yx) f ( y ) ≥ f ( x ) + g T ( y − x )

即,
(1)若 f f 是一个凸函数,若 f f 在x处可导,则由一阶泰勒展开式:
f(y)f(x)+f(x)T(yx) f ( y ) ≥ f ( x ) + ▽ f ( x ) T ( y − x )

(2)若 f f 在x处不可导,则仍可得到一个下届:
f(y)f(x)+gT(yx) f ( y ) ≥ f ( x ) + g T ( y − x )

这个 g g 就是 f f 的子梯度。
注意:虽然次梯度是针对不可导函数而设计的,但是可导函数也仍然可以使用,因此 f f 是非凸函数也是可以的。

三、次梯度的计算方法

在点 x0 x 0 的次导数的集合是一个非空闭区间[a, b],其中a和b是单侧极限
a=limx>x0f(x)f(x0)xx0 a = lim x − > x 0 − f ( x ) − f ( x 0 ) x − x 0 a=limx>x+0f(x)f(x0)xx0 a = lim x − > x 0 + f ( x ) − f ( x 0 ) x − x 0
a和b一定存在,且a≤b。所有次导数的集合[a, b]称为函数 f f x0 x 0 的次导数。

四、次梯度的举例

f(x)=|x| f ( x ) = | x | x=0 x = 0 的次梯度为[-1, 1]。
a=limx>0|x|0x=xx=1 a = lim x − > 0 − | x | − 0 x = − x x = − 1
b=limx>0+|x|0x=xx=1 b = lim x − > 0 + | x | − 0 x = x x = 1
因此, f(x)=|x| f ( x ) = | x | x=0 x = 0 的次梯度为[-1, 1]。

五、次梯度的性质

  • 数乘不变性。 α0,(αf)(x)=αf(x) ∀ α ≥ 0 , ∂ ( α f ) ( x ) = α ∂ f ( x )
  • 加法不变性。 f=f1+...+fm,f(x)=f1(x)+...+fm(x) f = f 1 + . . . + f m , ∂ f ( x ) = ∂ f 1 ( x ) + . . . + ∂ f m ( x )
  • 放射特性。如果 f f 是凸函数,那么 f(Ax+b)=ATf(Ax+b) ∂ f ( A x + b ) = A T ∂ f ( A x + b )

六、次梯度算法

次梯度算法与梯度下降类似,仅仅是使用次梯度代替梯度,即:
x(k)=x(k1)tkg(k1),k=1,2,3... x ( k ) = x ( k − 1 ) − t k ⋅ g ( k − 1 ) , k = 1 , 2 , 3...
其中, g(k1)f(x(k1)) g ( k − 1 ) ∈ ∂ f ( x ( k − 1 ) ) f(x) f ( x ) 在x处的次梯度。
与梯度下降算法不同的地方在于,次梯度算法并不是下降算法,每次对于参数的更新并不能保证代价函数是呈单调递减的趋势。

参考文献:
https://www.52ml.net/20973.html
https://blog.csdn.net/lansatiankongxxc/article/details/46386341
https://www.cnblogs.com/connorzx/p/4797194.html

你可能感兴趣的:(Machine,Learning)