初学ML笔记N0.3——凸优化、拉格朗日对偶

来源:互联网 发布:java 接口变量 编辑:程序博客网 时间:2024/04/30 15:14

凸函数定义


凸优化,即指的是对凸函数的一类优化问题。所以,首先,应该明白什么是凸函数。
在同济教材里,判断某个点处的凹凸性,用的是二阶导数的正负号来判断。小于0,是凸的;大于0,是凹的。但是,国外的凹凸性定义跟我们是相反的,这点得注意。以下讨论,我们按国外的定义来。
按数学定义,凸函数定义为:

图片

图里的表示方式有点特别。但是我们把 θx+(1-θ)y 化简为 θ(x-y)+ y 后,把 (x-y) 与 y 向量在坐标系中表示出来,就能明白定义等式的含义了。即,函数上任意两点连线上的值都要大于对应x点处的函数值。

凸函数性质


  • 运算后还能保持函数凸性的算子:

    图片

  • 当定义函数 f(x)=max{ f1(x) , f2(x) , f3(x) …..fn(x)} ,此函数一定是凸函数。证明过程如下:

    图片

  • 根据上边的结论,可以得出,在Oxy平面上任意画N条直线,在每个x处取这些直线的最大的点,则构成的新函数一定是凸函数。相反,如果在每个x处取这些直线的最小值,则构成的新函数一定是凹函数。这里可以小小思考一下,凸函数的最小值与凹函数的最大值有什么关系呢?

凸优化


普通优化问题的基本形式如下:

图片

事实上,所有的优化问题都可以通过符号变换,变换为以上形式。例如,若果是求maxmize f0(x),那么我们就求 -f0(x),即便为 minimize -f0(x) 了。同理,若某约束条件为 fi(x) >=0 ,我们只需等式两边同取符号,则变为 -fi(x) <=0 了。
之所以要这么做,原因就是换成这种标准形式后,我们就可以套用凸函数优化理论对其进行研究了。
凸优化的基本形式,便是 让 fi(x) 为凸函数,hj(x) 为仿射函数(f(x)=Ax+b)。
之所以要保证其为凸函数来研究,原因是凸优化问题的局部最优解即为全局最优解

拉格朗日对偶


对于刚才提到的优化问题,我们可以构造辅助拉格朗日函数:

图片

回忆下以前学的高数内容,当约束条件全是等式,不含不等式时,我们的做法是怎样的?直接对x、λ、v求偏导数,然后另其为0,解得得点即为可能的极值点。进一步考虑,对于凸优化,fi(x) 为凸函数,刚才说了凸函数的局部最优即为全局最优,那么就可以直接得到结论,此时可能的极值点就变成了确定的最值点,这就是为什么要保证 fi(x) 要为凸函数的原因了吧。
我们定义拉格朗日对偶函数为 g(λ、v) :

图片

inf 符号的意思是对函数取下界,那么,根据定义,如果原优化问题有最优值 P^* ,则 g(λ、v) <= P^*。
根据上面凸函数性质的最后一点,取得下界即拉格朗日对偶函数 它一定是一个凹函数。也就是说,它一定含有最大值。
下面,用一个例子来说明拉格朗日对偶:

图片

在右侧图中,自变量为λ,那么我们就λ取个0.1,然后在左侧图里,把约束条件函数乘以一个0.1,然后给叠加到原函数上,则原函数就变为了它附近的那一条浅虚线模样,此时,我们在定义域即 [-0.5 , 0.5] 上,取函数下界,找到最小值,这个值就是 g(λ),然后就可以描绘到右侧了。这样,不断取λ得值,就能得到 g(λ) 的曲线。最后,在曲线上,可以发现有最大值点。
这里存在一个问题,在原图像上,我们能发现其约束条件定义域内的最小值是红线上黑色那点,但是根据右侧的图,找到的最大值点却是小于这个点的。这就引出了另一个问题,强对偶条件
当对偶函数的最大值就是原函数的最小值的时候,我们就说这是一个强对偶的。其必满足KKT条件

图片

关于强对偶,用以下图能看明白,阴影部分是分别取了函数上确界以及下确界的函数,a即为强对偶情形。

图片

关于为什么要用拉格朗日对偶来求最值,说一点个人的理解。
根据凸优化问题的定义,我们是要在 约束条件为 fi(x)<= 0 的情况下求最小值。当我们把 λ 取无穷大时,拉格朗日函数 L(x,λ) 就会变得无穷小,就会出现找不到极值的情况,所以我们把问题转化了,求得对偶函数,而对偶函数能找最大值,所以就使用的拉格朗日对偶。也不知道这种理解是否正确。

拉格朗日对偶举例


图片

图片

图片

图片

0 0