咨询下各位,在机器学习相关内容中,每次看到带约束优化问题,总是看到先用拉格朗日函数变成无约束问题,然后转成求拉格朗日对偶问题,然后有凸函数假设,满足KKT条件时原问题最优解和对偶问题最优解等价。
每次看到这个,总不是很理解为什么要这么做?
为什么首先转为无约束问题(这个相对好理解一点,因为容易处理)
为什么拉格朗日函数无约束问题要转变成求拉格朗日对偶问题求解?
如果一开始的约束问题f(x)不是凸函数,那怎么办?
忘各位了解的可以将这里的流程和原理可以详细解答一下,看过前面有些人解答问题将问题的前世今生都讲解一遍,很清晰。这个问题一直都让我有点混乱,希望能在各位帮助下了解更清楚
补充一个:带惩罚的优化问题是不是跟这一样是通过求对偶问题还求解的
看你的问题,我猜测你应该是在看SVM,关于SVM这东西,我认为它可以分成三个独立的成分:
1.最优分离超平面
2. kernel映射
3. 拉格朗日对偶
这三个部分中的每一个都有一套理论,最优分离超平面就不说了,这就是SVM的根基,kernel并不是SVM独有的(只是在SVM里比较出名),kernel有一套核方法,主要是为了解决映射到高维空间后引起的维数灾难问题。我们知道,SVM只靠最优分离超平面的话只能实现线性分割,而使用了kernel映射后就可以实现非线性分割了,在这个转换过程中,拉格朗日对偶起了中间桥梁的作用。拉格朗日对偶也不是SVM特有的,它属于凸优化的内容。在SVM的很多教程中都跳过了拉格朗日对偶的讲解,下面我们将进一步讨论拉格朗日对偶这个问题(并不完全讲,也只是讲个大概)
在此之前,我们要再重申一遍什么是凸函数
跟我念:凸凸凸凸凸凸凸凸凸凸凸凸凸凸
(威廉王子:我都躺这么远了还TM中枪?!)
此外,我们还需要讲清楚一些前置内容,首先:什么是优化问题?
所谓优化问题,也就是要实现
minf0(x)
s.t.fi(x)≤bi,i=1,?,m
其中f0称为目标函数,x=(x1,?,xn)称为优化向量,fi称为约束函数,bi称为约束上限或者约束边界。
也就是说,我们要再满足约束下的x中寻找一个x∗,使得f0(x∗)最小,这时候x∗称为最优解。
所谓凸优化,也就是当目标函数和约束函数都为凸函数时候的的优化问题,也就是说,对于任意的i=0,?,m,在α+β=1,α≥0,β≥0时,都有
fi(αx+βy)≤αfi(x)+βfi(y)
这也是凸函数的定义
线性规划也可以看做是凸优化,因为在线性规划里面,f0,?,fm都是线性函数,也就满足
fi(αx+βy)=αfi(x)+βfi(y)
显然符合凸优化的定义,所以凸优化可以看做是线性规划的推广。
如果从投资的角度上看,凸优化就相当于在生产需求(f1,?,fm)的约束下让生产成本(f0)最小化
如果从机器学习的角度上看,凸优化就相当于在一堆模型中,选取最符合观测现象以及先验知识的模型(f1,?,fm),使得泛化误差(f0)最小,这也体现机器学习其本质:经验风险最小化
如果一个问题是凸优化问题,那很好办,因为现在凸优化有很多技术,或许可以这么说,只要一个问题是凸优化问题,那么我们一定能解决它。但是,判断一个问题是不是凸优化,或者判断一个问题能否可以转换成凸优化问题并不是一件简单的事情。
如果一个问题不是凸的呢?遗憾的是目前还没有一种方法能很好地解决非凸问题,对于非凸问题,我们的方法一般有:
1.局部优化:在局部优化里,我们降低要求,不再寻找一个全局的最优解,只需要寻找一个能让我们接受的结果即可,比如我们常用的梯度下降就是一种局部优化策略。局部优化的优点很明显,只需要可导就行了,并不要求是凸的(想想梯度下降是不是这样:D),但是局部优化的缺点也明显,就是极度依赖于初始值的选择,初始值很大程度决定了你最后的结果,此外就是我们无法知道局部最优与全局最优究竟相差了多远。比如在深度神经网络里,采用BP策略单纯的使用梯度下降是无法训练的,因为局部最优解太多,而Hinton所谓的无监督预训练,其实就是为了让网络权值能够初始化到一个较好的点,使得BP策略能够奏效。
2. 全局优化:如果参数规模不大,或者全局最优解的意义重大(比如你要是找不到全局最优那么你女朋友就和你分手),那么使用穷举也是一种策略
3. 随机化方法:其实这个应该归属到局部优化里面,因为随机化方法也是一种局部最优。比如模拟退火、遗传等,这些方法克服了纯梯度方法的一些缺点。
然而,实际问题中有很多都是非凸的,那么我们为什么还要研究凸问题呢?
因为非凸问题往往借鉴了凸问题的一些思想,反正我不管,今天我们就是来讲凸问题的(╯‵□′)╯︵┻━┻
==================================================
下面这段可以先跳过,反正我也讲不清楚
更详细的内容请参考《Convex optimization》,一切以它的说法为准
==================================================
我们之前说过,判断一个问题是不是凸优化,或者判断一个问题能否可以转换成凸优化问题并不是一件简单的事情,但是有一种可以方便地建立凸性的方法:
如果一个问题能将其表示为一族仿射函数的逐点上确界,那么这个问题就是一个凸问题
也就是
f(x)=sup{g(x)|g仿射,且∀z,g(x)≤f(z)}
有几个陌生的名词,没关系,我们一个一个地来解释
首先是仿射
如果f是一个线性函数和一个常数的和,也就是f(x)=Ax+b的形式,其中A∈Rm×n,b∈Rm,那么f:Rn→Rm是仿射的
为了讲什么是逐点上确界,需要先讲什么是逐点最大函数,也就是
f(x)=max{f1(x),f2(x),?}
我们称f为逐点最大函数,如果fi是凸的,那么f也是凸的
接下来就是所谓的逐点上确界
若y∈A,f(x,y)关于x都是凸的,那么函数
g(x)=supy∈Af(x,y)
关于x也是凸的,这个也就是逐点上确界了
上面看不懂也没关系,反正我也解释不清楚,记住一条就行了:“凸问题”等价于“一族仿射函数的逐点上确界”
==================================================
从这里开始看
==================================================
然后就是今天的主题了,什么是拉格朗日对偶?
首先是拉格朗日原问题(强调强调强调,一会我们还会回来看这里的,这里我们将原问题记为p∗):
minf0(x)
s.t.fi(x)≤0,i=1,?,m
hi(x)=0,i=1,?,p
注意:这里我们要求fi 和hi的定义域都是非空的,此时的定义域记为D,但是这里我们并不要求原问题是凸的
拉格朗日对偶的中心思想是在目标函数中考虑上约束条件,也就是引入拉格朗日算子,得到增广目标函数,也就是拉格朗日函数
L(x,λ,μ)=f0(x)+∑i=0mλifi(x)+∑i=1pμihi(x)
也就是说,我们现在优化的对象除了x,还加上了m个λi,p个μi,这时候定义域变成了D×Rm×Rp
我们定义拉格朗日函数的对偶函数为
g(λ,μ)=infx∈DL(x,λ,μ)=infx∈Df0(x)+∑i=0mλifi(x)+∑i=1pμihi(x)
也就是说,我们定义对偶函数为拉格朗日函数的下界,那么问题来了,如果拉格朗日函数没有下界呢?没关系,这时候我们就让对偶函数为−∞即可。
由于对偶函数g(λ,μ)是关于(λ,μ)仿射函数的逐点下确界,所以
不管原问题是不是凸的,其对偶函数一定凹的
(参考前面的讨论,注意前面讨论的是凸性,但是凸性与凹性换几个地方就行了)
引入对偶,使得原问题的求解变成了讨论“求原问题的下界”。为什么呢?因为对于λ≥0,都有g(λ,μ)≤p∗,简单验证一下:
如果一个x^是可行的解,那么fi(x^)≤0,hi(x^)=0,由于λ≥0,从而
∑i=0mλifi(x)+∑i=1pμihi(x)
第一项为负数,第二项为0,所以
L(x^,λ,μ)=f0(x^)+∑i=0mλifi(x^)+∑i=1pμihi(x^)≤f0(x^)
因而
g(λ,μ)=infx∈DL(x,λ,μ)≤L(x^,λ,μ)≤f0(x^)
即每个可行点,都有g(λ,μ)≤f0(x^)
上面的公式好枯燥,给大家看一张图就明白了
在图中,实线代表的是目标函数f0,而虚线代表的是约束条件f1,彩色的点线代表λ取不同值的时候对应的拉格朗日函数L(x,λ)=f0(x)+λf1(x)(本来有十条的,但是最近撸太多手抖实在画不动了.........画5条大家也能看的懂吧....),我们可以看到,在约束条件可行(f1(x)≤0)的区间内,拉格朗日函数都是小于目标函数的。我们可以看到,在可行区间内,目标函数的最值将在x = -0.46处取得p∗=1.54
下面我们来看一看对偶函数的图像:
其中实线代表的是对偶函数,而虚线代表的是目标函数f0的最优值p∗=1.54,从图像中,我们可以发现,对偶函数确实是原问题的一个下界,此外,我们也可以发现:在原问题中,目标函数f0,约束条件f1都不是凸的,但对偶函数是凹的
为了更好地理解,我们再举一个例子,一个优化问题:
minxTx
s.t.Ax=b
这个问题是等式约束,很简单,我们用高数上面的知识就可以解决了,我们取拉格朗日函数
L(x,μ)=xTx+μT(Ax−b)
然后求导,令其为0
ΔxL(x,μ)=2x+ATμ=0
求得
x=−12ATμ
这时候目标函数最小,好,现在我们来看看如果讨论对偶会怎么样
首先对偶函数为
g(μ)=infxL(x,μ)
代入最优解x=−12ATμ
g(μ)=infxL(−12ATμ,μ)=−14μTAATμ−bTμ
我们会发现,对偶函数是二次凹函数,并且有
−14μTAATμ−bTμ≤inf{xTx|Ax=b}
拉格朗日对偶,通过引入参数λ,μ,可以让原问题得到一个与λ,μ相关的下界(这时候跟x没什么关系了)。但现在的问题就是,究竟哪个下界才是最好的?因为下界有很多个,所以应该选取哪个下界?
答案是:最大的下界是最好的,这个解我们记为d∗
从上面的图,大家也可以看到,对偶函数的最大值最接近原问题的最优解,由于对偶问题总存在这么一个等式d∗≤p∗(即使原问题不是凸的这个不等式也成立),所以,p∗−d∗也被称为最优对偶间隙
举一个对偶的例子,比如线性规划,其标准式为
minCTx
s.t.Ax=b
x≥0
我们取拉格朗日函数
L(x,λ,μ)=CTx−∑i=1nλixi+μT(Ax−b)=−bTμ+(C+ATμ−λ)Tx
则对偶函数为
g(λ,μ)=infxL(x,λ,μ)=−bTμ+infx(C+ATμ−λ)Tx
由于线性函数只有为常数的时候才有下界,所以g(λ,μ)又可以写为
g(λ,μ)=−bTμ, 如果ATμ−λ+c=0
g(λ,μ)=−∞, 其他
强烈抗议:没法进行公式堆叠啊!!!!!!!!!
上面是对偶函数,我们说过,对偶函数刻画的是一个下界,哪个下界是最好的呢?最大的是最好的,所以,对偶问题可以表述为maxg(λ,μ)
也就是
max−bTμ
s.t.ATμ−λ+c=0
λ≥0
上面这个问题还可以进一步缩写为
max−bTμ
s.t.ATμ+c≥0
这就是线性规划标准形式的对偶问题,这种表述也称之为不等式形式线性规划
好,我们我们从不等式形式线性规划出发,也就是现在我们的原问题是:
maxCTx
s.t.ATx≤b
(注:跟上边的不等式形式符号变了,但表达没变)
我们取拉格朗日函数
L(x,λ)=CTx+λT(Ax−b)=−bTλ+(ATλ+C)Tx
那么对偶函数就是
g(λ)=infxL(x,λ)=−bTλ+infx(ATλ+C)Tx
同样,由于线性函数只有恒为常数的时候才有下界,因此对偶函数可以写为
g(λ)=−bTλ, 如果ATλ+c=0
g(λ)=−∞, 其他
强烈抗议:没法进行公式堆叠啊!!!!!!!!!
还是那句话,哪个下界是最好的呢?最大的是最好的,所以maxg(λ)可以表述为
max−bTλ
s.t.ATλ+c=0
λ≥0
你看,这又回到标准型的线性规划了。
在拉格朗日对偶之后,d∗≤p∗总是成立的,这个我们也叫做弱对偶性,如果说我们能够使得d∗=p∗,那么这时候我们求解对偶问题就相当于求解原问题了,大家看前面的图,对偶问题显然不等价于原问题的。那么什么时候对偶问题等价于原问题呢(这种情况叫做强对偶)?一般情况下,如果原问题是凸的,那么这个问题具有强对偶,也就是对偶问题的最优解等于原问题的最优解(不绝对,也有例外的)。
如何判定一个问题是否具有强对偶性呢?一个判据是Slater条件,这里不讲,另一个就是大家所知到的KKT条件了。如果说一个问题,它满足KKT条件,那么这个问题就具有强对偶性,求取对偶问题就相当于求取原问题。但如果不满足KKT条件呢?那就不能这么做了。
而恰好,SVM问题里面都是满足KKT条件的,所以SVM里面求取对偶解就相当于求取原问题的解。那么我们为什么要求它的对偶呢?因为kernel,通过对偶之后得到一个向量内积的形式,也就是xTx这种形式,而这种形式是kernel所擅长处理的。如果没有对偶,就没有后面的kernel映射,SVM也实现不了非线性分割。
当然,这里有一个问题我没有讲,为什么满足KKT条件就具有强对偶性?这个问题啊,你问我