什么是次梯度?并不是很懂,就抽了一些时间,查了资料(很多资料来自百度百科),总结整理了这个博文,记录下自己的学习过程。
0、前言
次梯度方法(subgradient method) 是传统的梯度下降方法的拓展,用来处理不可导的凸函数。它的优势是比传统方法处理问题范围大,劣势是算法收敛速度慢。但是,由于它对不可导函数有很好的处理方法,所以学习它还是很有必要的。
1、导数(Derivative)
导数(Derivative) ,也叫导函数值。又名微商,是微积分中的重要基础概念。导数是函数的局部性质。一个函数在某一点的导数描述了这个函数在这一点附近的变化率。导数的本质是通过极限的概念对函数进行局部的线性逼近。
对于一般的函数f ( x ) f(x) f ( x ) ,在点x 0 x_0 x 0 处的导数为:
f ′ ( x ) = lim Δ x → 0 Δ y Δ x = lim Δ x → 0 f ( x 0 + Δ x ) − f ( x 0 ) Δ x
f^{prime}(x)=lim _{Delta x
ightarrow 0} frac{Delta y}{Delta x}=lim _{Delta x
ightarrow 0} frac{fleft(x_{0}+Delta x
ight)-fleft(x_{0}
ight)}{Delta x}
f ′ ( x ) = Δ x → 0 lim Δ x Δ y = Δ x → 0 lim Δ x f ( x 0 + Δ x ) − f ( x 0 )
等同于
f ′ ( x ) = lim Δ x → 0 f ( x + Δ x ) − f ( x ) Δ x = lim Δ x → 0 f ( x ) − f ( x − Δ x ) Δ x
f^{prime}(x)=lim _{Delta x
ightarrow 0} frac{f(x+Delta x)-f(x)}{Delta x}=lim _{Delta x
ightarrow 0} frac{f(x)-f(x-Delta x)}{Delta x}
f ′ ( x ) = Δ x → 0 lim Δ x f ( x + Δ x ) − f ( x ) = Δ x → 0 lim Δ x f ( x ) − f ( x − Δ x )
如果不使用增量,f ( x ) f(x) f ( x ) 在x 0 x_0 x 0 处的导数 也可以定义为:当定义域内的变量x x x 趋近于x 0 x_0 x 0 时,
f ′ ( x ) = f ( x ) − f ( x 0 ) x − x 0
f^{prime}(x)=frac{f(x)-fleft(x_{0}
ight)}{x-x_{0}}
f ′ ( x ) = x − x 0 f ( x ) − f ( x 0 )
2、次导数(subderivative)
次导数 、次切线和次微分的概念出现在凸分析,也就是凸函数的研究中。
设f : I → R f:I→R f : I → R 是一个实变量凸函数,定义在实数轴上的开区间内。这种函数不一定是处处可导的,例如最经典的例子就是f ( x ) = ∣ x ∣ f(x)=|x| f ( x ) = ∣ x ∣ ,在x = 0 x=0 x = 0 处不可导。但是,从下图的可以看出,对于定义域内的任何x 0 x_0 x 0 ,我们总可以作出一条直线,它通过点( x 0 , f ( x 0 ) ) (x_0,f(x_0)) ( x 0 , f ( x 0 ) ) ,并且要么接触f的图像,要么在它的下方。直线的斜率称为函数的次导数,次导数的集合称为函数f f f 在x 0 x_0 x 0 处的次微分。
3、次微分(subdifferential)
凸函数f : I → R f:I→R f : I → R 在点x 0 x_0 x 0 的次导数,是实数c c c 使得:
f ( x ) − f ( x 0 ) ≥ c ( x − x 0 )
f(x)-fleft(x_{0}
ight) geq cleft(x-x_{0}
ight)
f ( x ) − f ( x 0 ) ≥ c ( x − x 0 )
对于所有I I I 内的x x x 。我们可以证明,在点x 0 x_0 x 0 的次导数的集合是一个非空闭区间 [a, b],其中a a a 和b b b 是单侧极限
a = lim x → x 0 − f ( x ) − f ( x 0 ) x − x 0
a=lim _{x
ightarrow x_{0}^{-}} frac{f(x)-fleft(x_{0}
ight)}{x-x_{0}}
a = x → x 0 − lim x − x 0 f ( x ) − f ( x 0 )
b = lim x → x 0 + f ( x ) − f ( x 0 ) x − x 0
b=lim _{x
ightarrow x_{0}^{+}} frac{f(x)-fleft(x_{0}
ight)}{x-x_{0}}
b = x → x 0 + lim x − x 0 f ( x ) − f ( x 0 )
它们一定存在,且满足a ≤ b a≤b a ≤ b 。所有次导数的集合 [a,b] 称为函数f f f 在x 0 x_0 x 0 的次微分。
例子:考虑凸函数f ( x ) = ∣ x ∣ f(x)=|x| f ( x ) = ∣ x ∣ 。在原点的次微分是区间 [−1, 1]。x 0 < 0 x_0<0 x 0 < 0 时,次微分是单元素集合 {-1},而x 0 > 0 x_0>0 x 0 > 0 ,则是单元素集合{1}。
4、次梯度(subgradient)
在优化问题中,我们可以对目标函数为凸函数的优化问题采用梯度下降法求解,但是在实际情况中,目标函数并不一定光滑、或者处处可微,这时就需要用到次梯度下降算法。
次梯度与梯度的概念类似,凸函数的F i r s t − o r d e r c h a r a c t e r i z a t i o n First-order characterization F i r s t − o r d e r c h a r a c t e r i z a t i o n 是指如果函数f f f 可微,那么当且仅当d o m ( f ) dom(f) d o m ( f ) 为凸集,且对于∀ x , y ∈ d o m ( f ) ∀x,y∈dom(f) ∀ x , y ∈ d o m ( f ) ,使得f ( y ) ≥ f ( x ) + ∇ f ( x ) T ( y − x ) f(y)≥f(x)+∇f(x)^T(y−x) f ( y ) ≥ f ( x ) + ∇ f ( x ) T ( y − x ) ,则函数f f f 为凸函数。这里所说的次梯度是指在函数f f f 上的点x x x 满足以下条件的g ∈ R n g∈R^n g ∈ R n :
f ( y ) ≥ f ( x ) + g T ( y − x )
f(y)≥f(x)+g^T(y−x)
f ( y ) ≥ f ( x ) + g T ( y − x )
其中,函数f f f 不一定要是凸函数,非凸函数也可以,即对于凸函数或者非凸函数而言,满足上述条件的g g g 均为函数在该点的次梯度。但是,凸函数总是存在次梯度(可以利用epigraph和支撑平面理论证明),而非凸函数则不一定存在次梯度,即使f f f 可微。该定义说明,用次梯度对原函数做出的一阶展开估计总是比真实值要小。
很明显,凸函数的次梯度一定存在,如果函数f f f 在点x x x 处可微,那么g = ∇ f ( x ) g=∇f(x) g = ∇ f ( x ) ,为函数在该点的梯度,且唯一;如果不可微,则次梯度不一定唯一 。但是对于非凸函数,次梯度则不一定存在,也不一定唯一。
例如,凸函数∥ x ∥ p ∥x∥_p ∥ x ∥ p 范数为凸函数,但不满足处处可微的条件,因此,函数的次梯度不一定唯一,如下图:
左图为∥ x ∥ 2 ∥x∥_2 ∥ x ∥ 2 ,函数在x ≠ 0 x≠0 x � = 0 时,次梯度唯一,且g = x / ∥ x ∥ 2 g=x/∥x∥_2 g = x / ∥ x ∥ 2 ;当x = 0 x=0 x = 0 时,次梯度为z : ∥ z ∥ 2 ≤ 1 {z:∥z∥_2≤1} z : ∥ z ∥ 2 ≤ 1 中的任意一个元素;
右图为∥ x ∥ 1 ∥x∥_1 ∥ x ∥ 1 ,函数在x ≠ 0 x≠0 x � = 0 时,次梯度唯一,且g = s i g n ( x ) g=sign(x) g = s i g n ( x ) ;当x = 0 x=0 x = 0 时,次梯度为 [−1,1] 中的任意一个元素;
同样,绝对值函数f ( x ) = ∣ x ∣ f(x)=∣x∣ f ( x ) = ∣ x ∣ 和最大值函数f ( x ) = m a x { f 1 ( x ) , f 2 ( x ) } f(x)=max{f_1(x),f_2(x)} f ( x ) = m a x { f 1 ( x ) , f 2 ( x ) } 在不可微点处次梯度也不一定唯一,如下图:
左函数为绝对值函数f ( x ) = ∣ x ∣ f(x)=∣x∣ f ( x ) = ∣ x ∣ ,其在满足x = 0 x=0 x = 0 的点处,次梯度为任意一条直线,在向量∇ f 1 ( x ) ∇f_1(x) ∇ f 1 ( x ) 和∇ f 2 ( x ) ∇f_2(x) ∇ f 2 ( x ) 之间。;
右函数为最大值函数f ( x ) = m a x { f 1 ( x ) , f 2 ( x ) } f(x)=max{f_1(x),f_2(x)} f ( x ) = m a x { f 1 ( x ) , f 2 ( x ) } ,其在满足f 1 ( x ) = f 2 ( x ) f_1(x)=f_2(x) f 1 ( x ) = f 2 ( x ) 的点处,次梯度为任意一条直线,在向量∇ f 1 ( x ) ∇f_1(x) ∇ f 1 ( x ) 和∇ f 2 ( x ) ∇f_2(x) ∇ f 2 ( x ) 之间。
5、次梯度的性质
Scalingf:∂ ( a f ) = a ⋅ ∂ f ∂(af)=a⋅∂f ∂ ( a f ) = a ⋅ ∂ f ;
Addition:∂ ( f 1 + f 2 ) = ∂ f 1 + ∂ f 2 ; ∂(f_1+f_2)=∂f_1+∂f_2; ∂ ( f 1 + f 2 ) = ∂ f 1 + ∂ f 2 ;
Affine composition:如 果 g ( x ) = f ( A x + b ) , 那 么 ∂ g ( x ) = A T ∂ f ( A x + b ) ; 如果g(x)=f(Ax+b),那么∂g(x)=A^T∂f(Ax+b); 如 果 g ( x ) = f ( A x + b ) , 那 么 ∂ g ( x ) = A T ∂ f ( A x + b ) ;
Finite pointwise maximum:如 果 f ( x ) = max i = 1 , … , m f i ( x ) , 那 么 ∂ f ( x ) = conv ( ⋃ i : f i ( x ) = f ( x ) ∂ f i ( x ) ) ; 如果f(x)=max _{i=1, ldots, m} f_{i}(x),
那么partial f(x)=operatorname{conv}left(igcup_{i : f_{i}(x)=f(x)} partial f_{i}(x)
ight); 如 果 f ( x ) = max i = 1 , … , m f i ( x ) , 那 么 ∂ f ( x ) = c o n v ( ⋃ i : f i ( x ) = f ( x ) ∂ f i ( x ) ) ;
6、灵魂一问:为什么要计算次梯度?
对于光滑的凸函数而言,我们可以直接采用梯度下降算法求解函数的极值,但是当函数不处处光滑,处处可微的时候,梯度下降就不适合应用了。因此,我们需要计算函数的次梯度。对于次梯度而言,其没有要求函数是否光滑,是否是凸函数,限定条件很少,所以适用范围更广。
次梯度具有以下优化条件:对于任意函数f f f (无论是凸还是非凸),函数在点x x x 处取得最值等价于:
f ( x ∗ ) = min x f ( x ) ⇔ 0 ∈ ∂ f ( x ∗ )
fleft(x^{*}
ight)=min _{x} f(x) Leftrightarrow 0 in partial fleft(x^{*}
ight)
f ( x ∗ ) = x min f ( x ) ⇔ 0 ∈ ∂ f ( x ∗ )
即,当且仅当0 0 0 属于函数f f f 在点x ∗ x^∗ x ∗ 处次梯度集合的元素时,x ∗ x^∗ x ∗ 为最优解。
证明
:当次梯度g = 0 g=0 g = 0 时,对于所有y ∈ d o m ( f ) y∈dom(f) y ∈ d o m ( f ) ,存在f ( y ) ≥ f ( x ∗ ) + 0 T ( y − x ∗ ) = f ( x ∗ ) f(y)≥f(x^∗)+0^T(y−x^∗)=f(x^∗) f ( y ) ≥ f ( x ∗ ) + 0 T ( y − x ∗ ) = f ( x ∗ ) ,所以,x ∗ x^∗ x ∗ 为最优解,即证。
7、次梯度算法(Subgradient method)
次梯度算法与梯度下降算法类似,仅仅用次梯度代替梯度,记f : R n → R f : mathbb{R}^{n}
ightarrow mathbb{R} f : R n → R 为定义在R n mathbb{R}^{n} R n 上的凸函数,即:
x ( k + 1 ) = x ( k ) − α k g ( k ) , k = 1 , 2 , 3 , …
x^{(k+1)}=x^{(k)}-alpha_{k} g^{(k)},k=1,2,3,…
x ( k + 1 ) = x ( k ) − α k g ( k ) , k = 1 , 2 , 3 , …
其中g ( k ) g^{(k)} g ( k ) 表示函数f f f 在x ( k ) x^{(k)} x ( k ) 的次梯度。如果f f f 可微,它的次梯度就是梯度向量∇ f
abla f ∇ f 。有时,− g ( k ) -g^{(k)} − g ( k ) 不是函数f f f 在x ( k ) x^{(k)} x ( k ) 的下降方向。因此采用一系列可能的f b e s t f_{b e s t} f b e s t 来追踪目标函数的极小值点,即
f b e s t ( k ) = min { f b e s t ( k − 1 ) , f ( x ( k ) ) }
f_{mathrm{best}}^{(k)}=min left{f_{mathrm{best}}^{(k-1)}, fleft(x^{(k)}
ight)
ight}
f b e s t ( k ) = min { f b e s t ( k − 1 ) , f ( x ( k ) ) }
另一点与梯度下降算法不同的是:次梯度算法没有明确的步长选择方法,类似Exact line search和Backtracking line search的方法,只有步长选择准则,具体如下:
8、次梯度算法实例
A. Regularized Logistic Regression
对于逻辑回归的代价函数可记为:
f ( β ) = ∑ i = 1 n ( − y i x i T β + log ( 1 + exp ( x i T β ) ) )
f(eta)=sum_{i=1}^{n}left(-y_{i} x_{i}^{T} eta+log left(1+exp left(x_{i}^{T} eta
ight)
ight)
ight)
f ( β ) = i = 1 ∑ n ( − y i x i T β + log ( 1 + exp ( x i T β ) ) )
明显,上式是光滑且凸的,而正则化则是指优化目标函数为:
min β ∈ R p f ( β ) + λ ⋅ P ( β )
min _{eta in mathbb{R}^{p}} f(eta)+lambda cdot P(eta)
β ∈ R p min f ( β ) + λ ⋅ P ( β )
如果P ( β ) = ∥ β ∥ 2 2 P(β)=∥β∥^2_2 P ( β ) = ∥ β ∥ 2 2 ,则成为岭回归(ridge problem),如果P ( β ) = ∥ β ∥ 1 P(β)=∥β∥_1 P ( β ) = ∥ β ∥ 1 则称为Lasso。对于岭回归,我们仍然可以采用梯度下降算法求解目标函数,因为函数处处可导光滑,而Lasso问题则无法用梯度下降算法求解,因为函数不是处处光滑,具体可参考下面的图,所以,对于Lasso问题需要选用次梯度算法求解。
下图是对于同样数据集下分别对逻辑回归选用岭惩罚和Lasso惩罚求解最优解的实验结果图( n = 1000 , p = 20 ) (n=1000,p=20) ( n = 1 0 0 0 , p = 2 0 ) :
B. 随机次梯度算法
随机次梯度算法(Stochastic Subgradient Method)与次梯度算法(Subgradient Method)相比,每次更新次梯度是根据某一个样本计算获得,而不是通过所有样本更新次梯度。
所以,根据梯度更新的方式不同,次梯度算法和梯度下降算法一般被称为“batch method”。从计算量来讲,m m m 次随机更新近似等于一次batch更新,二者差别在于∑ i = 1 m [ ∇ f i ( x ( k + i − 1 ) ) − ∇ f i ( x ( k ) ) ] sum_{i=1}^{m}left[
abla f_{i}left(x^{(k+i-1)}
ight)-
abla f_{i}left(x^{(k)}
ight)
ight] ∑ i = 1 m [ ∇ f i ( x ( k + i − 1 ) ) − ∇ f i ( x ( k ) ) ] ,当x x x 变化不大时,差别可以近似等于0。
对于随机更新次梯度,一般随机的方式有两种:
Cyclic rule:选择i k = 1 , 2 , … , m , 1 , 2 , … , m , … i_k=1,2,…,m,1,2,…,m,… i k = 1 , 2 , … , m , 1 , 2 , … , m , … ;
Randomized rule:均匀随机从1 , … , m {1,…,m} 1 , … , m 选取一点作为i k i_k i k 。
与所有优化算法一样,随机次梯度算法能否收敛?
答案是肯定的,这里就不在做证明,有兴趣的同学可以参考boyd教授的论文,这里仅给出收敛结果,如下:
lim k → ∞ f ( x b e s t ( k ) ) ≤ f ∗ + 5 m 2 G 2 t 2
lim _{k
ightarrow infty} fleft(x_{b e s t}^{(k)}
ight) leq f^{*}+frac{5 m^{2} G^{2} t}{2}
k → ∞ lim f ( x b e s t ( k ) ) ≤ f ∗ + 2 5 m 2 G 2 t
对于Cyclic rule,随机次梯度算法的收敛速度为O ( m 3 G 2 / ϵ 2 ) O(m^3G^2/ϵ^2) O ( m 3 G 2 / ϵ 2 ) ;对于Randomized rule,随机次梯度算法的收敛速度为O ( m 2 G 2 / ϵ 2 ) O(m^2G^2/ϵ^2) O ( m 2 G 2 / ϵ 2 ) 。
下图给出梯度下降和随机梯度下降算法在同一数据下迭代结果:
如果想要更多的资源,欢迎关注 @我是管小亮,文字强迫症MAX~
回复【福利】即可获取我为你准备的大礼,包括C++,编程四大件,NLP,深度学习等等的资料。
想看更多文(段)章(子),欢迎关注微信公众号「程序员管小亮」~
参考文章