zoukankan      html  css  js  c++  java
  • 拉格朗日乘数法 和 KTT条件

    预备知识

    (X) 表示一个变量组(向量) ((x_1, x_2, cdots, x_n))
    考虑一个处处可导的函数 (f(X)), 为了方便描述, 这里以二元函数为例
    对于微分, 考虑在初始点处固定x移动y产生的变化量, 是和先将x移动dx,然后固定x移动y产生的变化量是相等的
    那么有全微分公式 (df = frac{partial f}{partial x}dx + frac{partial f}{partial y}dy)
    定义 ( abla f(x, y)) 为点 ((x, y)) 上的梯度方向向量(平面上的这些向量构成一个向量场)
    梯度方向向量指向让(df)最大的方向. 也即使 ((frac{partial f}{partial x},frac{partial f}{partial y})cdot(dx, dy)) 最大的 ((dx, dy))
    要投影最长, 同向自然最优, 因此偏导组成的向量((frac{partial f}{partial x},frac{partial f}{partial y}))就是梯度方向向量
    同理考虑 (df=0) 的方向(等高线), 投影为0, 这说明等高线的方向与梯度的方向垂直
    高维的情况同理

    拉格朗日乘数法

    考虑这么一个问题:
    (~~max f(X))
    (s.t.~~g_k(X) = 0, forall k in [1,m])

    考虑 (f(X)) 在什么时候取得局部极大值:
    考虑往某个方向微移, 若满足这样移动不影响任何一个 (dg), 那么必须要有 (df=0)
    否则如果存在 (df eq 0) , 必然 (<0, >0) 都会出现 (考虑反向微移), 就不是局部极值点了
    考虑把 (dx_1, dx_2,cdots dx_n) 这种东西看作变量
    ( abla g_1, abla g_2, cdots abla g_m) 以及 ( abla f) 都横着放在矩阵里看作若干个方程
    之前的条件就等价于: 前 (m) 条方程蕴含了最后一条方程
    也即 ( abla f) 可以被 ( abla g_1cdots abla g_m) 线性表示

    (L(X,Lambda) = f(X) + sum_{k=1}^m lambda_k g_k(X))
    我们只需求解 ( abla L(X,Lambda) = 0) 即可

    这样我们对 (n) 个变量分别求偏导即可得到 (n) 个方程
    加上 (g)(m) 个方程 (恰好是对(lambda)分别求偏导)
    总共 (n+m) 个方程.

    KKT条件

    考虑这么一个问题:
    (~~max f(X))
    (s.t.~~h_k(X)ge 0, forall k in [1, m])

    (L(X, Lambda) = f(x) + sum_{k=1}^m lambda_k h_k(X), lambda_k ge 0)

    因为(lambdage 0, hge 0), 所以 (f(X) = min_{Lambdage 0} L(X,Lambda))
    原问题等价于 (max_X min_{Lambdage 0} L(X,Lambda))

    考虑对偶问题 (min_{Lambdage 0}max_X L(X, Lambda))
    显然(L(X, Lambda)ge f(X)), 则有 (max_X L(X, Lambda) ge max f(X))
    对偶问题对所有的这些值取 (min), 仍然是 (ge max f(X))

    设原问题极值点在 (X^{*}), 对偶问题极值点在 (Lambda^{*})
    则有 (max_X L(X, Lambda^{*}) ge f(X^{*}) + sum_{k=1}^m lambda^{*}_k h_k(X) ge f(X^{*}))
    假设强对偶性满足, 上面的不等号都要变成等号
    限制了 : (lambda^{*}_k h_k(X) = 0) 以及 ( abla L(X^{*}, Lambda^{*})=0)

    结论好记: KTT条件只比拉格朗日乘数多了两个限制, (lambda_k h_k(X) = 0, lambda_kge 0)
    在哪些问题上满足强对偶性, 详见wiki
    自己姿势水平不够, 这个坑可能不那么快能填上了

    另外, 考虑如果在原问题加上等式限制, 就再补上拉格朗日乘数即可, 不难发现, 不影响这里的证明

  • 相关阅读:
    字符串的全排列

    链表
    青蛙跳一格或者两格,n格跳法
    二叉树
    Concurrent实现原理
    sql语句总结 (转) http://blog.csdn.net/fengfeng91/article/details/15029173
    ArrayList实现原理
    java虚拟机 内存分配
    【转】关于Quartus ii无法识别Modelsim路径的问题
  • 原文地址:https://www.cnblogs.com/acha/p/9079106.html
Copyright © 2011-2022 走看看