Primal vs Dual
为什么要把原始问题(primal) 转为 对偶问题(dual), 主要原因在于, 求解方便吧大概.
对偶问题
- 原始问题和其对偶问题, 都是对看待同一个问题的,从不同角度, 例如求解一个最小化问题, 然后通过对偶形式求解最大化问题等.
- 原问题不好求解, 转为对偶问题, 有一种类似逼近的思想, 比如拉格朗日 或是 泰勒级数展开
既然是对于同一个问题的不同角度来看, 假设就两个角度: primal 和 dual. 假设, 在primal 即原始问题下的最优解为 p∗, 在其dual的角度下, 最优解为 d∗则有
- p* = d* (Strong duality), 强对偶, 比如SVM 的KKT条件
- p* != d* (Week duality)
从primal 转为 dual, 可以通过 拉格朗日乘子来实现.
Lower bound property
结论: p >= d**
Standard Form:
minmize f0(x)s.t.fi(x)<=0,i=1,2,..mhj(x)=0,j=1,2...p
通过拉格朗日乘子(将约束转为无约束求极值)
why 拉格朗日乘子法?
-
回顾多元函数求条件极值的思路(高数),
-
假设2维, 曲线g(x,y) = 0 与f(x,y) =Ck, 的等值线(面) 相交, 那么沿着g(x,y)=0的方向两头向曲点靠近, 必然一个方向使得f(x,y)=Ck增大, 而另一个方向使CK减少, 必然在g(x,y)上存在一点使得Ck最小. 而这个点就是f(x,y)=a 与g(x,y)=0 相切的点, 切点处的两个法向量(梯度向量) 是平行的
-
即: 在切点的法向量(梯度方向) 是平行的 (相乘λ 倍常数, λ>0)
假设切点是 (x0,y0), 根据f(x,y), g(x,y) 在该处的梯度是平行的, 即
∇f(x0,y0)=(fx(x0,y0),fy(x0,y0))∇g(x0,y0)=(gx(x0,y0),gy(x0,y0))
由∇f(x0,y0)//∇g(x0,y0)得∇f(x0,y0)∇g(x0,y0)=−λ0因此得出:
fx(x0,y0)+λ0 gx(x0,y0))=0fy(x0,y0)+λ0 gy(x0,y0))=0g(x0,y0)=0
由此将条件极值问题通过拉格朗日乘子,转为了求解方程组的问题.
为了求解,引入一个辅助函数 L(x,y,λ)=f(x,y)+λ g(x,y)
- 这个函数称为拉格朗日函数, λ 称为拉格朗日乘子
- 可微函数去极值的必要条件是梯度向量等于零
即: ∇L(x0,y0,λ0)=0, 恰好对应上面的方程组, 巧了吗, 这不是.
(ps, 当然也可以通过分析方法隐函数相关知识来推导出, 这里不展开了).
通过拉格朗日, 将primal 转为dual 即
L(x,λ,ν)=f0(x)+∑mi=1λifi(x)+∑pi=1νihi(x)
转为拉格朗日的 dual 函数形式即:
g(λ,ν)=infimumxL(x,λ,ν), inf..表示下界
=infx[f0(x)+∑mi=1λifi(x)+∑pi=1νihi(x)]
即所谓的 lower bound property:
即: g(λ,ν)<=p∗=f0(x∗)←∀λ,ν (此乃最为关键一环),
这种思想就是: min primal⇌max dual
证明如下:
minmize f0(x)s.t.fi(x)<=0,i=1,2,..mhj(x)=0,j=1,2...p
假设 x' 是primal 问题的可行解, 即:
L(x′,λ,ν)=f0(x′)+∑mi=1λifi(x′)+∑pi=1νihi(x′) , 则必然有
f0(x′)>=L(x′,λ,ν)>=infx(x,λ,ν)=g(λ,ν) (可证: g(λ,ν)是一个凹函数"∩"这样的 )
- ∑mi=1λifi(x′)<=0, 因为x'是可行解, 满足约束条件
- ∑pi=1νihi(x′)=0, 同样因为约束条件
即证: f0(x′)>=g(λ,ν),即:p∗>=d∗
case1: Least Norm Minimization
min xTxs.t. Ax=b
解:
引入拉格朗日函数:
L(x,λ)=xTx+λT(Ax−b)首先来"固定"x:∇xL(x,λ)=0=2x+ATλ得出x=−12ATλ代入
g(λ)=infx[xTx+λT(Ax−b)]=(−12ATλ)T(−12ATλ)+λT[A(−12ATλ)−b]
=14λTAATλ−12λTAATλ−λTb
=−14λTAATλ−λTb
即: p∗>=−14λTAATλ−λTb
即对应的dual:
max z=−14λTAATλ−λTbs.t...
case2: Linear Programing
min wTxs.t.Ax=bx≻=0
先进行标准化得到:
min wTxs.t.Ax=b−x<=0
引入拉格朗日函数得:
L(x,λ,ν)=wTx+λT(Ax−b)+νT(−x)
=wTx+λTAx−λTb−νTx
=(w+ATλ−ν)x−λTb
同样首先"固定x:"
∇xL(x,λ,ν)=0=w+ATλ−v得出:x好像不影响哦
将不影响的x 代入g得到:
g(λ,ν)=infx(−λTb)
即对应的 daul:
max −λTbs.t. w+ATλ−ν=0
发现 ν>0 其实跟木目标函数无关, 即可转为:
max −νTbs.t. w+AT>=0
Strong and Weak duality
由上, 关于primal 问题和 dual 问题, 如果其最优解分别是 p* 和 d* ,
根据 lower bound property 的推导则有**p * >= d * ** :
-
if p* = d*, 则称为强对偶
-
if p* < d*, 则称为弱对偶
强对偶(strong) ,一般情况下不会发生, 在凸函数下一般会成立; 对于non-convex 有时是会成立的. 针对于convex 判断其是强对偶的条件称为:
slater's condtions
即: minmize f0(x)s.t.fi(x)<=0,i=1,2,..mhj(x)=0,j=1,2...p
∃ x′,fi(x′)<0,hj(x′)=0
则称满足 slater's conditons, 可判定该凸函数是强对偶的哦.
complementary slackness
暂时我也不知道该怎么进行翻译, "松弛条件?", 感觉也不大合理. 算了, 就英文吧, 反正都是一个符号而已. 假设, 我们来来*考虑强对偶的情况下(p * = d ):
- x* 是 primal 问题的解
- λ∗,ν∗ 是dual 问题的解
minmize f0(x)s.t.fi(x)<=0,i=1,2,..mhj(x)=0,j=1,2...p
即有
f0(x∗)=g(λ∗,ν∗)对于infx[f0(x)+∑mi=1λ∗ifi(x)+∑pi=1ν∗ihi(x)]
必然:
<=infx[f0(x∗)+∑mi=1λ∗ifi(x∗)+∑pi=1ν∗ihi(x∗)]
- hi(x∗)=0
- λ∗fi(x∗)<=0
<=f0(x∗)
这就发现有点矛盾(= 和 <=)了, 要使不等式成立的话, 发现只能取等于哦, 即:
λ∗fi(x∗)=0, 这样也就意味着2种情况:
- λ∗=0, 然后λ∗fi(x∗)<=0
- λ∗>0, 然后λ∗fi(x∗)=0
把这个条件: λ∗fi(x∗)=0 就称为 complementary slackness, 它是构成KKT条件的一部分, 后面再整一波KKT吧.
耐心和恒心, 总会获得回报的.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通