次梯度
梯度是比较熟悉的一个概念了,经常用在优化问题上,例如最为常用的随机梯度下降(SGD),但是有时候会遇到一些不可导的情况,而次梯度就是为了解决这些问题而出现的一个概念。
首先看一下维基百科上给出的解释:次梯度法是求解凸函数最优化(凸优化)问题的一种迭代法。次梯度法能够用于不可微的目标函数。当目标函数可微时,对于无约束问题次梯度法与梯度下降法具有同样的搜索方向。
要解释次梯度,先来看一下次导数:定义凸函数
f
:
I
→
R
f : I \rightarrow R
f:I→R,函数在点
x
0
x_0
x0 处的次导数,是实数
c
c
c 使得:
f
(
x
)
−
f
(
x
0
)
≥
c
(
x
−
x
0
)
f(x)-f\left(x_{0}\right) \geq c\left(x-x_{0}\right)
f(x)−f(x0)≥c(x−x0)
可以看到是一个不等式,因此
c
c
c 很可能不止一个,事实上,在点
x
0
x_0
x0 的次导数是一个非空闭区间[a, b],其中a和b是单侧极限:
a
=
lim
x
→
x
0
−
f
(
x
)
−
f
(
x
0
)
x
−
x
0
b
=
lim
x
→
x
0
+
f
(
x
)
−
f
(
x
0
)
x
−
x
0
\begin{aligned} &a=\lim _{x \rightarrow x_{0}^{-}} \frac{f(x)-f\left(x_{0}\right)}{x-x_{0}}\\ &b=\lim _{x \rightarrow x_{0}^{+}} \frac{f(x)-f\left(x_{0}\right)}{x-x_{0}} \end{aligned}
a=x→x0−limx−x0f(x)−f(x0)b=x→x0+limx−x0f(x)−f(x0)
a
a
a 和
b
b
b 都是一定存在的,所有次导数的集合
[
a
,
b
]
[a, b]
[a,b] 称为函数
f
f
f 在点
x
0
x_0
x0 的次微分。直观的说,是连接原点和
x
0
x_0
x0中的所有直线中,仅仅在
x
0
x_0
x0 处与函数曲线相交,其余都在曲线下面的那些直线的斜率的集合,如下红线所示:
![](https://i-blog.csdnimg.cn/blog_migrate/9ee5694e47eea4553c6e1a972b8b0570.png)
举个例子,对于函数 ∣ x ∣ |x| ∣x∣ 来说,在 x = 0 x=0 x=0 处次梯度是 [ − 1 , 1 ] [-1,1] [−1,1],而在 x < 0 x<0 x<0 时是-1,在 x > 0 x>0 x>0 时是1。次梯度的性质如下:
- 数乘不变性: ∀ α ≥ 0 , ∂ ( α f ) ( x ) = α ∂ f ( x ) \forall \alpha \geq 0, \partial(\alpha f)(x)=\alpha \partial f(x) ∀α≥0,∂(αf)(x)=α∂f(x)
- 加法不变性: ∂ ( f 1 + f 2 ) = ∂ f 1 + ∂ f 2 \partial\left(f_{1}+f_{2}\right)=\partial f_{1}+\partial f_{2} ∂(f1+f2)=∂f1+∂f2
- 仿射性: ∂ f ( A x + b ) = A T ∂ f ( A x + b ) \partial f(A x+b)=A^{T} \partial f(A x+b) ∂f(Ax+b)=AT∂f(Ax+b)
次梯度算法
可以参考次梯度算法,介绍的很详细。有几个关键的地方记录一下:
-
次梯度算法并不是下降算法,因此参数更新并不能保证得到更优的结果,所以通常选择多次更新中最好的结果
-
因为上一条的原因,次梯度算法没有明确的步长选择方法,可以固定步长,也可以选择逐步减小同时满足以下条件的步长: ∑ k = 1 ∞ t k 2 < ∞ , ∑ k = 1 ∞ t k = ∞ \sum_{k=1}^{\infty} t_{k}^{2}<\infty, \sum_{k=1}^{\infty} t_{k}=\infty ∑k=1∞tk2<∞,∑k=1∞tk=∞ ,Note that 需要预先设定好变化,而不是自适应的。
-
次梯度可以保证收敛,利用莱布尼兹条件证明,上面的链接里有具体过程,这里仅仅给出结果:
如果f为凸函数,且满足Lipschitz continuous with G,如果固定步长为t,那么次梯度算法满足:
f ( x b e s t ( k ) ) − f ∗ ≤ ∥ x ( 1 ) − x ∗ ∥ 2 2 + t 2 k G 2 2 t k = R 2 2 t k + G 2 t 2 \begin{aligned} &f\left(x_{b e s t}^{(k)}\right)-f^{*} \leq \frac{\left\|x^{(1)}-x^{*}\right\|_{2}^{2}+t^{2} k G^{2}}{2 t k}\\ &=\frac{R^{2}}{2 t k}+\frac{G^{2} t}{2} \end{aligned} f(xbest(k))−f∗≤2tk∥∥x(1)−x∗∥∥22+t2kG2=2tkR2+2G2tk趋近于无穷大时,第一项可以省略。
-
次梯度的收敛速度为 O ( 1 ϵ 2 ) O(\frac{1}{\epsilon^2}) O(ϵ21),跟梯度下降算法收敛速度 O ( 1 ϵ ) O(\frac{1}{\epsilon}) O(ϵ1)相比,要慢许多。
参考文献
- https://blog.csdn.net/quiet_girl/article/details/79648124
- http://www.pianshen.com/article/3002681077/
- https://en.wikipedia.org/wiki/Subgradient_method
- https://blog.csdn.net/qq_32742009/article/details/81704139