zoukankan      html  css  js  c++  java
  • ML-对偶(Duality)问题 KKT 条件

    Primal => Dual

    现实中我们遇到的原优化问题, 写为标准型的话是这样的.

    (min _w f(w) \ s.t. \ g_i(w) <=0 \ h_i(w) = 0)

    即要求的是在w满足约束条件下, 且使得f(w)取得最小值的 w 的值.

    那我们通常的做法是通过引入拉格朗日函数:

    (L(w, alpha, eta) = f(w) + sum _{i=1}^{k} alpha_i g_i(w) + sum _{i=1}^{t} eta_i h_i(w))

    其中(alpha, eta) 都大于等于0, 称为拉格朗日算子. 至于为什么能这样做, 参考"对偶问题初识"的笔记里我有推导, 更详尽的可以翻翻高数, 关于带约束条件下求函数极值的部分, 分别从几何和分析的两个角度有推导(核心就是偏导数,梯度向量(法向量)平行), 这里就过了,不想牵扯太多.

    现在来考虑一个max 的函数:

    ( heta_p(w) = max _{alpha, eta} L(w, alpha, eta))针对 (alpha, eta)要对L(w) 取最大.

    对于给定的w, 如果对于原问题 f(w)中没有对w进行约束, 则可得出( heta_p(w))的是无穷大的.

    ( heta_p(w) = [f(w) + sum _{i=1}^{k} alpha_i g_i(w) + sum _{i=1}^{t} eta_i h_i(w)] = infty)

    如过 w 满足primal 的约束, 则( heta_p(w) = f(w)), 这里的"=",应该表示"最优化问题等价"不是数值上等于,感觉. 这里有一点绕, 其实想表达的是这样的思想:

    欲对关于(w,alpha, eta)的函数(L(w,alpha, eta) 取min)时的优化问题, 转为先对 (alpha, eta) 优化取max, 再优化 w

    用数学的形式来表达这样的思想即:

    (min_w [ heta_p (w)] =min_w [max_{alpha, eta} L(w, alpha, eta)])

    再定义: ( heta_D(alpha, eta) = min_w L(w, alpha, eta))

    • ( heta _p(w)) 是针对 (alpha, eta)max 最优化
    • ( heta_D(alpha, eta)) 是针对 w 的min 最优化

    也就是将dual 的问题可定义为:

    (max_{alpha, eta} [ heta_D(alpha, eta)] = max_{alpha, eta min_w [L(w, alpha, eta)]})

    对于原始及其对偶问题, 我们假设

    • p* 为primal 问题 (min_w heta_p(w)) 的最优解

    • d* 为其 dual 问题 (max_{alpha, eta} heta_D(alpha, eta)) 的最优解

    必然有:

    $p^* = min_w [max_{alpha, eta} L(w, alpha, eta)] >= max_{alpha, eta} [min_w L(w, alpha, eta)]= d* $

    关于 p* >= d* 在"对偶问题初识"的笔记中有过证明, 根据约束条件及定义证明的

    有一种这样的感觉: 对一个多元函数有: "min max" >= "max min", 多个参数哈.

    KKT

    关于primal 和 dual 的一个最为重要的结论, 莫过于p* >= d* (用约束定义证明)

    (minmize f_0(x) \ s.t. \ f_i(x) <=0, i=1,2,..m \ h_j(x) = 0, j = 1,2...p)

    在凸优化及对偶的初识中, 我们知道, 如果 p = d*, 则称为强对偶, 当函数为convex, 一般会成立. 同样, 如果已经函数是convex. 如果满足: (exists x', f_i(x') <0, h_j(x')=0) (称为slater's condition) 则可判定该convex是强对偶*的哦.

    我们进一步还推导了 complementary slackness 条件

    即如果 p*=d * 必然要有 (lambda^* f_i(x) = 0)

    这里先引入结论, p*=d * ** 只有在KKT条件下才会满足**

    KKT

    • 是以3个科学家名字命名的: Karush-Kuhn-Tucke
    • 广义化的拉格朗日数数乘的扩展

    SVM算是KKT的一个最典型的应用了. 假设 f, g 都是convex函数(f(w) = w^Tw)的约束条件, 满足(h_i(w), g_i(w)) 都是 (a_i^Tw+b) 的线性形式, 同时假设存在w使得(g_i(w)<=0 恒成立). 则一定存在(a_i^*, eta^*, w^*) 满足Karush-Kuhn-Tucker(KKT)条件,而 [ (a_i^*, eta^*, w^*)] 也正好是 **p*=d ***的解, KKT条件即:

    (frac {partial } {partial w_i} L(w^*,a_i^*, eta^*)= 0)

    (frac {partial } {partial eta_i} L(w^*, a_i^*, eta^*)= 0)

    (alpha_i^*g_i(w^*) = 0) (很关键的 complementary 条件哦, 已通过定义证明)

    (g_i(w^*)<=0)

    (a^* >= 0)

    why KKT?

    不难发现在很多问题求解, 我们大多能转为dual的问题, 然而如果不能满足KKT条件, dual的问题可能不能简化primal问题的求解, KKT我自己平时也基本不会用到, 不过在SVM中却被巧妙地用到了, 就是有一条关键性质:

    (alpha_i^*g_i(w^*) = 0)

    使得SVM在求解参数的时候, 简化了大量的运算量, 从而找到那些支持向量就搞定了, 其他地方, 欧文感觉也没太用到, 不过运筹学方面,应该会有涉及一点, 我也不管, 就像理解一波KKT和推导SMV, 装逼一波, 然后应用上做一个自信的调参侠,仅此而已, 下一波就推导SVM.

  • 相关阅读:
    C# — WinForm TCP连接之服务器端
    Linq to SQL — Group by
    pytorch model()[] 模型对象类型
    git官网下载太慢解决方法
    财务分析
    python错题集
    SQL 开窗函数 头尾函数 first_value()/last value()不常用
    徐杨老师的公开课关于敏捷算法
    SQL 开窗函数:range和rows的区别
    SQL开窗函数 row_number(),dense_rank(), rank()
  • 原文地址:https://www.cnblogs.com/chenjieyouge/p/11927131.html
Copyright © 2011-2022 走看看