写在前面
本篇博客来自其他几篇博客的整合(详见参考文献),主要是提取了一些利于自己理解的小点。
一、为什么需要次梯度方法
次梯度方法是传统梯度下降算法的拓展,传统梯度下降算法是为了解决可导凸函数的问题,而次梯度方法主要是为了解决不可导梯度的问题。但是其算法收敛速度会相对较慢。
二、次梯度的定义
次梯度是指对于函数
f
f
上的点满足一下条件的
g∈Rn
g
∈
R
n
:
即,
(1)若 f f 是一个凸函数,若在x处可导,则由一阶泰勒展开式:
(2)若 f f 在x处不可导,则仍可得到一个下届:
这个 g g 就是的子梯度。
注意:虽然次梯度是针对不可导函数而设计的,但是可导函数也仍然可以使用,因此 f f 是非凸函数也是可以的。
三、次梯度的计算方法
在点的次导数的集合是一个非空闭区间[a, b],其中a和b是单侧极限
a=limx−>x−0f(x)−f(x0)x−x0
a
=
lim
x
−
>
x
0
−
f
(
x
)
−
f
(
x
0
)
x
−
x
0
,
a=limx−>x+0f(x)−f(x0)x−x0
a
=
lim
x
−
>
x
0
+
f
(
x
)
−
f
(
x
0
)
x
−
x
0
a和b一定存在,且a≤b。所有次导数的集合[a, b]称为函数
f
f
在的次导数。
四、次梯度的举例
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 是凸函数,那么
六、次梯度算法
次梯度算法与梯度下降类似,仅仅是使用次梯度代替梯度,即:
x(k)=x(k−1)−tk⋅g(k−1),k=1,2,3...
x
(
k
)
=
x
(
k
−
1
)
−
t
k
⋅
g
(
k
−
1
)
,
k
=
1
,
2
,
3...
其中,
g(k−1)∈∂f(x(k−1))
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