简单总结拉格朗日乘数法

拉格朗日乘数法: 将会介绍下面的概念以及对应关系。

  1. 拉格朗日对偶问题
  2. 凸集 凸函数、
  3. 凹函数
  4. 凸优化
  5. 弱对偶、
  6. 强对偶
  7. KKT条件
  8. Slater条件
  9. 最大熵

将会了解到L1和L2是一个特殊的朗格朗日函数。

将会了解到 拉格朗日乘数法本质上就是一个求解最值问题的方法(传统函数求最值-求导或者求梯度,求导取极值点即可,拉格朗日乘数法加了约束条件)。

1 背景介绍

如何求解带约束的函数最值问题?通过朗格朗日法可以知道,对原来公式进行变形或者重写,只需重写一个新式子即可(然后使用求导,求梯度方法),计算出最值。

科学家已经证明,求原来函数的最值,和朗格朗日函数的最值是一致的。二者等价。

那背后的原理或者思想是什么呢?为什么二者等价。

其核心关键就是梯度为0,即什么时候存在最值?当朗格朗日函数的整体梯度为0时,出现最值。那朗格朗日函数的整体梯度为0时,会出现什么情况?

由上面式子可知,当2个梯度的和为0时,整体梯度为0。则就要求原函数图像与条件函数的梯度出现等大反向共线时才能满足

所以这里的朗格朗日乘数,改变了条件函数的梯度(向量)长度。

这里的g(x)表示约束条件。上面可以表示为一般朗格朗日函数形式。

蓝色线表示原函数图像,黄色线表示条件函数图像。当二者出现相切时,才满足整体梯度为0,此时出现最值。

多个约束情况:


2凸集 凸函数

凸集:集合内任意两点的连线仍在集合内。

作用:凸优化问题有非常好的性质(局部最优 = 全局最优)。

凸函数:

f(θx+(1−θ)y) ≤ θf(x)+(1−θ)f(y)

几何意义:函数图像在弦的下方。

例:函数 x^2

, e^x

, log(1+e^x )等等。

几何意义:函数图像在弦的下方。

凹函数

与凸函数相反:

f(θx+(1−θ)y) ≥ θf(x)+(1−θ)f(y)

即:负凸函数。

在对偶问题中,对偶函数

min L(x,λ,ν) 一定是凹函数(无论原问题是否凸)。

  • 可行域是凸集
  • 任何局部最优解 → 全局最优解

凸函数和凹函数对应值域都是凸集,只是凸函数有最小值,凹函数有最大值。一般求解凹函数都是添加一个负号,变成凸问题,求解它的最小值。二者可以进行变化。

3凸优化

4对偶


对偶函数一定是凹函数,是凸优化问题。

也就是无论遇到什么问题,都可以先找到它的对偶问题,根据对偶问题性质,他是凹函数,可以进行凸优化的方法来解决

原问题的解是P*

对偶问题的解是D*

原问题的解 >= 对偶问题的解

那什么情况 :原问题的解 = 对偶问题的解


原问题的解是P* 》 对偶问题的解是D* 为弱对偶关系

原问题的解是P* = 对偶问题的解是D* 为强对偶关系,即下面这个图:

一个凸优化问题,什么情况满足强对偶关系,必须满足slater条件。

5slater条件

只有满足了slater条件,一个凸优化问题,才是强对偶关系。

x在可行域的内部,不能在边界。即把等于0情况排查。

slater条件是强对偶关系的充分条件。一个凸优化问题满足了slater条件,一定是强对偶关系。

反过来就不一定了,一个强对偶关系的问题,不一定满足slater条件。

6KKT条件

故引出了KKT条件,科学家发现""只要满足了KKT条件,一定是强对偶关系,反过来不一定成立。

满足下面5个条件:则说明满足KKT条件。



KKT 是 Karush--Kuhn--Tucker 的缩写。

这三个名字分别对应三位数学家:

缩写 全名 贡献

K William Karush 1939 年在硕士论文中首次提出条件

K Harold W. Kuhn 1951 年与 Tucker 共同重新发现并推广

T Albert W. Tucker 同上

为什么叫 KKT 而不是 KT?

因为 Karush 最早发现(1939 年),但论文未受关注。

Kuhn 和 Tucker 于 1951 年独立重新发现后,条件才被广泛认知。

为了尊重原始贡献者,后人将 Karush 的名字加入,形成 KKT。

KKT包含了3个类型条件:
1 原问题可行条件
2 对偶问题可行条件
3 互补松弛条件。

7最大熵问题

上述为凸优化问题。求最大熵的时候,去求解他的对偶问题即可。

lanbma可以最后通过人为学习计算,即最后进行调参优化。

8极大似然估计与最大熵

左边是最大熵问题

右边是极大似然估计

左边和右边等价。

原因在于,左边最大熵问题是对偶问题,一定是凸优化问题,一定是一个凹函数。

对应的,右边极大似然估计一定是一个凹函数,极大似然估计和交叉熵方法是等价的。交叉熵方法凸函数

相关推荐
hi_ro_a2 小时前
C++ 手撕 STL 底层:红黑树封装 mymap/myset
数据结构·c++·算法
tankeven2 小时前
贪心算法(Greedy Algorithm)详解:从理论到C++实践
c++·算法
Hesionberger2 小时前
LeetCode72.编辑距离(多维动态规划)
java·开发语言·c++·python·算法
lwf0061642 小时前
逻辑回归学习笔记-梯度下降求解回归方程
算法·机器学习·逻辑回归
人道领域2 小时前
【LeetCode刷题日记】1047:双栈法与双指针法巧妙消除相邻重复字符
java·算法·leetcode·职场和发展
切糕师学AI2 小时前
布隆过滤器(Bloom Filter)技术详解
数学·算法
礼拜天没时间.2 小时前
力扣热题100实战 | 第33期:搜索旋转排序数组——二分查找的变体艺术
算法·leetcode·职场和发展·旋转数组·搜索旋转排序数组
Jenlybein2 小时前
用 uv 替代 conda,速度飙升(从 0 到 1 开始使用 uv)
后端·python·算法
400分2 小时前
LangChain 与大模型技术全链路详解
算法·架构