← 返回《人工智能数学基础》
📑 查看全课大纲(第 93 / 93 节)
  1. 1.概论和集合的定义
  2. 2.逼疯康托的实数集理论
  3. 3.常用不等式与映射
  4. 4.函数及特殊函数
  5. 5.序列极限的定义
  6. 6.序列极限的性质与夹逼定理
  7. 7.重要极限
  8. 8.无穷小量,无穷大量和一组重要的阶的比较关系
  9. 9.聚点原理
  10. 10.函数极限及其性质
  11. 11.重要极限与等价无穷小
  12. 12.连续函数
  13. 13.导数的概念(那些年,扛起牛顿的胡克)
  14. 14.定义法求导
  15. 15.函数四则运算的导数与反函数求导法则
  16. 16.复合函数,隐函数,参数式求导
  17. 17.不定式求导之“洛必达与伯努利的师生情”
  18. 18.一阶微分
  19. 19.高阶导数
  20. 20.高阶微分
  21. 21.罗尔中值定理与拉格朗日中值定理
  22. 22.柯西空降科学院遭排挤
  23. 23.泰勒公式与泰勒的克妻属性
  24. 24.利用泰勒展开唯一性定理计算泰勒展开
  25. 25.泰勒公式的余项估计
  26. 26.极值问题与导数
  27. 27.函数凹凸性
  28. 28.无卵用的渐近线与函数作图
  29. 29.不定积分的定义
  30. 30.第一换元法
  31. 31.第二换元法
  32. 32.分部积分法
  33. 33.有理式积分
  34. 34.三角替换
  35. 35.定积分的概念
  36. 36.定积分的性质与积分中值定理
  37. 37.变上限定积分
  38. 38.微积分基本定理之“高斯教你如何优雅地装逼”
  39. 39.定积分的换元法
  40. 40.奇偶函数与周期函数的定积分
  41. 41.曲线求长与不可求长曲线(海岸线居然算不出长度?)
  42. 42.旋转体体积
  43. 43.旋转体侧面积
  44. 44.极坐标下图形的面积(数学系常用表白曲线)
  45. 45.欧式空间
  46. 46.点列极限,开集与闭集
  47. 47.多元函数的定义
  48. 48.多元函数的极限
  49. 49.多元连续函数
  50. 50.一阶偏导数
  51. 51.高阶偏导数
  52. 52.全微分
  53. 53.方向导数与梯度
  54. 54.链式法则
  55. 55.一阶全微分形式的不变性与高阶微分
  56. 56.多元函数的泰勒公式
  57. 57.隐函数存在定理与逆映射存在定理
  58. 58.多元函数的极值
  59. 59.矩阵基础知识
  60. 60.行列式的定义与特殊矩阵的行列式
  61. 61.行列式的性质
  62. 62.行列式按k行展开
  63. 63.线性方程组初步与高斯消元法
  64. 64.齐次线性方程组与Cramer法则
  65. 65.线性空间
  66. 66.线性相关与线性无关
  67. 67.向量组的秩
  68. 68.矩阵的秩与线性方程组有解的充要条件
  69. 69.齐次线性方程组的解集结构
  70. 70.非齐次线性方程组解集结构
  71. 71.基与维数
  72. 72.矩阵的乘法
  73. 73.特殊矩阵
  74. 74.矩阵乘积的秩与行列式
  75. 75.矩阵的逆
  76. 76.正交矩阵
  77. 77.矩阵对角化与特征值特征向量
  78. 78.实对称矩阵对角化
  79. 79.二次型与正定矩阵
  80. 80.LU分解
  81. 81.Cholesky分解
  82. 82.SVD分解
  83. 83.线搜索
  84. 84.步长
  85. 85.最速下降法和牛顿法
  86. 86.共轭梯度法
  87. 87.拟牛顿法
  88. 88.无约束优化
  89. 89.若干知识点补充(一)
  90. 90.若干知识点补充(二)
  91. 91.凸优化问题
  92. 92.对偶问题(一)
  93. 93.对偶问题(二)

对偶问题(二)

约 32 分钟

📺 正在播放小象官方高清录播(支持倍速与清晰度调节)

对偶问题与最优性条件

小象实战讲义 · 人工智能数学基础

在上一节中,我们建立了原优化问题与对偶问题之间的联系,并引入了强对偶性的概念。强对偶性告诉我们,在某些条件下,原问题的最优值和对偶问题的最优值是相等的。然而,它并没有告诉我们如何找到这个最优值,或者如何判断一个解是否是最优的。本节将深入探讨这个问题,引入互补松弛条件KKT最优性条件,它们是判断和寻找最优解的关键工具。通过学习这些条件,你将掌握在凸优化问题中,如何通过求解一组方程来找到最优解,并理解对偶理论在支持向量机等经典机器学习算法中的核心应用。

💡 核心导读

本节你将掌握:

  1. 互补松弛条件:在强对偶性成立时,原问题与对偶问题最优解之间必须满足的乘积关系。
  2. KKT最优性条件:包含可行性、互补松弛和梯度条件在内的完整最优解判定条件组。
  3. 凸问题的特殊地位:理解为何KKT条件在凸优化问题中成为最优解的充要条件,从而为求解提供系统方法。
  4. 对偶问题的求解路径:学习如何通过先求解对偶问题,再回代求解原问题最优解的两步法。
  5. SVM中的应用实例:直观感受对偶理论与KKT条件在支持向量机算法中的关键作用。

1. 互补松弛条件的推导

我们考虑标准形式的优化问题: minimizef0(x)subject tofi(x)0,i=1,,mhj(x)=0,j=1,,p\begin{aligned} \text{minimize} \quad & f_0(x) \ \text{subject to} \quad & f_i(x) \leq 0, \quad i = 1, \ldots, m \ & h_j(x) = 0, \quad j = 1, \ldots, p \end{aligned} 其拉格朗日函数为: L(x,λ,ν)=f0(x)+i=1mλifi(x)+j=1pνjhj(x)L(x, \lambda, \nu) = f_0(x) + \sum_{i=1}^{m} \lambda_i f_i(x) + \sum_{j=1}^{p} \nu_j h_j(x) 其中 λi0\lambda_i \geq 0 为不等式约束对应的拉格朗日乘子,νj\nu_j 为等式约束对应的拉格朗日乘子。

假设强对偶性成立,即原问题最优值 pp^ 等于对偶问题最优值 dd^。令 xx^ 是原问题的一个最优解,(λ,ν)(\lambda^, \nu^*) 是对偶问题的一组最优解。

由强对偶性,我们有: f0(x)=p=d=g(λ,ν)f_0(x^) = p^ = d^* = g(\lambda^, \nu^) 其中 g(λ,ν)=infxL(x,λ,ν)g(\lambda, \nu) = \inf_{x} L(x, \lambda, \nu) 是对偶函数。

根据对偶函数的定义(下确界),对于任意 xx,有 g(λ,ν)L(x,λ,ν)g(\lambda^, \nu^) \leq L(x, \lambda^, \nu^)。特别地,取 x=xx = x^,得到: f0(x)=g(λ,ν)L(x,λ,ν)f_0(x^) = g(\lambda^, \nu^) \leq L(x^, \lambda^, \nu^) 另一方面,由于 xx^ 是原问题的可行解,满足 fi(x)0f_i(x^) \leq 0hj(x)=0h_j(x^) = 0,且 λi0\lambda_i^* \geq 0,因此: L(x,λ,ν)=f0(x)+i=1mλifi(x)0+j=1pνjhj(x)=0f0(x)L(x^, \lambda^, \nu^) = f_0(x^) + \underbrace{\sum_{i=1}^{m} \lambda_i^* f_i(x^)}{\leq 0} + \underbrace{\sum{j=1}^{p} \nu_j^ h_j(x^)}_{=0} \leq f_0(x^) 综合以上两个不等式,我们得到: f0(x)L(x,λ,ν)f0(x)f_0(x^) \leq L(x^, \lambda^, \nu^) \leq f_0(x^*) 这意味着所有不等号都必须取等号。由此可以推导出两个关键结论:

  1. 拉格朗日函数在 xx^* 处取极小值g(λ,ν)=L(x,λ,ν)g(\lambda^, \nu^) = L(x^, \lambda^, \nu^) 这表明 xx^ 是拉格朗日函数 L(x,λ,ν)L(x, \lambda^, \nu^)(在固定乘子下)的一个极小值点。

  2. 互补松弛条件: 由于 i=1mλifi(x)=0\sum_{i=1}^{m} \lambda_i^* f_i(x^) = 0,且每一项 λifi(x)0\lambda_i^f_i(x^) \leq 0(因为 λi0,fi(x)0\lambda_i^\geq 0, f_i(x^) \leq 0),要使得求和为零,必须每一项都为零: λifi(x)=0,i=1,,m\boxed{\lambda_i^f_i(x^) = 0, \quad i = 1, \ldots, m} 这个条件称为互补松弛条件。它意味着对于每个不等式约束,要么约束是“紧”的(fi(x)=0f_i(x^) = 0,即最优解落在约束边界上),要么对应的拉格朗日乘子为零(λi=0\lambda_i^* = 0,即该约束在最优解处不起作用)。

互补松弛条件是连接原问题最优解与对偶问题最优解的重要桥梁,也是KKT条件的重要组成部分。

2. KKT最优性条件

现在,我们假设目标函数 f0f_0 和约束函数 fif_i, hjh_j 都是可微的。结合上一节的推导,我们可以得到最优解必须满足的一系列条件。

2.1 KKT条件的组成

对于任意优化问题(不一定是凸的),如果强对偶性成立,且函数可微,那么任何一对原问题最优解 xx^ 和对偶问题最优解 (λ,ν)(\lambda^, \nu^*) 都必须满足以下KKT条件

  1. 原始可行性fi(x)0,i=1,,mhj(x)=0,j=1,,p\begin{aligned} f_i(x^) &\leq 0, \quad i = 1, \ldots, m \ h_j(x^) &= 0, \quad j = 1, \ldots, p \end{aligned}

  2. 对偶可行性λi0,i=1,,m\lambda_i^* \geq 0, \quad i = 1, \ldots, m

  3. 互补松弛条件λifi(x)=0,i=1,,m\lambda_i^* f_i(x^*) = 0, \quad i = 1, \ldots, m

  4. 梯度条件(平稳性): 由于 xx^L(x,λ,ν)L(x, \lambda^, \nu^) 的一个极小值点,在可微的假设下,该点处的梯度必须为零: f0(x)+i=1mλifi(x)+j=1pνjhj(x)=0\nabla f_0(x^) + \sum_{i=1}^{m} \lambda_i^* \nabla f_i(x^) + \sum_{j=1}^{p} \nu_j^ \nabla h_j(x^*) = 0

这四组条件合称为 Karush-Kuhn-Tucker (KKT) 条件

2.2 凸问题中KKT条件的特殊地位

KKT条件的重要性在凸优化问题中尤为突出。回忆一下,一个优化问题是凸的,如果 f0f_0 和所有 fif_i 是凸函数,且所有 hjh_j 是仿射函数。

对于凸优化问题,KKT条件的作用发生了质的变化:

  • 对于一般(非凸)问题:KKT条件只是最优解的必要条件。满足KKT条件的点(称为KKT点)不一定是最优解。
  • 对于凸问题:如果存在一组 (λ,ν)(\lambda^, \nu^) 使得 xx^* 满足KKT条件,并且斯莱特条件(或其它保证强对偶性成立的约束品性)成立,那么KKT条件就成为最优解的充分必要条件。即:

    xx^ 是原凸问题的最优解 当且仅当 存在 (λ,ν)(\lambda^, \nu^*) 使得KKT条件成立。

这个结论极其强大。它意味着对于许多凸优化问题,我们可以通过求解KKT条件对应的方程组来找到最优解。KKT条件将优化问题转化为一个(可能非线性的)方程组求解问题,这为算法设计提供了理论基础。

2.3 求解思路总结

综合强对偶性和KKT条件,我们得到了求解约束优化问题的两种主要思路:

思路一:直接求解KKT条件(适用于凸问题)

  1. 验证问题是凸优化问题,且满足斯莱特条件(保证强对偶性)。
  2. 写出完整的KKT条件(四个部分)。
  3. 求解这组方程和不等式,得到候选解 (x,λ,ν)(x^, \lambda^, \nu^*)
  4. 由于在凸问题下KKT条件是充要的,求得的 xx^* 即为原问题最优解。

思路二:通过对偶问题求解(更通用)

  1. 构造原问题的拉格朗日函数和对偶函数。
  2. 求解对偶问题,得到对偶最优解 (λ,ν)(\lambda^, \nu^) 和对偶最优值 dd^*
  3. 如果强对偶性成立(p=dp^* = d^),那么原问题最优解 xx^ 必然是拉格朗日函数 L(x,λ,ν)L(x, \lambda^, \nu^) 的极小值点。
  4. 通过求解 minxL(x,λ,ν)\min_x L(x, \lambda^, \nu^) 来恢复原问题最优解 xx^*。如果这个极小值点唯一,那么它就是原问题的唯一最优解。
import numpy as np
import sympy as sp

# 示例:利用KKT条件求解一个简单的凸优化问题
# 问题:minimize f(x) = (x - 4)^2, subject to x <= 1
# 这是一个凸问题(目标函数为凸二次函数,约束为线性)

# 定义符号变量
x = sp.symbols('x', real=True)
lam = sp.symbols('lam', real=True, nonnegative=True) # 拉格朗日乘子需非负

# 定义函数
f0 = (x - 4)**2          # 目标函数
g = x - 1                # 约束改写为 g(x)=x-1 <= 0(即x <= 1)

# 构造拉格朗日函数
L = f0 + lam * g

# KKT条件:
# 1. 原始可行性: g(x) <= 0 -> x - 1 <= 0
# 2. 对偶可行性: lam >= 0 (已通过符号定义保证)
# 3. 互补松弛: lam * g(x) = 0 -> lam * (x - 1) = 0
# 4. 梯度为零: dL/dx = 0

# 求解梯度条件
dL_dx = sp.diff(L, x)
print("梯度条件: dL/dx =", dL_dx, "= 0")

# 联立求解互补松弛条件和梯度条件
# 互补松弛条件意味着两种情况:lam = 0 或 x = 1
print("\n情况1: λ = 0")
sol_case1 = sp.solve([sp.Eq(dL_dx, 0), sp.Eq(lam, 0)], [x, lam], dict=True)
print("解:", sol_case1)
if sol_case1:
    x_val, lam_val = sol_case1[0][x], sol_case1[0][lam]
    print(f"  x = {x_val}, λ = {lam_val}, 检查原始可行性 g(x)={g.subs(x, x_val)} <= 0: {g.subs(x, x_val) <= 0}")

print("\n情况2: x = 1")
sol_case2 = sp.solve([sp.Eq(dL_dx, 0), sp.Eq(x, 1)], [x, lam], dict=True)
print("解:", sol_case2)
if sol_case2:
    x_val, lam_val = sol_case2[0][x], sol_case2[0][lam]
    print(f"  x = {x_val}, λ = {lam_val}, 检查对偶可行性 λ>=0: {lam_val >= 0}")

# 综合判断
print("\n结论分析:")
print("情况1的解 x=4, λ=0 满足所有KKT条件(g(4)=3>0,不满足原始可行性x<=1),因此不是可行解。")
print("情况2的解 x=1, λ=6 满足所有KKT条件:")
print("  原始可行性: g(1)=0 <= 0 ✓")
print("  对偶可行性: λ=6 >= 0 ✓")
print("  互补松弛: λ*g(1)=6*0=0 ✓")
print("  梯度为零: 2*(1-4)+6=0 ✓")
print("因此,原问题的最优解为 x* = 1,对应的拉格朗日乘子 λ* = 6。")
print("此时约束是‘紧’的(起作用),目标函数值 f0(1) = 9。")

3. 对偶理论在支持向量机中的应用

对偶理论和KKT条件在机器学习中有着广泛而深刻的应用,其中最经典的例子之一是支持向量机

支持向量机(SVM)的基本型(硬间隔)可以表述为以下凸二次规划问题: minw,b12w2s.t.yi(wxi+b)1,i=1,,n\begin{aligned} \min_{\mathbf{w}, b} \quad & \frac{1}{2} |\mathbf{w}|^2 \ \text{s.t.} \quad & y_i (\mathbf{w}^\top \mathbf{x}_i + b) \geq 1, \quad i=1,\ldots,n \end{aligned} 其中 yi{1,+1}y_i \in {-1, +1} 是样本标签。

直接求解原问题的困难在于,约束数量等于样本数 nn,当 nn 很大或特征维度很高时,求解效率可能较低。

通过对偶问题求解则可以带来诸多好处:

  1. 更易求解:原问题的对偶问题也是一个凸二次规划,但约束条件更简单(主要是对拉格朗日乘子 αi\alpha_i 的非负约束和一個线性等式约束)。
  2. 核函数引入:在对偶形式中,样本特征总是以内积 xixj\mathbf{x}_i^\top \mathbf{x}_j 的形式出现。这允许我们使用核函数 K(xi,xj)K(\mathbf{x}_i, \mathbf{x}_j) 替代内积,从而将线性SVM隐式地映射到高维特征空间,实现非线性分类,而无需显式计算高维映射。这是SVM的核心技巧。
  3. 解的解释性:根据KKT条件中的互补松弛条件: αi[yi(wxi+b)1]=0\alpha_i [y_i(\mathbf{w}^\top \mathbf{x}_i + b) - 1] = 0 这意味着,对于大多数样本,其对应的 αi=0\alpha_i = 0;只有那些满足 yi(wxi+b)=1y_i(\mathbf{w}^\top \mathbf{x}_i + b) = 1 的样本(即位于间隔边界上的样本),对应的 αi>0\alpha_i > 0。这些样本被称为支持向量,它们决定了最终的最优分类超平面。模型具有稀疏性。

因此,在实际的SVM算法实现中,几乎总是求解其对偶问题。这完美地诠释了对偶理论如何将一个看似复杂的原始优化问题,转化为一个更易处理、且能揭示问题深刻结构(支持向量、核方法)的对偶问题。

📝 动手练一练

  1. KKT条件验证:考虑优化问题 minxf(x)=x2\min_{x} f(x) = x^2,约束条件为 x2x \geq 2

    • a) 写出该问题的拉格朗日函数。
    • b) 写出完整的KKT条件。
    • c) 求解KKT条件,找出候选最优解 xx^ 和对应的拉格朗日乘子 λ\lambda^
    • d) 该问题是凸问题吗?求得的解是否是最优解?计算最优目标函数值。
  2. 互补松弛条件的理解:对于问题 minx,yx2+y2\min_{x, y} x^2 + y^2,约束为 x+y2x + y \geq 2x0x \geq 0

    • a) 直观判断最优解应在哪里取得?(提示:考虑目标函数的等高线和约束区域)
    • b) 在最优解处,两个不等式约束的拉格朗日乘子,哪个可能为0?哪个对应的约束是“紧”的(取等号)?试用互补松弛条件解释。

参考答案:

  1. KKT条件验证

    • a) 将约束写为 g(x)=2x0g(x)=2-x \leq 0,拉格朗日函数为 L(x,λ)=x2+λ(2x)L(x, \lambda) = x^2 + \lambda(2-x)
    • b) KKT条件:
      1. 原始可行性:2x02 - x \leq 0 (即 x2x \geq 2)
      2. 对偶可行性:λ0\lambda \geq 0
      3. 互补松弛:λ(2x)=0\lambda(2-x)=0
      4. 梯度为零:2xλ=02x - \lambda = 0
    • c) 求解:若 λ=0\lambda=0,由梯度条件得 x=0x=0,不满足 x2x\geq2。若 2x=02-x=0x=2x=2,代入梯度条件得 λ=40\lambda=4 \geq 0,满足所有条件。故候选解为 x=2,λ=4x^=2, \lambda^=4
    • d) 是凸问题(目标函数凸,约束线性)。KKT条件是充要条件,因此 x=2x^*=2 是最优解,最优值为 f(2)=4f(2)=4
  2. 互补松弛条件的理解

    • a) 目标函数是圆心在原点的圆,值越小半径越小。约束 x+y2x+y\geq2 是一条直线,x0x\geq0 是右半平面。最优解应在满足约束的前提下,尽可能靠近原点。直观上,最优解应在直线 x+y=2x+y=2 上,且 x>0x>0(因为如果 x=0x=0,则需 y=2y=2,距离原点更远)。
    • b) 在最优解 (1,1)(1,1) 处(可通过求解KKT条件得到),约束 x+y2x+y\geq2 是“紧”的(取等号),其乘子 λ1>0\lambda_1 > 0。约束 x0x\geq0 不是“紧”的(x=1>0x=1>0),根据互补松弛条件,其乘子 λ2\lambda_2 必须为0。这符合直观:第一个约束“推动”解到达边界,是起作用的约束;第二个约束在最优解处是松弛的,不起作用。

本章小结

本节我们深入了对偶理论的核心,从强对偶性前进到实际求解最优解的工具。

要点回顾

  • 互补松弛条件 λifi(x)=0\lambda_i^* f_i(x^*) = 0 是强对偶性成立时的必然结果,它清晰地刻画了最优解处约束的“活跃”状态。
  • KKT最优性条件 整合了原始/对偶可行性、互补松弛和梯度为零条件,为最优解提供了完整的刻画。
  • 凸问题的关键性:对于凸优化问题,在斯莱特条件等约束品性成立时,KKT条件从必要条件升级为充要条件,这使我们能通过求解KKT方程组来找到最优解。
  • 对偶求解路径:另一种强大的方法是先求解对偶问题,再利用最优乘子恢复原问题解。这在SVM等算法中被广泛使用,并能引出核技巧等创新。

行动清单

  1. 推导练习:任选一个简单的带不等式约束的凸优化问题(如本节代码示例),手动完整推导其KKT条件并求解,验证与代码结果一致。
  2. 概念对比:制作一个表格,对比“强对偶性”、“斯莱特条件”、“KKT条件”在“一般问题”和“凸问题”下的关系与作用。
  3. 拓展阅读:查找线性支持向量机(硬间隔)的原问题和对偶问题形式,尝试写出其KKT条件,并理解“支持向量”是如何从互补松弛条件中自然产生的。

— 小象教研组

🎁 免费学习资源

领取《小象 11GB VIP 课件资料包与大厂真题手册》

包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。

  • 完整 Python / 数据分析 Jupyter 实战源码
  • 大厂真实业务数据集与练习题
  • 微信扫码添加课程顾问,免费获取网盘下载链接
微信二维码:扫码添加课程顾问微信扫码添加顾问