【深度学习】原始问题和对偶问题(六)

∥☆過路亽.° 提交于 2020-03-11 03:13:39

今天要扫盲的知识点是原始问题和对偶问题,这个知识点主要牵涉拉格朗日乘数法。整理这个知识点,主要是为理解下一个知识点(支持向量机)做准备的!

引言

原问题,又称原线性规划问题,是指每一个线性规划的原始问题,每个原问题均可以转化为与其对称的对偶问题。原问题与对偶问题是相对的,二者为同类型的规划,构成对偶规划的一般规则如下:

  • 若原问题是极大化问题,那么对偶问题就是极小化问题;若原问题是极小化问题,那么对偶问题就是极大化问题。
  • 在原问题与对偶问题中,约束右端向量与目标函数中系数恰好对换。
  • 对于极小化问题的“≥ ”型约束(极大化问题的“≤ ”型约束),相应的对偶变量有非负限制;对于极小化问的“≤ ”型约束(极大化问题的“≥
    ”型约束),相应的对偶变量有非正限制;对于原问题的“=”型约束,相应的对偶变量无正负限制。
  • 对于极小化问题的具有非负限制的变量(极大化问题的具有非正限制的变量),在其对偶中相应的约束为“≤ ”型不等式;对于极小化问题的具有非正限制的变量(极大化问题的具有非负限制的变量),在其对偶问题中相应的约束为“≥ ”型不等式;
  • 对于原问题中无正负限制的变量,在其对偶问题中相应的约束为等式。

原始问题

定义:f(x),gi(x),hj(x)f(x), g_i(x), h_j(x)是定义在RnR^n上的连续可微函数,考虑约束最优化问题:
minw  f(x)s.t.  gi(x)0  (i=1,...,k)hj(x)=0  (j=1,...,n)\begin{array}{rcl}&&\min_w\;f(x)\\s.t.\;g_i(x)&\leq&0\;(i=1,...,k)\\h_j(x)&=&0\;(j=1,...,n)\\&& \end{array}
上述称为约束最优化问题的原始问题。[想了解具体的最优化问题见(五]
如果不考虑约束条件的情况下,要求解连续可微函数f(x)的最小值非常简单,直接令其导数等于零,解出x的值即可得到最优解。但是问题总是没有这么简单的!,约束最优化问题是有约束条件的,我们不能无视约束条件呀,那在约束条件下应该怎么求解呢??此时,拉格朗日来了,他整了个 拉格朗日乘数法出来专门把这令人头大的约束条件去掉,将约束最优化问题变成无约束最优化问题!

最优化问题

在介绍拉格朗日之前需要普及一下我们常见的最优化问题可分为三种类型:

  1. 无约束条件:
    minxf(x)\min_x f(x)

  2. 有等式约束条件的:
    minxf(x)s.t.gi(x)=0;(i=1,...,n)\min_x f(x)\\ s.t.g_i(x)=0; (i=1,...,n)

  3. 在第2类基础上再加入不等式约束条件的:
    minxf(x)s.t.gi(x)0;(i=1,...,n)hj(x)=0;(j=1,...,k)\min_x f(x)\\ s.t.g_i(x)\le0; (i=1,...,n)\\ h_j(x)=0;(j=1,...,k)
    显然,上面描述的原始问题是属于”等式约束+不等式约束“的第3类最优化问题了。(这也是最复杂的情况)

拉格朗日乘数法

插入拉格朗日乘数法的一点介绍,为了更好地理解下面的内容。

Lagrange Multiplier Method:是一种寻找变量受一个或多个条件所限制的多元函数的极值的方法。这种方法将一个有n个变量k个约束条件最优化问题转换为一个有n + k个变量的方程组的极值问题,其变量不受任何约束。这种方法引入了一个拉格朗日乘子:约束方程的梯度(gradient)的线性组合里每个向量的系数。

注意啦!!!拉格朗日乘数法主要是解决第2类优化问题,通过引入拉格朗日乘子将等式约束问题变成无约束问题。

  • 表达式:L=f(x,y,z)+λφ(x,y,z)=0L=f(x,y,z)+\lambda \varphi(x,y,z)=0

  • 适用领域范围: 多元函数求极值

举个栗子

给定二元函数z=f(x,y)z=f(x,y)附加条件g(x,y)=0g(x,y)=0 ,为寻找z=f(x,y)z=f(x,y)在附加条件下的极值点,首先,做拉格朗日函数 (公式1):
F(x,y,λ)=f(x,y)+λg(x,y)F(x,y,\lambda)=f(x,y)+\lambda g(x,y)
其中λ\lambda为参数。令F分别对x,y,λx,y,\lambda的一阶偏导数等于0,得到下面 (式子2):
Fx=fx(x,y)+λgx(x,y)=0Fy=fy(x,y)+λgy(x,y)=0Fλ=g(x,y)=0\begin{array}{l}{F^\prime}_x=f^\prime_x(x,y)+\lambda g^\prime_x(x,y)=0\\{F^\prime}_y=f^\prime_y(x,y)+\lambda g^\prime_y(x,y)=0\\{F^\prime}_\lambda=g(x,y)=0\end{array}
由上述方程组解出x,y,λx,y,\lambda,即可得到z=f(x,y)在约束条件g(x,y)=0g(x,y)=0可能的极值点因为导数为0的只是有极值的必要条件,而不是充分条件,即有极值的地方,其切线的斜率一定为0; 切线斜率为0的地方,不一定是极值点。

等式约束

上图所示,蓝色线表示函数f(x,y)f(x,y)的等高线,梯度方向是往外朝,表示越往外扩越大,红色线表示g(x,y)g(x,y)的等高线,梯度方向向左。我们的目标是要找到满足等式约束条件g(x,y)=0g(x,y)=0f(x,y)f(x,y)的最小值,用图说话是,即在g(x,y)=0这条红线上,找到一个使得f(x,y)值尽可能最小的点,从图上可以看到,当f(x,y)的梯度不断缩小,那么红线与蓝线就相离;而当f(x,y)的梯度不断增大,那么红线与蓝线就相交,因此总有一个点能使得两者相交,而相切的地方就是最小值,因为两线相切,目标函数与条件函数在切点处的法线是反向共线的,并且切点处的也满足约束条件,就有:
fx(x,y)=λgx(x,y)fx(x,y)+λgx(x,y)=0fx(x,y)=λgx(x,y)fy(x,y)+λgy(x,y)=0g(x,y)=0\begin{array}{l}f^\prime_x(x,y)=-\lambda g^\prime_x(x,y)\Leftrightarrow f^\prime_x(x,y)+\lambda g^\prime_x(x,y)=0\\ f^\prime_x(x,y)=-\lambda g^\prime_x(x,y)\Leftrightarrow f^\prime_y(x,y)+\lambda g^\prime_y(x,y)=0\\ g(x,y)=0\end{array}
即得到上面(公式2)的结果。这解释了拉格朗日乘数法可用于求极值的原因。

拉格朗日求解原始问题

回到上一节的问题,采用拉格朗日乘数法来去掉原始问题中的约束条件。首先根据约束最优化问题(原始问题)的形式来定义拉格朗日公式(3):
L(x,α,β)=f(x)+ikαigi(x)+jnαjhj(x)\begin{array}{l}L(x,\alpha,\beta)=f(x)+\sum_i^k\alpha_ig_i(x)+\sum_j^n\alpha_jh_j(x)\end{array}
其中,α,β\alpha,\beta是拉格朗日乘子,其实就是两个参数。特别要求的α0\alpha\le0

对于上式,此时的g(x)和h(x)已经不再是约束条件了,所以g(x)的值可能大于0,h(x)的值可能不等于0。如果直接根据公式(3)计算最小值的话,可能会出现以下错误情况:当g(x)0g(x)\le0时,可以直接通过将α\alpha调整为足够大的正值,就可以使得函数L能取到最小值(负无穷)。为了避免这种情况的发生,我们重新定义上述函数得到(公式4):
θp(x)=maxα,β:α0L(x,α,β)\theta_p(x)=\max_{\alpha,\beta:\alpha \ge0}L(x,\alpha,\beta)
注意:上式(4)等式右边是关于α,β\alpha,\beta函数的最大化,当α,β\alpha,\beta确定之后,式子就只与xx有关了,因此这个是一个关于x的函数。

为什么要对公式3做最大化呢? 这原因有很多文章都没有讲清楚的,原因是要排除我们上面提到的错误情况的发生,下面来一步一步分析最大化拉格朗日函数的可行性:

  • 假设g和h函数不满足约束条件的情况下,即gi(x)>0,hj(x)0g_i(x)\gt0,h_j(x)\neq0,那么要最大化L,我们总可以通过调整α,β\alpha,\beta来使得θp(x)\theta_p(x)函数有最大值(正无穷)
  • 假设g和h函数满足约束条件的情况下,即gi(x)0,hj(x)=0g_i(x)\le0,h_j(x)=0时,θp(x)=maxα,βL(x,α,β)=f(x)\theta_p(x)=\max_{\alpha,\beta}L(x,\alpha,\beta)=f(x),这刚好是我们想要的原始问题的目标函数。

因此可得出(公式5):
θp(x)={f(x)x满足原始问题的约束条件其他\theta_p(x)= \begin{cases} f(x)& \text{x满足原始问题的约束条件}\\ -\infty& \text{其他} \end{cases}
然后,在满足约束条件下,我们将θp(x)\theta_p(x)最小化,就可以得到与原始问题求最优化是等价的:(公式6)
minxθp(x)=maxα,β:α0L(x,α,β)=minxf(x)\min_x\theta_p(x)=\max_{\alpha,\beta:\alpha \ge0}L(x,\alpha,\beta)=\min_x f(x)
最后,我们重新定义原始问题的最优值为(公式7):
p=minxθp(x)p^*=\min_x\theta_p(x)

上述,应用拉格朗日方法就为原始问题重新定义了一个无约束问题。理解了上面的过程,下面的内容就相对容易了。

对偶问题

定义关于α,β\alpha,\beta的函数(公式8):
θD(α,β)=minxL(x,α,β)\theta_D(\alpha,\beta)=\min_xL(x,\alpha,\beta)

注意:上式(8)等式右边是关于 xx 函数的最小化,当 xx 确定之后,式子就只与α,β\alpha,\beta有关系了,因此这个是一个关于α,β\alpha,\beta的函数。那么我们将θD(x)\theta_D(x)最大化,得到(公式9):
maxα,β:α0θD(α,β)=maxα,β:α0minxL(x,α,β)\max_{\alpha,\beta:\alpha \ge0}\theta_D(\alpha,\beta)=\max_{\alpha,\beta:\alpha \ge0}\min_xL(x,\alpha,\beta)
(公式9)就为对偶问题,再把原始问题(公式6)放过来:
minxθp(x)=maxα,β:α0L(x,α,β)\min_x\theta_p(x)=\max_{\alpha,\beta:\alpha \ge0}L(x,\alpha,\beta)
两者是对称的,但是区别在于:

  • 原始问题是先固定L(x,α,β)L(x,\alpha,\beta)中的x,优化参数α,β\alpha,\beta,再优化最优值x;
  • 对偶问题是先固定L(x,α,β)L(x,\alpha,\beta)中的α,β\alpha,\beta,优化出最优值x,再确定参数α,β\alpha,\beta

最后,我们重新定义对偶问题的最优值为(公式10):
d=maxα,β:α0θp(α,β)d^*=\max_{\alpha,\beta:\alpha \ge0}\theta_p(\alpha,\beta)

两者关系

定理: 若原始问题与对偶问题都有最优值,则有:d=maxα,β:α0θp(α,β)minxθp(x)=pd^*=\max_{\alpha,\beta:\alpha \ge0}\theta_p(\alpha,\beta)\le \min_x\theta_p(x)=p^*
该定理的证明就不在这里贴出来了,想了解的朋友可以去这篇文章看看

推理: 设分别是x,α,βx^*,\alpha^*,\beta^*原始问题和对偶问题的可行解,如果d=pd^*=p^*,那么x,α,βx^*,\alpha^*,\beta^*分别是原始问题和对偶问题的最优解。

那么,当原始问题和对偶问题的最优值相等:d=pd^*=p^*时,可以用求解对偶问题来求解原始问题,但是到底满足什么样的条件才能使得d=pd^*=p^*呢?
这里需要引入Karush-Kuhn-Tucher,KKT来解释。

Karush Kuhn-Tucher条件,KKT

在数学上,KKT条件是在满足一些有规则的条件下,一个非线性规划(Nonlinear Programming)问题能有最优化解法的一个必要和充分条件。这是一个广义化拉格朗日乘数的成果。

KKT条件专门用于解决不等式约束条件的,在上面,我们提到了对于单个等式约束条件问题求解最优的方法,可直接将等式约束通过拉格朗日换成无约束,但是对于含有不等式约束条件和等式约束条件的问题,则需要引入KKT条件。
minwf(x)s.t.  gi(x)0  (i=1,...,k)  hj(x)=0  (j=1,...,n)\min_wf(x)\\ s.t.\;g_i(x)\le 0\;(i=1,...,k)\\ \;h_j(x)=0\;(j=1,...,n)
将约束问题转为无约束问题的做法分两步:

  1. 先把不等式约束条件转化为等式约束条件\to 引入 松弛变量,即KKT乘子
  2. 再把等式约束转化为无约束优化问题\to 引入拉格朗日乘子

举个栗子

给定二元函数z=f(x,y)z=f(x,y)和附加条件g(x,y)0g(x,y)\le0和,为寻找z=f(x,y)z=f(x,y)在附加条件下的极值点,给出相应的等高线图:

不等式约束
上图有两种情况:

  • 如果最优解恰好在边界上,那么这个就可以通过拉格朗日来求解。
  • 如果最优解在阴影区内部,最优解不在边界上,那该解一定是单纯只考虑 f(x, y) 的最优解,也就是直接求f(x,y)=0f^\prime(x,y)=0的解,即对x,y变量求导数,得到:f(x,y)+λg(x,y)=0f^\prime(x,y)+\lambda g^\prime(x,y)=0因为要取得最小值,所以目标函数的梯度一定是和约束曲线的梯度反向,因此得到λ0\lambda\ge0

因此,将上述情况合并,我们写出拉格朗日函数:
L(x,y,λ)=f(x,y)+i=1nλigi(x,y)L(x,y,\lambda)=f(x,y)+\sum_{i=1}^n\lambda_ig_i(x,y)
在最优解x,y,λx^*,y^*, \lambda^*,应满足以下条件:

()Lx(x,y,λ)=0()Ly(x,y,λ)=0()Lλ(x,y,λ)=0(a)λigi(x)=0()gi(x)0()αi0(拉格朗日条件)L^\prime_x(x^\ast,y^\ast,\lambda^\ast)=0\\ (拉格朗日条件)L^\prime_y(x^\ast,y^\ast,\lambda^\ast)=0\\ (拉格朗日条件)L^\prime_\lambda(x^\ast,y^\ast,\lambda^\ast)=0\\ (a条件)\lambda_ig_i(x^\ast)=0\\ (原始问题约束条件)g_i(x)\leq0\\ (梯度反向)\alpha_i^\ast\geq0\\
上面的(a条件)的由来是:在第二种情况下,当最优解落在函数内部,此时的约束条件已经不起作用了,因此需要消除该约束条件,故得到(a条件)。最优解在约束曲线上时,其表达式为0,若不在某条约束曲线上,为了使最后的结果为0,其系数必须为0,从而使不产生作用的曲线在计算时不产生作用。该条件也称为KKT的对偶互补条件。

到此为止我们推出了KKT的所有条件。

原始-对偶问题转换求解

定理: 对于原始问题和对偶问题,假设目标函数f(x)和不等式约束函数g(x)是凸函数等式约束函数h(x)是仿射函数,并且假设不等式约束g(x)是严格凸函数,即存在x,对所有i有gi(x)<0g_i(x)\lt0(满足上述条件属于为凸优化问题),则存在x,α,βx^*,\alpha^*,\beta^*分别是原始问题和对偶问题的最优解,其满足d=p=L(x,α,β)d^*=p^*=L(x^*,\alpha^*,\beta^*)

使得上述定理成立的充要条件是满足下面的KKT条件:
Lx(x,α,β)=0Lα(x,α,β)=0Lβ(x,α,β)=0αigi(x)=0gi(x)0αi0hj(x)=0L^\prime_x(x^\ast,\alpha^\ast,\beta^\ast)=0\\ L^\prime_\alpha(x^\ast,\alpha^\ast,\beta^\ast)=0\\ L^\prime_\beta(x^\ast,\alpha^\ast,\beta^\ast)=0\\ \alpha_ig_i(x^\ast)=0\\g_i(x)\leq0\\\alpha_i^\ast\geq0\\h_j(x^\ast)=0\\
其中,前四条是拉格朗日乘数法需要满足的条件:分别对各个变量的偏导数等于0,以及附加条件g(x)g(x)h(x)h(x)等于0(其中,h(x)h(x)在原始问题中约束条件已经为0),后面三条是原始问题的约束条件

总结

终于梳理完了,呼~真的好累…

参考文章:
https://blog.csdn.net/fkyyly/article/details/86488582

https://blog.csdn.net/weixin_30430169/article/details/99104890?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

https://blog.csdn.net/dpengwang/article/details/88355744?utm_source=app

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!