📑 查看全课大纲(第 90 / 93 节)
- 1.概论和集合的定义
- 2.逼疯康托的实数集理论
- 3.常用不等式与映射
- 4.函数及特殊函数
- 5.序列极限的定义
- 6.序列极限的性质与夹逼定理
- 7.重要极限
- 8.无穷小量,无穷大量和一组重要的阶的比较关系
- 9.聚点原理
- 10.函数极限及其性质
- 11.重要极限与等价无穷小
- 12.连续函数
- 13.导数的概念(那些年,扛起牛顿的胡克)
- 14.定义法求导
- 15.函数四则运算的导数与反函数求导法则
- 16.复合函数,隐函数,参数式求导
- 17.不定式求导之“洛必达与伯努利的师生情”
- 18.一阶微分
- 19.高阶导数
- 20.高阶微分
- 21.罗尔中值定理与拉格朗日中值定理
- 22.柯西空降科学院遭排挤
- 23.泰勒公式与泰勒的克妻属性
- 24.利用泰勒展开唯一性定理计算泰勒展开
- 25.泰勒公式的余项估计
- 26.极值问题与导数
- 27.函数凹凸性
- 28.无卵用的渐近线与函数作图
- 29.不定积分的定义
- 30.第一换元法
- 31.第二换元法
- 32.分部积分法
- 33.有理式积分
- 34.三角替换
- 35.定积分的概念
- 36.定积分的性质与积分中值定理
- 37.变上限定积分
- 38.微积分基本定理之“高斯教你如何优雅地装逼”
- 39.定积分的换元法
- 40.奇偶函数与周期函数的定积分
- 41.曲线求长与不可求长曲线(海岸线居然算不出长度?)
- 42.旋转体体积
- 43.旋转体侧面积
- 44.极坐标下图形的面积(数学系常用表白曲线)
- 45.欧式空间
- 46.点列极限,开集与闭集
- 47.多元函数的定义
- 48.多元函数的极限
- 49.多元连续函数
- 50.一阶偏导数
- 51.高阶偏导数
- 52.全微分
- 53.方向导数与梯度
- 54.链式法则
- 55.一阶全微分形式的不变性与高阶微分
- 56.多元函数的泰勒公式
- 57.隐函数存在定理与逆映射存在定理
- 58.多元函数的极值
- 59.矩阵基础知识
- 60.行列式的定义与特殊矩阵的行列式
- 61.行列式的性质
- 62.行列式按k行展开
- 63.线性方程组初步与高斯消元法
- 64.齐次线性方程组与Cramer法则
- 65.线性空间
- 66.线性相关与线性无关
- 67.向量组的秩
- 68.矩阵的秩与线性方程组有解的充要条件
- 69.齐次线性方程组的解集结构
- 70.非齐次线性方程组解集结构
- 71.基与维数
- 72.矩阵的乘法
- 73.特殊矩阵
- 74.矩阵乘积的秩与行列式
- 75.矩阵的逆
- 76.正交矩阵
- 77.矩阵对角化与特征值特征向量
- 78.实对称矩阵对角化
- 79.二次型与正定矩阵
- 80.LU分解
- 81.Cholesky分解
- 82.SVD分解
- 83.线搜索
- 84.步长
- 85.最速下降法和牛顿法
- 86.共轭梯度法
- 87.拟牛顿法
- 88.无约束优化
- 89.若干知识点补充(一)
- 90.若干知识点补充(二)
- 91.凸优化问题
- 92.对偶问题(一)
- 93.对偶问题(二)
若干知识点补充(二)
约 23 分钟
共轭函数、凸集与凸函数
小象实战讲义 · 人工智能数学基础
在优化理论与机器学习中,我们经常需要处理复杂的函数和集合。为了更有效地分析和求解最优化问题,数学家们引入了一些结构良好的数学对象。本节将介绍三个核心概念:共轭函数、凸集与凸函数。理解它们不仅有助于我们洞察优化问题的几何本质,更是掌握后续对偶理论、凸优化等高级内容的关键基石。学完本节,你将能够定义并识别凸集与凸函数,理解共轭函数的构造与意义,并掌握证明函数凸性的基本方法。
💡 核心导读
本节将构建从基础定义到实际应用的知识地图:
- 共轭函数:学习如何通过”取上确界”的操作,从一个(可能非凸的)函数构造出一个新的凸函数,理解其几何意义及其与后续拉格朗日对偶的联系。
- 凸集:掌握凸集的严格数学定义与直观几何解释,学会判断一个集合是否为凸集,并了解其与仿射集、凸组合等概念的关系。
- 凸函数:深入理解凸函数的定义式(Jensen不等式)及其两种几何解释(切线在下、弦在上)。这是判断函数凸性的根本依据。
- 凸性判定:掌握两种最实用的凸函数判定方法:一是将其转化为一元函数进行验证;二是通过计算并判断其Hessian矩阵(黑塞矩阵)是否半正定。
- 实例演练:以逻辑回归的损失函数为例,完整演示两种判定凸函数的方法,将理论应用于机器学习中的经典模型。
共轭函数
定义与几何解释
设函数 ,我们定义其共轭函数 : \mathbb{R}^n \to \mathbb{R} 为: (y) = \sup_{x \in \text{dom} f} \left( y^T x - f(x) \right) 其中, 是 的定义域, 表示上确界。
理解要点:
- 变量:表达式 是一个关于 维变量 的函数。
- 操作:对固定的 ,我们在 的定义域内寻找使 最大的 (即取上确界)。这个操作”消去”了变量 ,最终结果 仅是 的函数。
- 几何意义(一元情形):当 时, 退化为 ,即一条过原点、斜率为 的直线。(y) 就是这条直线与函数 图像之间,在竖直方向上的最大差值。对于给定的斜率 ,(y) 等于直线 与曲线 之间的最大垂直距离。
重要性质
- 凸性:无论原函数 是否为凸函数,其共轭函数 一定是凸函数。这是因为 (y) 是一系列关于 的仿射函数 (每个 对应一个)的上确界,而仿射函数是凸函数,凸函数的上确界仍是凸函数。
- 可微情形下的极值点:如果 可微,那么使 达到上确界的 满足一阶最优性条件。对 求导并令其为零: 即最优解 满足 。这意味着,在可微的情况下,共轭函数在 处的值,是由梯度等于 的那些点 所决定的。
示例:二次函数的共轭
考虑严格凸的二次函数 ,其中 是对称正定矩阵。求其共轭函数 。
求解过程: 根据定义,。
- 对于固定的 ,括号内的函数关于 是凹的二次函数(因为 负定)。其最大值在梯度为零的点取得。
- 计算梯度并令其为零: 解得 。
- 将最优解 代回原表达式: (y) &= y^T (Q^{-1} y) - \frac{1}{2} (Q^{-1} y)^T Q (Q^{-1} y) \ &= y^T Q^{-1} y - \frac{1}{2} y^T Q^{-1} Q Q^{-1} y \ &= y^T Q^{-1} y - \frac{1}{2} y^T Q^{-1} y \ &= \frac{1}{2} y^T Q^{-1} y. \end{aligned} 因此,严格凸二次函数 的共轭函数是另一个二次函数 (y) = \frac{1}{2} y^T Q^{-1} y。
import numpy as np
# 定义对称正定矩阵Q
np.random.seed(42)
A = np.random.randn(3, 3)
Q = A.T @ A + np.eye(3) * 0.1 # 确保正定
# 定义原函数 f(x) = 0.5 * x^T Q x
def f(x, Q):
return 0.5 * x.T @ Q @ x
# 定义其共轭函数 f*(y) = 0.5 * y^T Q^{-1} y
def f_star(y, Q):
Q_inv = np.linalg.inv(Q)
return 0.5 * y.T @ Q_inv @ y
# 验证共轭关系:对于随机y,计算 sup_x (y^T x - f(x))
y = np.array([1.0, -0.5, 2.0])
# 根据理论,最优 x = Q^{-1} y
x_opt = np.linalg.solve(Q, y) # 等价于 Q^{-1} y
# 计算 f*(y) 的理论值
theory_value = f_star(y, Q)
# 通过数值优化验证(使用梯度为零的条件,这里直接代入最优解)
numerical_value = y @ x_opt - f(x_opt, Q)
print(f"理论计算的共轭函数值 f*(y): {theory_value:.6f}")
print(f"代入最优x计算的 y^T x - f(x): {numerical_value:.6f}")
print(f"两者是否接近: {np.isclose(theory_value, numerical_value)}")凸集
定义
集合 称为凸集,如果对于任意 和任意标量 ,都有: 这个点 称为 和 的凸组合。
几何解释
凸集的定义意味着:连接集合中任意两点的线段整个都包含在该集合之内。这是判断一个集合是否为凸集最直观的方法。
示例:
- 凸集:实心圆、实心球、整个空间 、超平面、半空间。
- 非凸集:空心圆(不含内部)、星形、有凹痕的多边形。因为总能在其中找到两点,使得它们之间的部分线段落在集合外部。
相关概念:仿射集、凸组合与仿射组合
- 仿射集:如果集合 满足:对于任意 和任意标量 ,都有 ,则 称为仿射集。与凸集定义相比,它将 的取值范围从 扩大到全体实数 ,要求在更大的范围上成立,约束更严格。几何上,仿射集包含通过其中任意两点的整条直线。仿射集是凸集的特例(满足仿射集定义的集合一定是凸集,但凸集不一定是仿射集)。
- 凸组合:点 的一个凸组合是指形如 的点,其中系数 且 。
- 仿射组合:点 的一个仿射组合是指形如 的点,其中系数 且 。仿射组合对系数没有非负要求。
凸集的一个重要性质是:凸集包含其中任意有限个点的所有凸组合。
凸函数
定义
设 是一个凸集,函数 。如果对于任意 和任意 ,都有: 则称 是 上的一个凸函数。如果不等式对于 和 严格成立(即 ),则称 是严格凸函数。
这个不等式称为 Jensen 不等式,是凸函数最本质的定义。
几何解释
- 弦在上方:对于定义域内任意两点 和 ,连接这两点的弦(线段)始终位于函数图像的上方(或之上)。
- 切线在下方(可微函数):如果 是可微的凸函数,那么函数图像在其定义域内任意一点处的切线(或切平面)都在该点处位于图像的下方(或之上)。
凹函数:如果将定义中的不等式符号反向(),则称 为凹函数。显然, 是凸函数当且仅当 是凹函数。
凸函数的判定定理(等价定义)
对于二次连续可微()的函数 ,以下命题等价,它们提供了判定凸函数的有力工具:
- 是凸函数。
- 对任意 ,一元函数 在 上是凸的。
- (一阶条件)对任意 ,有 。
- (梯度单调性)对任意 ,有 。
- (二阶条件)对任意 ,Hessian 矩阵 是半正定的,即对任意 ,有 。
最常用的判定方法:
- 方法一(定理第2条):将多元函数的凸性判定,转化为验证一个相关的一元函数 的凸性。这通常通过计算 来实现。
- 方法二(定理第5条):计算函数的 Hessian 矩阵,并验证其在整个定义域内是半正定的。这是多元函数凸性判定的直接方法。
凸函数的运算性质
以下性质可以帮助我们构造新的凸函数:
- 非负加权和:若 是凸函数,,则 也是凸函数。
- 仿射变换:若 是凸函数,则 也是凸函数(在适当的定义域上)。
- 逐点最大值:若 是凸函数,则 也是凸函数。
实例:逻辑回归损失函数的凸性证明
逻辑回归模型中,常需要最小化负对数似然函数(即损失函数)。对于二分类问题,该函数形式为: 其中 是 sigmoid 函数, 是标签, 是特征向量。
为简化记号,令 ,,则 。损失函数简化为: 下面证明 是关于 的凸函数。
证明方法一:转化为一元函数 任取 ,定义一元函数: 只需证明 在 上是凸函数,即 。 经过计算(过程略),可得: 其中 。由于平方项和非负指数项,上式求和中的每一项都 ,因此 。故 凸,从而 凸。
证明方法二:验证 Hessian 矩阵半正定 计算 的梯度与 Hessian 矩阵。 梯度: i. Hessian 矩阵: {i=1}^N \sigma(W^T \tilde{x}_i) (1 - \sigma(W^T \tilde{x}_i)) \tilde{x}_i \tilde{x}i^T. 对于任意向量 ,有: {i=1}^N \underbrace{\sigma(W^T \tilde{x}_i) (1 - \sigma(W^T \tilde{x}i))}{>0} \underbrace{(\tilde{x}i^T v)^2}{\ge 0} \ge 0. 因此, 是半正定矩阵,根据判定定理, 是凸函数。
import numpy as np
# 数值验证逻辑回归损失函数的Hessian矩阵半正定性(以2维特征为例)
# 直接按上文推导的公式 ∇²J(W) = Σ σ(W^T x_i)(1-σ(W^T x_i)) x_i x_i^T 累加计算
p = 2 # W的维度,对应 omega (1维) + b
N = 3 # 样本数
np.random.seed(123)
X_tilde = np.random.randn(N, p) # 每行是一个样本的 \tilde{x}_i^T
def sigma(z):
return 1 / (1 + np.exp(-z))
def hessian(W):
"""按公式 ∇²J(W) = Σ σ(W^T x_i)(1-σ(W^T x_i)) x_i x_i^T 累加计算"""
H = np.zeros((p, p))
for i in range(N):
xi = X_tilde[i, :]
s = sigma(W @ xi)
H += s * (1 - s) * np.outer(xi, xi)
return H
# 随机取一个 W 值,计算 Hessian 矩阵并检查特征值
W_val = np.array([0.5, -0.2])
H_num = hessian(W_val)
print("在 W =", W_val, "处,Hessian矩阵为:")
print(H_num)
eigenvalues = np.linalg.eigvals(H_num)
print(f"\nHessian矩阵的特征值: {eigenvalues}")
print(f"所有特征值是否均 >= 0? {np.all(eigenvalues >= -1e-10)}") # 考虑数值误差
# 再随机取若干向量 v,验证二次型 v^T H v >= 0(与上文推导一致:它是若干非负项的和)
for k in range(3):
v = np.random.randn(p)
print(f"随机向量 v{k} 的二次型 v^T H v = {v @ H_num @ v:.6f}")📝 动手练一练
凸集判断:判断下列 中的集合是否为凸集,并简述理由。 a) b) c)
凸函数判定:利用凸函数的判定定理(二阶条件),判断函数 是否为凸函数。
参考答案:
a) 是凸集。 是以原点为圆心、半径为2的闭圆盘。连接圆盘内任意两点的线段必然完全落在圆盘内。 b) 是凸集。任取 (即 )及 。凸组合的两个坐标显然均为正,其乘积满足: 故凸组合仍在 中。注意: 本身不是凸函数(其 Hessian 矩阵 不定),因此不能套用”凸函数的上水平集是凸集”来论证,需要直接按定义验证。 c) 是凸集。 可以写成 ,即两个半空间的交集。半空间是凸集,凸集的交集仍是凸集。
计算 的 Hessian 矩阵。 判断 是否半正定。利用顺序主子式:
- 一阶主子式:。
- 行列式:。 当 ,即 时,,矩阵半正定。但当 时,,矩阵不定。 因此,函数 在整个 上不是凸函数,因为其 Hessian 矩阵在 足够小时不是半正定的。
本章小结
本节系统介绍了优化理论中的三个基础而重要的概念:
- 共轭函数:通过取上确界从原函数构造出的新函数,具有天然的凸性,是联系原问题与对偶问题的桥梁。
- 凸集:包含其中任意两点连线的集合,具有良好的几何性质,是定义凸函数的舞台。
- 凸函数:满足 Jensen 不等式的函数,其图像具有”弦在上方”或”切线在下方”的几何特征。凸函数的局部极小值即全局最小值,这一性质使得凸优化问题在理论上和计算上都非常友好。
行动清单
- 可视化理解:在纸上或使用绘图工具,画出几个凸集和非凸集的例子,画出凸函数(如 )和凹函数(如 )的图像,直观感受其几何特征。
- 判定练习:从你熟悉的函数(如线性函数、二次函数、指数函数、对数函数)中挑选几个,尝试使用二阶条件(计算 Hessian 矩阵)判断其凸性。
- 代码验证:运行讲义中的 Python 代码示例,理解共轭函数的计算过程以及如何使用符号计算或数值计算来验证函数的凸性,并尝试修改参数或函数形式进行探索。
— 小象教研组
领取《小象 11GB VIP 课件资料包与大厂真题手册》
包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。
- ✔完整 Python / 数据分析 Jupyter 实战源码
- ✔大厂真实业务数据集与练习题
- ✔微信扫码添加课程顾问,免费获取网盘下载链接
微信扫码添加顾问