拉格朗日对偶性
在约束优化问题中,常常用拉格朗日对偶性来将原始问题转为对偶问题,通过解对偶问题的解来得到原始问题的解。
1.为什么要利用对偶?
首先要明确,对偶问题的解不一定直接等于原问题的解(弱对偶),但是对偶问题有两点性质:
- 无论原始问题是否是凸的,对偶问题都是凸优化问题
- 当Lagrange对偶问题的强对偶性成立时,可以利用求解对偶问题来求解原问题;而原问题是凸优化问题时,强对偶性往往成立;弱对偶性永远成立,可以为原问题提供下界。
(1)原始问题
优化问题:
拉格朗日函数:
则原问题等价于:
推导:
- 当g不满足约束条件的时候,我们内层优化取max,因此
- 当g满足约束条件的时候,我们内层优化取max,因此
- 当h不满足约束条件的时候,同理可以取
- 当h满足约束条件的时候,同理可以取
为了使2-1达到优值,需要满足如下条件(KKT条件):
- 主问题可行:
- 对偶问题可行:
- 互补松弛:
主问题可行是上面推导的结果,对偶问题可行为2-1的约束项;互补松弛是主问题和对偶问题都可行的条件下的最大值。
原始问题求得的解为
(2)对偶问题
对偶问题是原问题的下界,即:
因为下式总是成立:
对偶问题求得的解为
对任意可能的值求极值,肯定不如直接求到的极值大。有句俗语叫“瘦死的骆驼比马大”说的就是这个道理。
- 弱对偶(),对于所有优化问题都成立,这个时候我们可以得到原始问题的一个下界。
- 强对偶(),满足某些条件才成立,这时可以用解对偶问题替代原始问题。那么满足什么样的条件可以得到强对偶呢?(如果原问题是一个凸优化,并且不等式约束是严格可行的,即存在对所有有$g_i(x)<0$,那么强对偶成立。这里需要注意的是,这里的条件只是强对偶成立的一种情况,对于非凸的问题也有可能是强对偶。)
如果原问题是一个凸优化,并且不等式约束$g(x)$是严格可行的,即存在$x$对所有$i$有$gi(x)<0$,那么强对偶成立。这里需要注意的是,这里的条件只是强对偶成立的一种情况,对于非凸的问题也有可能是强对偶。强对偶成立时,将拉格朗日函数分别对原变量和对偶变量和分别求导,令导数等于零(还需要满足KKT条件),即可求解对偶问题的解,也就求得了原问题的解。
强对偶成立的条件:Slater条件
Slater定理:当Slater条件成立且原问题是凸优化问题时,强对偶成立。
满足强对偶性的例子:
- 线性规划
- 最小二乘
- 最大熵问题
(3)KKT条件
当Lagrange对偶问题的强对偶性成立时,可以利用求解对偶问题来求解原问题;而原问题是凸优化问题时,强对偶性往往成立。否则,可以利用求解对偶问题求出原问题最优值的下界。
(鞍点就满足KKT,但鞍点就不是最优解))
当原问题只有等式约束而没有不等式约束时,KKT条件即为拉格朗日乘数法。
(4)KKT与凸优化的关系
KKT主要是针对带约束的可微分的优化问题,凸优化研究的对象是目标函数为凸函数,约束为凸集的优化问题。因此这两者研究的对象,有交集,也各有不同。
凸优化:
- 第一类问题为两类问题的交集即带约束的可微分凸优化问题,这类问题目前已经被很好的解决了,它同时具备两类问题的性质,凸优化和可微分性,让原来KKT从局部最优解的必要条件变为全局最优解的充要条件。
- 第二类问题是凸优化但是不可微分,这类问题也较为常见,在拉格朗日松弛算法中,对偶问题一般都是不可微分的凸优化问题,因为不可微分,传统的基于梯度的方法就不适用了,一般采用次梯度的方法,主要难点在于次梯度如何确定,由于次梯度不唯一,如何确定一个简单有效的次梯度也是一个问题。
- 第三类问题是可微分的但不是凸优化的,这类问题也很多,一般这类问题都可以采用基于梯度的算法来求解,例如对神经网络的训练多数就属于这类问题。采用梯度法仅仅能保证收敛到局部最优的必要条件而已。因此该类问题的受困于陷入鞍点和全局最优的寻找是很困难的。
非凸优化:非凸且不可微分
参考文献:
【1】『我爱机器学习』深入理解SVM(一) 原始问题和对偶问题
【2】优化问题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现