拉格朗日乘子法

拉格朗日乘子法

在求取有约束条件的优化问题时,拉格朗日乘子法(Lagrange Multiplier) 和KKT条件是非常重要的两个求取方法,对于等式约束的优化问题,可以应用拉格朗日乘子法去求取最优值;如果含有不等式约束,可以应用KKT条件去求取。当然,这两个方法求得的结果只是必要条件,只有当是凸函数的情况下,才能保证是充分必要条件。KKT条件是拉格朗日乘子法的泛化。之前学习的时候,只知道直接应用两个方法,但是却不知道为什么拉格朗日乘子法(Lagrange Multiplier) 和KKT条件能够起作用,为什么要这样去求取最优值呢?

首先把什么是拉格朗日乘子法(Lagrange Multiplier) 和KKT条件叙述一下;然后开始分别谈谈为什么要这样求最优值。

拉格朗日乘子法(Lagrange Multiplier) 和KKT条件

通常我们需要求解的最优化问题有如下几类:

(i) 无约束优化问题,可以写为

m i n f ( x ) min f(x) minf(x);

(ii) 有等式约束的优化问题,可以写为:

m i n f ( x ) min f(x) minf(x),

s . t . h i ( x ) = 0 ; i = 1 , … , n s.t. h_i(x) = 0; i =1, …, n s.t.hi(x)=0;i=1,,n

(iii) 有不等式约束的优化问题,可以写为:

m i n f ( x ) , min f(x), minf(x),

s . t . g i ( x ) < = 0 ; i = 1 , … , n s.t. g_i(x) <= 0; i =1, …, n s.t.gi(x)<=0;i=1,,n

h j ( x ) = 0 ; j = 1 , … , m h_j(x) = 0; j =1, …, m hj(x)=0;j=1,,m

对于第(i)类的优化问题,常常使用的方法就是Fermat定理,即使用求取f(x)的导数,然后令其为零,可以求得候选最优值,再在这些候选值中验证;如果是凸函数,可以保证是最优解。

对于第(ii)类的优化问题,常常使用的方法就是拉格朗日乘子法(Lagrange Multiplier) ,即把等式约束h_i(x)用一个系数与f(x)写为一个式子,称为拉格朗日函数,而系数称为拉格朗日乘子。通过拉格朗日函数对各个变量求导,令其为零,可以求得候选值集合,然后验证求得最优值。

对于第(iii)类的优化问题,常常使用的方法就是KKT条件。同样地,我们把所有的等式、不等式约束与f(x)写为一个式子,也叫拉格朗日函数,系数也称拉格朗日乘子,通过一些条件,可以求出最优值的必要条件,这个条件称为KKT条件。

  • 拉格朗日乘子法(Lagrange Multiplier)

    对于等式约束,我们可以通过一个拉格朗日系数a 把等式约束和目标函数组合成为一个式子 L ( a , x ) = f ( x ) + a ∗ h ( x ) L(a, x) = f(x) + a*h(x) L(a,x)=f(x)+ah(x), 这里把 a 和 h ( x ) a和h(x) ah(x)视为向量形式,a是横向量,h(x)为列向量。

    然后求取最优值,可以通过对L(a,x)对各个参数求导取零,联立等式进行求取。

  • KKT条件

    对于含有不等式约束的优化问题,如何求取最优值呢?常用的方法是KKT条件,同样地,把所有的不等式约束、等式约束和目标函数全部写为一个式子 L ( a , b , x ) = f ( x ) + a ∗ g ( x ) + b ∗ h ( x ) L(a, b, x)= f(x) + a*g(x)+b*h(x) L(a,b,x)=f(x)+ag(x)+bh(x),KKT条件是说最优值必须满足以下条件:

    1. L ( a , b , x ) L(a, b, x) L(a,b,x) x x x求导为零;

    2. h ( x ) = 0 h(x) =0 h(x)=0;

    3. a ∗ g ( x ) = 0 a*g(x) = 0 ag(x)=0;

    求取这三个等式之后就能得到候选最优值。其中第三个式子非常有趣,因为g(x)<=0,如果要满足这个等式,必须a=0或者g(x)=0. 这是SVM的很多重要性质的来源,如支持向量的概念。

  • 有不等式约束的优化问题

    假设我们求解的不等式约束的优化问题如下:

    m i n f ( x ) minf(x) minf(x)
    s . t . g i ( x ) ⩽ 0 i = 1 , … , m s.t.g_i(x)⩽0 i=1,…,m s.t.gi(x)0i=1,,m
    h i ( x ) = 0 ; i = 1 , … , m h_i(x)=0;i=1,…,m hi(x)=0;i=1,,m

    那么根据前面讲解的拉格朗日函数,我们可以得到如下的公式:

    m i n L ( x , λ , b ) = f ( x ) + ∑ i = 1 q λ i g i ( x ) + ∑ i = 1 m b h i ( x ) minL(x,λ,b)=f(x)+∑^q_{i=1}λ_ig_i(x)+∑^m_{i=1}bh_i(x) minL(x,λ,b)=f(x)+i=1qλigi(x)+i=1mbhi(x)

    如果我们对这样的公式求最小值会出现什么问题呢?由于没有任何的限制条件,所以λg(x)的值可能为正也可能为负,这样在无形中就增加了我们的验证难度,所以这里我们可以将 λ i λ_i λi调整为最大的正值,使λg(x)的值趋近于负无穷,使由于x变化导致的f(x)的变化基本上不会影响λg(x)的变化,这样我们就可以忽略后半部分λg(x)的值,而只关注前边f(x)的部分就可以了。这样就延伸出如下的问题:

    θ p ( x ) = m a x λ ⩾ 0 L ( x , λ , b ) θp(x)=max_{λ⩾0}L(x,λ,b) θp(x)=maxλ0L(x,λ,b)

    即:求解λ最大值,使λg(x)趋近于负无穷(这个负无穷是相对的,取决于实际的情况)的值。

    这样我们的问题就转变成了如下的内容:

    m i n x f ( x ) = m i n x θ p ( x ) = m i n x m a x λ L ( x , λ , b ) min_xf(x)=min_xθp(x)=min_xmax_λL(x,λ,b) minxf(x)=minxθp(x)=minxmaxλL(x,λ,b)

    s . t . λ ⩾ 0 s.t.λ⩾0 s.t.λ0

    如果我们直接求解 m i n x θ p ( x ) min_xθp(x) minxθp(x)的话,不好求解,这里有两个参数,并且存在一个不等式约束,这个求解过程是比较复杂的。要求解这个过程话,我们需要先了解下拉格朗日对偶的问题。

    首先思考一下,我们考虑这个公式的对偶面,即:先在λ固定的情况下,求解关于x的最小值,然后再针对λ求最大值。
    如果我们只是简单的调换下求极值的顺序,那么会产生如下的结果:

    m i n x m a x λ L ( x , λ , b ) ⩾ m a x λ m i n x L ( x , λ , b ) min_xmax_λL(x,λ,b)⩾max_λmin_xL(x,λ,b) minxmaxλL(x,λ,b)maxλminxL(x,λ,b)

    由于我们需要的是两个等式相等,那么我们就需要寻找能够使两者相等的条件,这里呢我们就需要引入KKT条件了,KKT条件有如下几条:

    1. ∇L(x,λ,b)∇x的值为0,即拉格朗日函数对x求导的值为0。求极值的必须要求。

    2. bi≠0。根据拉格朗日算子法,那么算子系数b的话就不能够为0(定义中的东西)。

    3. λ⩾0。这个条件已经在前边讲过了,需要寻找不等式值的负无穷,使我们能够将求值过程简化。

    4. λ g i ( x ) = 0 λg_i(x)=0 λgi(x)=0

    5. h i ( x ) = 0 ; i = 1 , … , q h_i(x)=0;i=1,…,q hi(x)=0;i=1,,q。这个是前提条件。

    6. g i ( x ) ⩽ 0 ; i = 1 , … , m g_i(x)⩽0;i=1,…,m gi(x)0;i=1,,m。这个也是前提条件。

  • 拉格朗日对偶问题

    如果我们求解一下不等式的优化问题:

    m i n f ( x ) minf(x) minf(x)

    s . t . g i ( x ) ⩽ 0 ; i = 1 , … , m s.t.g_i(x)⩽0;i=1,…,m s.t.gi(x)0;i=1,,m

    如果我们用KKT条件话会生成如下的函数:

    m i n L ( x , λ ) = f ( x ) + ∑ i = 1 q λ i g i ( x ) minL(x,λ)=f(x)+∑^q_{i=1}λ_ig_i(x) minL(x,λ)=f(x)+i=1qλigi(x)

    s . t . λ i ⩾ 0 , g i ( x ) ⩽ 0 s.t.λ_i⩾0,g_i(x)⩽0 s.t.λi0,gi(x)0

    这个函数和我们在上面讲解的拉格朗日乘子法很想像,但是不同的是限制条件——拉格朗日算子法的限制条件是λ≠0,而KKT条件的限制条件是:λ⩾0。KKT条件实际上是对拉格朗日乘子法的泛化。

    接下来将为大家展示一个基于KKT条件生成的函数(满足KTT条件)产生的一个证明过程,如下所示:

    λ i ⩾ 0 且 g i ( x ) ⩽ 0 λ_i⩾0且g_i(x)⩽0 λi0gi(x)0

    λ g ( x ) ⩽ 0 λg(x)⩽0 λg(x)0

    m a x λ L ( x , λ ) = f ( x ) max_λL(x,λ)=f(x) maxλL(x,λ)=f(x)

    m i n x f ( x ) = m i n x m a x λ L ( x , λ ) min_xf(x)=min_xmax_λL(x,λ) minxf(x)=minxmaxλL(x,λ)

    这里我们看一下另外一个等式:

    m a x λ m i n x L ( x , λ ) = m a x λ [ m i n x f ( x ) + m i n x λ g ( x ) ] = m a x λ m i n x f ( x ) + m a x λ m i n x λ g ( x ) = m i n x f ( x ) + m a x λ m i n x λ g ( x )            ( 1 ) max_λmin_xL(x,λ)=max_λ[min_xf(x)+min_xλg(x)]=max_λmin_xf(x)+max_λmin_xλg(x)=min_xf(x)+max_λmin_xλg(x) \ \ \ \ \ \ \ \ \ \ (1) maxλminxL(x,λ)=maxλ[minxf(x)+minxλg(x)]=maxλminxf(x)+maxλminxλg(x)=minxf(x)+maxλminxλg(x)          (1)

    这里讲解一下上(1)式的变化过程,对于f(x)来说,变量λ对于f(x)来说是无效的,所以我们可以进行这种变换。

    ∵ λ i ⩾ 0 且 g i ( x ) ⩽ 0 ∵ λ_i⩾0且g_i(x)⩽0 λi0gi(x)0

    ∴ λ g ( x ) = { 0 λ = 0   o r   g ( x ) = 0 − ∞ λ > 0   a n d   g ( x ) < 0 ∴λg(x)=\begin{cases}0&λ=0\ or\ g(x)=0\\−∞&λ>0\ and\ g(x)<0\end{cases} λg(x)={0λ=0 or g(x)=0λ>0 and g(x)<0

    ∴ 当 λ = 0 或 g ( x ) = 0 时 , m a x λ m i n x λ g ( x ) = 0 ∵ m a x λ m i n x L ( x , λ ) = m i n x f ( x ) + m a x λ m i n x λ g ( x ) ∴当λ=0 或 g(x)=0时,max_λmin_xλg(x)=0∵max_λmin_xL(x,λ)=min_xf(x)+max_λmin_xλg(x) λ=0g(x)=0maxλminxλg(x)=0maxλminxL(x,λ)=minxf(x)+maxλminxλg(x)

    ∴ m a x λ m i n x L ( x , λ ) = m i n x f ( x )         ( 2 ) ∴max_λmin_xL(x,λ)=minxf(x)\ \ \ \ \ \ \ (2) maxλminxL(x,λ)=minxf(x)       (2)——(因为满足KTT条件是,一定有λ=0 或 g(x)=0)

    据此根据(1)(2),我们可以得到如下的公式:

    m a x λ m i n x L ( x , λ ) = m i n x m a x λ L ( x , λ ) max_λmin_xL(x,λ)=min_xmax_λL(x,λ) maxλminxL(x,λ)=minxmaxλL(x,λ)

相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页