zoukankan      html  css  js  c++  java
  • 附录C--拉格朗日对偶性

    1、原始问题

    假设$f(x)$,$c_i(x)$,$h_j(x)$是定义在$R^n$上的连续可微函数,$x in R^n$。考虑以下三类优化问题。

    1、无约束的优化问题:

    egin{align*}
    mathop{min}limits_{x in R^n}f(x)
    end{align*}

    这个只需对函数求导,求极值点即可。

    2、如果增加等式约束条件,则变为如下优化问题:

    egin{align*}
    & mathop{min}limits_{x in R^n}f(x) \
    & s.t. quad h_j(x) = 0, quad j = 1,2,3 cdots ,l
    end{align*}

    该优化问题可通过拉格朗日乘子法解决。定义拉格朗日函数:

    egin{align*}
    mathcal{L}(x_1,cdots ,x_n,eta_1,cdots ,eta_l) = f(x_1,cdots ,x_n) - sum_{j=1}^{l}eta_jh_j(x_1,cdots ,x_n)
    end{align*}

    函数$mathcal{L}$的极值点包含原问题的所有极值点。对原问题求解时,我们只需求出$mathcal{L}$的所有极值点,带入$f(x)$一一检验即可。

    3、增加不等式约束条件:

    egin{align*}
    &mathop{min}limits_{x in R^n}f(x) ag{C.1} \
    s.t. quad & c_i(x) leq 0, quad i=1,2, cdots , k ag{C.2} \
    & h_j(x) = 0, quad j = 1,2,cdots ,l  ag{C.3}
    end{align*}

    下面将讨论对该问题的求解。并将该优化问题称为原始问题(primal problem)。

    首先定义广义拉格朗日函数(generalized Lagrange function):

    egin{align*}
    mathcal{L} = f(x) + sum_{i=1}^{k}alpha_i c_i(x) + sum_{j=1}^{l}eta_i h_j(x) ag{C.4}
    end{align*}

    其中,$x in R^n$。$alpha_i$、$eta_i$是拉格朗日乘子并且满足$alpha_i geq 0$。考虑关于$x$的函数:

    egin{align*}
    heta_P(x) = mathop{max}limits_{alpha geq 0, eta }mathcal{L}(x, alpha , eta ) ag{C.5}
    end{align*}

    注意,这是一个以$x$为自变量的函数。求解过程是:给定一个$x_0$,求函数$mathcal{L(x_0, alpha, eta)}$的最大值,此时$x_0$是定值(也就是常数),$alpha$、$eta$是自变量。

    下标P表示原始(primal)问题。

    给定某个$x$,如果$x$违反约束条件,也就是存在某个$i$满足$c_i(x) > 0$,或者存在某个j满足$h_j(x)   eq 0$,可以得到以下结论:

    egin{align*}
    heta_P(x) = [f(x) + sum_{i=1}^{k}alpha_i c_i(x) + sum_{j=1}^{l}eta_j h_j(x)] = +infty ag{C.6}
    end{align*}

    因为若存在某个$i$满足$c_i(x) > 0$,可取$alpha_i = +infty$,若存在某个j满足$c_j(x)   eq 0$,可取$eta_j = = +infty$。其余的$alpha$和$eta$均取0。如此可得$ heta_P(x) = +infty$。

    如果$x$满足约束条件,由约束条件(C.3)可知$sum_{j=1}^{l}eta_j h_j(x) = 0$,由约束条件(C.2)和$alpha_i geq 0$可知$sum_{i=1}^{k}alpha_i c_i(x)  leq  0$。可以得到:

    egin{align*}
    heta_P(x)  = f(x)
    end{align*}

    并且此时满足$sum_{i=1}^{k}alpha_i c_i(x)  =  0$。再由(C.2)和$alpha_i geq 0$可知,必须满足$alpha_i = 0$或者$c_i(x) = 0$。这是SVM的很多重要性质的来源,如支持向量的概念。

    综上所述,

    egin{align*}
    heta_P(x) = left{egin{matrix}
    f(x), quad c_i(x) leq 0 quad and quad h_j(x) = 0 \
    +infty , quad c_i(x) > 0 quad or quad h_j(x) eq 0
    end{matrix} ight. ag{C.7}
    end{align*}

    所以原问题(C.1)~(C.3)等价于:

    egin{align*}
    mathop{min}limits_{x} heta_P(x) = mathop{min}limits_{x} mathop{max}limits_{alpha geq 0, eta} mathcal{L}(x,alpha ,eta) ag{C.8}
    end{align*}

    为了方便,定义原问题的最优值:

    egin{align*}
    p^* = mathop{min}limits_{x} heta_P(x) ag{C.9}
    end{align*}

    2、对偶问题

    定义关于$alpha$、$eta$的函数

    egin{align*}
    heta_D(alpha, eta) = mathop{min}limits_{x}mathcal{L}(x,alpha,eta) ag{C.10}
    end{align*}

    可以得到最优化问题:

    egin{align*}
    & mathop{max}limits_{alpha,eta} heta_D(alpha,eta) = mathop{max}limits_{alpha,eta}mathop{min}limits_{x}mathcal{L}(x,alpha,eta) ag{C.12} \
    & s.t. quad alpha_i geq 0, quad i = 1,2,cdots k ag{C.13}
    end{align*}

    该问题成为原问题的对偶问题。原问题和对偶问题并不是等价的。

    定义对偶问题的最优解为$d^*$,则有$d^* geq p^*$(证明略)。

    定理C.2 考虑原始问题(C.1)~(C.3)和对偶问题(C.12)~(C.13)。假设$f(x)和c_i(x)$是凸函数,$h_j(x)$是仿射函数;并且假设不等式约束$c_i(x)$是严格可行的,即存在$x$,对所有$i$有$c_i(x)<0$,则存在$x^*$,$alpha^*$,$eta^*$,使$x^*$是原始问题的解,$alpha^*$,$eta^*$是对偶问题的解,并且:

    egin{align*}
    p^* = d^* = L(x^*,alpha^*,eta^*) ag{C.20}
    end{align*}

    定理C.3 对原问题的对偶问题, 假设$f(x)$和$c_i(x)$是凸函数,$h_j(x)$是仿射函数(一阶多项式,可理解为线性函数),并且不等式约束是严格可行的(即存在$x$,对所有的$i$有$c_i(x) < 0$),则原问题和对偶问题具有相同解的充要条件是最优解$x^*$,$alpha^*$,$eta^*$满足下面的KKT条件:

    egin{align*}
    & abla_x mathcal{L}(x^*,alpha^*,eta^*) = 0 \
    & abla_{alpha} mathcal{L}(x^*,alpha^*,eta^*) = 0 \
    & abla_{eta} mathcal{L}(x^*,alpha^*,eta^*) = 0 \
    & alpha_i^* c_i(x^*) = 0 \
    & c_i(x^*) leq 0 \
    & alpha_i^* geq 0 \
    & h_j(x^*) = 0
    end{align*}

    参考文献:

    李航:《统计学习方法》 附录C

    wikipedia:拉格朗日乘数

    支持向量机(SVM)必备知识(KKT、slater、对偶)

    SVM系列第七讲--KKT条件

  • 相关阅读:
    About try...expect...else
    About from __future__ import absolute_import
    How to 安装apache和配置自定义目录, run CGI or py
    Caffe
    About os.environ
    TensorFlow
    Keras
    SQL自定义函数,把sql中小数点后的多于0去掉
    .net杂记 (调用EXE 获取路径 target VB DIV C# Split 页面之间传递值 更改session时间 EXCEL操作 控制电子邮件Mail input记录值的窍门)
    orcle分析函数
  • 原文地址:https://www.cnblogs.com/royhoo/p/8317644.html
Copyright © 2011-2022 走看看