预备知识

令 \(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\)
定义 \(\nabla 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\neq 0\) , 必然 \(<0, >0\) 都会出现 (考虑反向微移), 就不是局部极值点了
考虑把 \(dx_1, dx_2,\cdots dx_n\) 这种东西看作变量
把 \(\nabla g_1, \nabla g_2, \cdots \nabla g_m\) 以及 \(\nabla f\) 都横着放在矩阵里看作若干个方程
之前的条件就等价于: 前 \(m\) 条方程蕴含了最后一条方程
也即 \(\nabla f\) 可以被 \(\nabla g_1\cdots \nabla g_m\) 线性表示

令\(L(X,\Lambda) = f(X) + \sum_{k=1}^m \lambda_k g_k(X)\)
我们只需求解 \(\nabla 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\)

因为\(\lambda\ge 0, h\ge 0\), 所以 \(f(X) = \min_{\Lambda\ge 0} L(X,\Lambda)\)
原问题等价于 \(\max_X \min_{\Lambda\ge 0} L(X,\Lambda)\)

考虑对偶问题 \(\min_{\Lambda\ge 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\) 以及 \(\nabla L(X^{*}, \Lambda^{*})=0\)

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

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

最新文章

  1. C# 仿刷-框架MvcThrottle的使用
  2. ASP.net如何保证EF操作类线程内唯一
  3. Gmail 账号找回办法
  4. c# 闭包 小例
  5. Android-activity-intent
  6. Codeforces Round #185 (Div. 2) C. The Closest Pair 构造
  7. new Random().nextInt
  8. 对DTU系统结构的重新思考
  9. 使用Android简单实现有道电子词典
  10. jsp-3 简单的servlet连接mysql数据库 使用mvc的登录注册
  11. Aleta病毒
  12. Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享
  13. Dynamics 365权限变化大部署后需要注意什么?
  14. Handler使用小结
  15. [转]cocos2d-js 3.0 屏幕适配方案 分辨率适应
  16. Python spli指定多个分隔符
  17. 记录一下mac上码云的使用
  18. Ajax的初体验
  19. PHP闭包--匿名函数
  20. 爬虫之Xpath详解

热门文章

  1. 在WPF中自定义控件(1)
  2. 基于Ubuntu Server 16.04 LTS版本安装和部署Django之(三):设置上传文件夹权限(这里测试用完全共享)
  3. 初步学习pg_control文件之七
  4. 3122 奶牛代理商 VIII(状压dp)
  5. echarts的pie图中,各区块颜色的调整
  6. c#根据ip获取城市地址
  7. AutoMapper.RegExtension 介绍
  8. IDEA的terminal设置成Linux的终端一样
  9. 在Code::Blocks中编译和使用wxWidgets3.0.0教程
  10. Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/xxx项目名]]