说起拉格朗日乘子法,印象中其实高中都用过,用来求条件极值。大学中,高等数学里面也曾经提到过,印象依然没有什么改变,就是用来求条件极值。研究僧,老板让看SVM,知道SVM是通过拉格朗日方法把原始问题转化对w、b和a的极大极小问题,之后又在许多论文中看到这货的身影。然而从来没有仔细想过,为什么拉格朗日乘子法可以这么吊。
直到有次听课,讲到《致命魔术》里面的一句话,Are u watching closely? You just wanna be fooled。
突然发现,对于看书及看论文过程中接触到的一些方法和公式,I just wanna be fooled。因为这样简单、不费事。然而从来没有想过去watching closely,然而这样做的后果就是...完全不能充分理解各种算法就概念,于是我觉得逼自己去watching closely and don't be fooled
于是,我觉得先从拉格朗日这货开始,见解可能是错的,但是就算是错误的道路,最起码我也已经在路上。
wiki上是这样的,假设有函数:,要求其极值(最大值/最小值),且满足条件g(x,y)=c,
c为常数。对不同的值,不难想像出
点击打开链接当时看的时候也是迷迷糊糊的,其实后来再看,这段解释已经非常的清楚了。不懂的话可以去看下这个视频点击打开链接,个人感觉讲的还是非常不错的,虽然看完还是有些不懂。主要问题还是为什么f和g的梯度平行时为极值。不过下面有一段评论我觉得写得还是蛮好的
“理解拉格朗日乘数法的关键 原来是梯度!
在作为约束条件的等值面g(x,y,z)=constant(二维的话是等值线,更高维就是类似的更高维结构)上函数 w=f(x,y,z) 的梯度的分布是不同的,当w=f(x,y,z)的梯度与g(x,y,z)=constant 等值面不垂直时,自然在所偏的方向还有更大或更小的值,只有垂直时才取到极值,而等值面上的梯度是垂直于等值面的,所以当二者的梯度线性相关时就是取极值处了。”
看完后我的总结是,这里的极值,并没有明确说是极大值或者极小值(视频里也多次强调),而当f的梯度与等值面垂直的那个瞬间,f沿曲面方向是不变的(对应上图就是曲线方向),而在其他点总是要变的更大或者变的更小,因此当f与g的梯度平行时为极值。当然,对这一概念的理解与对梯度的理解是息息相关的。唉..果然又吃了读书少的亏啊。至于,拉格朗日乘数,其实就是两梯度的线性关系。
下面继续考虑拉格朗日对偶问题
1,原始问题
题,即x的最小值,你这跟我整个max是个啥意思。仔细观察这个式子,书上(《统计学习方法》)给出的定义是,对于不满足约束的c和h,使其拉格朗日乘子(a和b)趋于无穷大,而其余的取值均为0 。因此可以将其定义为,考虑极小化问题,该式与原始最优化问题等价,定义原始问题的最优值。而将原始最优化问题转化为广义拉格朗日函数的极大极小问题代价就是多了a跟b两个拉格朗日乘子。
那么问题就来了,为什么要这样做?因为在约束条件里,含有不等式约束,从而不能使用传统的也就是上面所说的朗格朗日乘子然后求导的方法,其中理解这样做的很重要一点在于,不等式约束c的拉格朗日乘子a大于等于0,所以当约束条件满足时,即c小于等于0时,L(x,a,b)要取得最大,a必然为0;而当约束条件不满足时,即c大于0时,要是L(x,a,b)最大,a必然趋近与无穷大。这样一想豁然开朗,瞬间觉得这个公式棒棒哒。
在理解了这个定义之后,的定义也就理解了,即对所有满足约束条件的f(x)求极小值,当然也就与原始问题同解了。下一步就是如何解这个极小极大问题,。
2,对偶问题
定义:(原谅我直接这个用图片,这上面写公式太纠结了)
3,为什么要采用对偶问题?原始条件与对偶条件相等的前提?
恩..为什么要使用对偶问题来求解?肯定是因为对偶问题简单啊!!为什么简单?这个..暂时还不清楚,不过我会尽力去弄明白的!!
通常情况下,是满足的,但是我们需要的它们相等,这样才能使用对偶问题解决原始问题。
下面有几个定理
(1)假设f(x)跟c(x)是凸函数,h是仿射函数;并假设不等式约束c(x)是严格可行的,即存在x,对所有i有ci(x)<0
则存在x*,a*,b*,使x*是原始问题的解,a*,b*是对偶问题的解。
(2)而定理一的重要条件就是,x*,a*,b*满足KTT条件
特别注意条件(4),若a*>0.则ci(x*)=0,称为KTT的对偶互补条件
未完待续...可能之后还会继续补充