在介绍SVM算法之前,需要一些背景知识,优化理论就是其中的基石。在此之前,我对优化理论都没有很好地理解,今天看了一些知乎上大神们的解释,对拉格朗日乘子法和KKT条件有了一些全新的认识,今天特意mark一下。
感谢
https://zhuanlan.zhihu.com/p/36621652zhuanlan.zhihu.com和
非线性优化中的 KKT 条件该如何理解?www.zhihu.com马同学的回答。
具体的细节和图画可以到以上两个优秀的回答中看,这里只是记录一些浅显的认识和理解,主要是帮助本人记忆和记录。
说到求解最优解,我们最先想到的应该就是对一个函数进行求导,然后令导数为0,接着就是求解这个方程,得到的就是最优解啦。
例如要求解
没错,上面就是没有约束条件下最优解的办法,那么当有约束条件怎么呢?这时候就要用到拉格朗日乘子法。其实拉格朗日法就是把一个有约束问题转换成一个无约束问题,此时就需要引入拉格朗日项来起到控制效果。如果满足约束条件,那么这个项就应该有助于最优化,而不满足约束条件,则这个项就惩罚最优化。因此为了找到最优化的结果,就得满足约束条件。
问题描述:
由图可以看到,蓝色线为函数等值线,整个平面是x的空间,但是由于加了约束
那么拉格朗日乘子法的做法就是定义一个新的拉格朗日函数:
对于不等式约束的最优化问题就得引入KKT条件。
问题描述:
因为我们要求解的问题是最小化问题,所以下面都会说是梯度的反方向。
蓝色斜线为部分为可行域,也就是
第一种就函数f(x)极值点就在
第二种情况就是函数f(x)极值点在
此时对于拉格朗日函数
结合上面两种情况,简化上面的式子,则可以写出拉格朗日函数和KKT条件:
再推广到多个约束条件:
则拉格朗日函数为
引入的KKT条件为:
最后总结一下,对于有约束的最优化问题,使用拉格朗日乘子法来把问题转换成无约束问题进行求解,也就是问题的最优解必须满足KKT条件,KKT条件简单来说,就是函数的梯度方向由等式约束条件的梯度方向线性组合加上不等式约束条件的活跃点(也就是不等式约束条件等号成立的时候)的梯度的线性组合。由于该KKT条件的存在,所以才有拉格朗日乘子法。而拉格朗日法的目的其实就是加多一项控制项,满足条件时,应该帮助最优化的结果;而不满足条件时,就应该破坏最优化的结果。