漫步支持向量机(svm)之二 拉格朗日乘子法
所谓工欲善其事,必先利其器,要想求解目标函数的最小值,而且还是在有不等式约束条件下的最小值,就必须要知道拉格朗日乘子法。
设目标函数为
J(x,y)=x^2+y^2
则求J(x,y)的最小值很简单吧,让J关于x,y的偏导数等于0,即可求出最小点\hat x,\hat y,J(x,y)的几何图像是一个抛物面,其等值面则是以原点为中心的同心圆环。
那如果加上约束线y=x^2+1,那也就意味着,自变量x,y只能在约束线上运动。几何图像如下所示:
等高线图像如下:
此时求目标函数J(x,y)的最小值就不在J关于x,y偏导为0的点上了,因为关于x,y偏导为0的点不在约束线上。
仔细观察J(x,y)的等值面,可以发现从原点往外,等值面所对应的目标函数的值一直在增加,等值面与约束线的关系有三种,相交,相切,相离。相交表示自变量可以取到约束线上的值,相切的时候正好处于临界位置,此时也是目标函数在约束线上取到极值的时候,相离表示自变量不在约束线上,纵然此时目标函数可能取到更小的值,然而已经在约束线之外了,并没有什么卵用。
好了,既然相切的时候就是目标函数在约束条件下取到最小值的时候,那就好办了,相切意味着等值面(在二维情况下应该叫做等高线更合适些)的法向量和约束线的法向量在切点处共线。
也就是说,等高线J(x,y)=x^2+y^2=R^2的梯度向量\nabla J=(\partial J/\partial x,\partial J/\partial y)和约束线C(x,y)=x^2+1-y=0的梯度向量\nabla C=(\partial C/\partial x,\partial C/\partial y)共线。也即
\nabla J+\lambda \nabla C=0
其中的\lambda就是传说中的拉格朗日乘子了。
有了这个等式,再加上约束线方程,就可以解出极值点和拉格朗日乘子\lambda了。
好了,如果是不等式约束又该如何求解呢?
此时要分两种情况来讨论,第一种情况是当极值点就在约束线上时,这个时候其实等价于等式约束,也即和C(x,y)=0时的极值点是一样的。比如不等式约束为:
C(x,y)=x^2+1-y \le 0
如图所示:
第二种情况是当极值点不在约束线上,此时极值点在哪儿呢?当然在J(x,y)关于x,y的偏导为0的点上了,此时约束条件并不起作用,也就是说拉格朗日乘子等于0。比如不等式约束为:
C(x,y)=-x^2-1+y \le 0
如图所示:
将上面两种情况结合在一起,可以写成:
\lambda \cdot C(x,y)=0
也就是说,当\lambda=0时,极值点不在约束线上,而在C(x,y)<0的地方,也就是\nabla J(x,y)=0的地方,此时等价于无约束条件下求解目标函数数的极值。当C(x,y)=0时,极值点在约束线上,此时等价于等式约束,而且目标函数的梯度\nabla J与约束线的梯度\nabla C反向,因为约束面在C(x,y) \le 0的区域,而梯度\nabla C指向的是C(x,y)增加的方向,所以在方程\nabla J+\lambda \nabla C=0中\lambda要大于等于0。
若设拉格朗日函数为:
L(x,y,\lambda)=J(x,y)+\lambda \cdot C(x,y)
那么\nabla J+\lambda \nabla C=0可以写成\nabla L=0
好了,总结一下,要求解不等式约束下目标函数的极值,并假设极值点为(\hat x,\hat y),相应的拉格朗日乘子为\hat \lambda ,那么需要满足以下条件:
\nabla L=\nabla J+\hat \lambda \nabla C=0 \\ C(\hat x,\hat y) \le 0\\ \hat \lambda \cdot C(\hat x,\hat y)=0 \\ \hat \lambda \ge 0
这个条件也就是传说中的KKT条件。
去吧,去吧,到彼岸去吧,彼岸是光明的世界!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步