我的机器学习教程「美团」算法工程师带你入门机器学习 已经开始更新了,欢迎大家订阅~
任何关于算法、编程、AI行业知识或博客内容的问题,可以随时扫码关注公众号「图灵的猫」,加入”学习小组“,沙雕博主在线答疑~此外,公众号内还有更多AI、算法、编程和大数据知识分享,以及免费的SSR节点和学习资料。其他平台(知乎/B站)也是同名「图灵的猫」,不要迷路哦~
以前学习SVM时曾草草了解到过KKT条件,当然,关于KKT条件的前身也就是拉格朗日乘子法,是高数就接触过的。如今学习最优化理论,又碰到了他俩,不得不说是一种缘分,当然这两个概念也是机器学习算法中非常重要的,因为机器学习归根到底就是一种优化。接下来让我们来一起看看。
首先来了解拉格朗日乘子法,那么为什么需要拉格朗日乘子法?记住,有拉格朗日乘子法的地方,必然是一个组合优化问题。那么带约束的优化问题很好说,就比如说下面这个:
也就是说,自变量是一个n维向量,要最大化一个目标函数 ,满足若干等式和不等式约束。KKT条件宣称,如果有一个点 是满足所有约束的极值点,则
这是一个带等式约束的优化问题,有目标值,有约束条件。那么想想假设没有约束条件这个问题是怎么求解的呢?是不是直接f对各个x求导等于0,,解x就可以了,可以看到没有约束的话,求导为0,那么各个x均为0,这样f=0最小。也就是说,自变量 x 是一个n维向量,要最大化一个目标函数 f ,满足若干等式和不等式约束。
那么问题就来了,这里在说一点的是,为什么上面说求导为0就可以呢?理论上多数问题是可以的,但是有的问题不可以。如果求导为0一定可以的话,那么f一定是个凸优化问题,什么是凸呢?
严格说,我在泛函分析里看到的定义是这样的:设f为定义在区间I上的函数,和任意的实数
则f称为I上的凸函数,当且仅当其上境图(在函数图像上方的点集)为一个凸集。如果通俗点说,我们在数学分析中学到的函数图像,如果函数任意一点的一阶导数(切线)值总是位于函数曲线的下方,那么就是凸函数。
为目标函数,为限制条件。 如果此处目标函数和限制条件为凸函数,即满足下式时优化问题即为一个凸优化问题
想象一下,目标函数是一座山的高度,约束是镶嵌在山上的一条曲线如下图。
你为了找到曲线上的最低点,就从最低的等高线(0那条)开始网上数。数到第三条,等高线终于和曲线有交点了(如上图所示)。因为比这条等高线低的地方都不在约束范围内,所以这肯定是这条约束曲线的最低点了。
而且约束曲线在这里不可能和等高线相交,一定是相切。因为如果是相交的话,如下图所示,那么曲线一定会有一部分在B区域,但是B区域比等高线低,这是不可能的。
如绿线所示,目标函数 f(x,y)f(x,y) 与约束 g(x,y)g(x,y) 只有三种情况,相交、相切或者没有交集,没交集肯定不是解,只有相交或者相切可能是解,但相交得到的一定不是最优值,因为相交意味着肯定还存在其它的等高线在该条等高线的内部或者外部,使得新的等高线与目标函数的交点的值更大或者更小,这就意味着只有等高线与目标函数的曲线相切的时候,才可能得到可行解。因此给出结论:拉格朗日乘子法取得极值的必要条件是目标函数与约束函数相切,这时两者的法向量是平行的。(关于法向量平行,推荐大家去看看MIT公开课:多变量微积分:拉格朗日乘数法,老师讲的很好)
在求取有约束条件的优化问题时,拉格朗日乘子法(Lagrange Multiplier) 和KKT条件是非常重要的两个求取方法,对于等式约束的优化问题,可以应用拉格朗日乘子法去求取最优值;如果含有不等式约束,可以应用KKT条件去求取。当然,这两个方法求得的结果只是必要条件,只有当是凸函数的情况下,才能保证是充分必要条件。
其实我们都知道,KKT条件是拉格朗日乘子法的泛化,在最优化理论中,KKT条件又叫做一阶(最优性)条件,其实还有一个二阶最优条件,但是这里我们暂且不讨论,想要了解的朋友欢迎去翻看教材,任何一本优化书里都有。
对于含有不等式约束的优化问题,如何求取最优值呢?常用的方法是KKT条件,同样地,把所有的不等式约束、等式约束和目标函数全部写为一个式子L(a, b, x)= f(x) + a*g(x)+b*h(x),KKT条件是说最优值必须满足以下条件:
满足 KKT 条件后极小化 Lagrangian 即可得到在不等式约束条件下的可行解。 KKT 条件看起来很多,其实很好理解:
求取这三个等式之后就能得到候选最优值。其中第2个式子非常有趣,因为g(x)<=0,如果要满足这个等式,必须B=0或者g(x)=0. 这是SVM的很多重要性质的来源,如支持向量的概念。
为什么要这么求能得到最优值?先说拉格朗日乘子法,设想我们的目标函数z = f(x), x是向量, z取不同的值,相当于可以投影在x构成的平面(曲面)上,即成为等高线,如下图,目标函数是f(x, y),这里x是标量,虚线是等高线,现在假设我们的约束g(x)=0,x是向量,在x构成的平面或者曲面上是一条曲线,假设g(x)与等高线相交,交点就是同时满足等式约束条件和目标函数的可行域的值,但肯定不是最优值,因为相交意味着肯定还存在其它的等高线在该条等高线的内部或者外部,使得新的等高线与目标函数的交点的值更大或者更小,只有到等高线与目标函数的曲线相切的时候,可能取得最优值,如下图所示,即等高线和目标函数的曲线在该点的法向量必须有相同方向,所以最优值必须满足:f(x)的梯度 = a* g(x)的梯度,a是常数,表示左右两边同向。这个等式就是L(a,x)对参数求导的结果。
约束优化方法之KKT条件
优化算法—凸优化
SVM-拉格朗日乘数法与KKT条件