2014年8月10日星期日

Subgradient Based Optimization Method

@(Numerical Optimization)[Subgradient]

SubgradientBasedOptimizationMethod

对于凸优化问题来说,目标函数可以分为可导或者不可导两种情况。对于目标函数可导的情况,在优化的过程中可以使用Gradients信息,构建局部逼近,然后完成目标函数的优化。但是对于不可导情况,导数无法获得,需要使用其他的方法来完成目标函数的优化。
Subgradient方法就是多种方法种的一个。下面首先介绍Subgradient的定义,然后给出对于不同情况的计算方法。在了解这些之后,我们将看到在Subgradient的定义下,如何修正原有的优化条件。之后会介绍如何使用Subgradient方法来处理无约束和有约束问题,即如何确定步长和收敛判断。最后会给出使用Subgradient的其他方法。

Subgradient

Subgradient可以看做是对Gradient的一个扩展,在可导的凸函数上有下面的不等式:

f(y)f(x)+f(x)T(yx)(yDomain)

从这个不等式可以知道,凸函数在任意一点都可以获得整个函数的下界。类似于这个公式,可以定义如下的不等式:
f(y)f(x)+μT(yx)(yDomain)

所有满足这个不等式的μ都称为函数f(x)Subgradient。从这个定义可以看出,Subgradient是对Gradient的扩展,目的仍然是要找到整个凸函数的下界估计。
类似的还有另外一个不等式:
f(y)f(x)+gT(yx)(yDomain)

满足这个定义的向量g称为Supergradient

SubgradientCalculusandCalculation

Subdifferential的定义

在给出Subgradient的定义后可以看到,满足这个条件的向量μ可能有很多,因此给出如下的定义:

f(x)={μ|f(y)f(x)+μT(yx)yDomain}

这个定义给出所有满足Subgradient定义的向量μ的集合,称为Subdifferential,用符号f(x)表示这个集合。
对于可导的凸函数而言,Subdifferential中只包括一个元素,那就是Gradient;另外如果某个函数的Sbudifferential只包含一个元素,首先这个函数可导,其他这个元素必然是函数的Gradient。这个就是可导函数的Subdifferential
但是对于不可导的凸函数而言,Subdifferential中必然不为空。

Subgradient计算样例

|x|为例,给出Subgradient的计算方法。函数|x|在0处不可导,对于大于0的情况,其Subgradient为1,对于小于0的情况,其Subgradient为-1,在0这点,其Subgradient可以是任意一个介于-1和+1之间的值。
因为对于不可导的函数来说,一般是在某个点上不可导,而且在这个点的左右都会是可导的,在函数点可导的情况下,其Subgradient就是导数本身,因此在这个不可导点的Subgradient任意的介于相邻导数的向量

Weak and Strong Subgradient Calculus

对于不可导凸函数的某些点来说,其Subdifferential中可能包括多个元素,对于所有这些Subgradient是否要全部计算,可以分出WeakSubgradientCalculusStrongSubgradientCalculus
对于WeakSubgradientCalculus来说,只需要计算出Subdifferential种的任意一个元素即可。对于StrongSubgradientCalculus,则需要给出所有的Subgradient
很明显StrongSubgradientCalculus有这很高的复杂度,因为需要给出所有可能的Subgradient。但是在实际中并不需要这么做,使用StrongSubgradientCalculus只是用于最优条件的证明。在实际中,仅需要使用WeakSubgradientCalculus即可。

Subgradient的计算方法

Subgradient的定义仅给出了定义,实际中需要优化的目标函数可能有各种形式,下面给出对应的计算方法,这里给出的都是Subdifferential的计算方法。

基本规则

Scaling : (αf)=αf
Addition : (f1+f2)=f1+f2
Affine Transformaton:if g(x)=f(Ax+b), then g(x)=ATf(Ax+b)
这些都是比较简单且实用的计算规则

Finite Pointwise Maximum

函数具有如下的形式:

f=maxi=1,2,...,mfi(x)

这里函数f是在同一个点上m个函数的最大值。
Subgradient的计算方式如下:
首先计算出当前点f的值fmax,然后可以找到所有函数值等于fmax的函数,那么fSubdifferential等于所有这些函数Subgradient的Convex Hull。对应的数学定义如下:
f(x)=Co{fi(x)|fi(x)=f(x)}

这里给出的是StrongSubgradientCalculus
对于WeakSubgradientCalculus 来说,只要选择任意一个取得最大值的函数fi(x),计算fi(x) 对应的一个 Subgradient就可以了。

Pointwise Supremum

函数定义如下:

f(x)=supαΘf(x,α)

对于任意一个α来说,函数f(x,α)都是凸函数。
那么f(x)是所有取的上确界函数的Subgradient的Convex Hull。表示如下:
f(x)=Co{f(x,β)|f(x,β)=f(x)}
这里给出的是StrongSubgradientCalculus
WeakSubgradientCalculus的计算类似于Finite Pointwise Maximum。

Expection

如果要优化的函数如下:
f(x)=Ef(x,w),其中f(x,w)x的凸函数,w 是一个随机变量。对应的Subdifferential计算方法是,对每一个w,计算出函数f(x,w)Subgradient,然后给出期望就可以 f(x)=Eg(w),可以看出使用的是WeakSubgradientCalculus

基于Subgradient的优化条件

无约束的最优化条件

类似于导数的情况,对于Subgradient来说,满足如下条件即可:
0f(x)
但是在实际中很难使用这个作为终止条件,因为这需要得到全部的Subgradient

KKT条件

需要优化这样的问题

argminxf0(x)

s.t.fi(x)0(i=1,2,...,m)

对应的KKT条件如下:(假设xλ分别是最优的Primal Variable和Dual Variable。
fi(x)0

λ0

0f0(x)+i=1i=mλifi(x)

λifi(x)=0(i=1,2,...,m)

可以看出这个KKT条件只是对原来的一个泛化。

如何使用Subgradient

对于一个可导的凸函数,f(x) 方向可以减小函数值f(x),但是对于Subgradient来说,这并不成立。事实上f(x)方向可以减小当前点与最优点x的距离。

Subgradient Optimization

Subgradient优化非常的简单,使用如下的迭代公式:

xk+1=xkαkg

gf(x)

步长的选择

对于Subgradient方法来说步长很重要,可以使用固定大小的步长αk=β,固定长度的步长αk=λ/g(xk)22,但是这两种步长不能取到最优值,仅仅会收敛到最优值附近的一个区间。
使用满足下面要求的步长,可以收敛到最优点:

i=1α2i<i=1αi=(1)

limk>αk=0i=1=(2)

上面这两个步长,只要满足其中1个条件,即可收敛到最优点。

Polak最优步长

当我们已经知道函数的最优值以后,可以使用如下的步长:

αk=f(xk)f(x)g(xk)22

最优步长

但是在一般情况下函数最优值是不知道的,在这种情况下使用如下的步长:

αk=f(xk)fkbest+ρkg(xk)22

s.t.i=1ρ2i<i=1ρi=

终止条件

对于Subgradient方法来说,很难选择合适的终止条件。

Subgradient加速方法

如果在每一步中仅仅使用当前点的Subgradient,那么收敛的速度是很慢的。在一系列的加速算法中,大多使用了之前的Subgradient信息。

Heavy Ball Method

使用如下的迭代公式:

xk+1=xkαkgk+βk(xkxk1)

CFM Method

sk=gk+βksk1βk=max(0,γksTk1gk/sk122)

一般来说这里的γk=1.5

有约束的最优化

在使用Subgradient方法时,如果是无约束的最优化,那么选择步长产生方法之后可以不停的进行迭代直到收敛,但是对于有约束的最优化来说需要使用其他的方法。

Project Subgradient Method

这个方法解决如下形式的问题;

minimizexf(x)

s.t.xC

在这里要求C必须是一个凸集。然后使用如下的迭代公式:
xk+1=(xαkgk)

这里gkSubgradient表示在集合C上的投影。使用这样的方法来处理又出书的最优化问题,在选择步长(2)的时候可以收敛到最优点。
基本上来说这里的集合C都是使用线性等式来描述的。

Project Subgradient for Dual

在进行凸优化时,适时的讨论Dual可以很好的解决问题。
对于如下的Primal:

f0(x)

s.t.fi(x)0(i=1,2,...,m)

对应的Dual问题如下:
maximizeg(λ)

s.t.λ0

相比于优化原始的问题,我们可以直接优化Dual问题。方法非常简单,使用如下的迭代公式即可:
λk+1=(λkαkh)+

h(g(λk))

在这里要求λ必须大于0,因此需要将所有小于0的项全部替换成0.
对于Dual函数的Subgradient,可以看出
g(λ)=argminxf0(x)+i=1mλifi(x)

假如x(λk)优化上面的函数,那么Subgradient就应该如下:
g(λ)=(f1(x),f2(x),...,fm(x))

在这个方法中,Primal变量不一定一直满足约束条件,Dual变量肯定一直满足约束条件,但是方法收敛的时候必定都满足约束条件。

有约束优化

基本上来说Project Subgradient Method只能用来处理约束条件是线性方程的情况,对于其他的问题则不能解决。

f0(x)

s.t.fi(x)0(i=1,2,...,m)

对上面这个问题使用Subgradient方法的主要困难在于计算Subgradient,计算方法如下:
1. 如果全部约束都能满足,那么Subgradient是目标函数的Subgradient
2. 如果有约束不能满足,那么Subgradient是第一个不能满足的约束函数的Subgradient。

Primal Dual subgradient Method

在这个方法中,同时优化Primal和Dual变量,直到问题收敛。
需要优化的等式约束问题如下:

argminxf(x)

Ax=b

对这个问题我们优化如下的问题:
argminxf(x)+(ρ/2)Axb22

Ax=b

其中ρ大于0.对Primal和Dual变量求Subgradient,然后同步更新即可。
如果有不等式约束,我们将如下的问题
argminxf(x)

fi(x)0

转化成:
argminxf(x)+(ρ/2)F(x)22

F(x)0

这就是Subgradient相关的优化方法。

Written with StackEdit.

没有评论:

发表评论