扩展:凸分析基础
在线 Notebook
对应的交互式版本可在 Google Colab 打开,统一使用方式见 第0章说明。
难度: 高级
前置知识: 线性代数、微积分、优化基础(第2章)
为什么需要凸分析
在优化问题中,凸性是一个关键性质:
- 凸优化问题有全局最优解,易于求解
- 非凸优化问题可能有多个局部最优解,难以求解
- 深度学习中的大多数问题都是非凸的,但理解凸性有助于理解优化的局限性
凸集
定义
凸集:如果对于集合中的任意两点
几何意义:集合中任意两点的连线都在集合内。
例子
凸集:
- 球体:
- 超平面:
- 半空间:
- 多面体:线性不等式的交集
非凸集:
- 圆环(中间有洞)
- 新月形
凸集的运算
| 运算 | 结果 |
|---|---|
| 交集 | 凸集 ∩ 凸集 = 凸集 |
| 并集 | 凸集 ∪ 凸集 ≠ 一定凸 |
| 仿射变换 |
凸函数
定义
凸函数:对于凸集上的函数
对所有
几何意义:函数图像上任意两点的连线都在函数图像上方。
凹函数
凹函数:不等号反向的凸函数。
判断凸性
一阶条件:如果
二阶条件:如果
常见凸函数
| 函数 | 凸性 | 定义域 |
|---|---|---|
| 凸 | ||
| 凸 | ||
| 凸 | ||
| 凹 | ||
| 凸 | ||
| 凸 |
凸优化问题
标准形式
其中:
是凸函数 是凸函数 是仿射函数
凸优化的性质
- 任何局部最优解都是全局最优解
- 最优解集是凸集
- 可以用高效的算法求解(内点法、梯度下降等)
例子
线性规划:
二次规划:
其中
非凸优化
深度学习中的非凸性
深度学习中的优化问题通常是非凸的:
- 神经网络的损失函数是非凸的
- 有多个局部最优解
- 全局最优解难以找到
为什么深度学习仍然有效
尽管非凸,深度学习仍然有效的原因:
过参数化模型中的可达解通常够用
- 在许多过参数化深度网络中,可达局部解的质量往往已经足够好
- 不需要找到全局最优解
梯度下降的隐式正则化
- 梯度下降倾向于找到"平坦"的最小值
- 平坦的最小值通常泛化性能更好
过参数化的模型
- 模型参数远多于数据点
- 存在多个全局最优解
非凸优化的挑战
| 挑战 | 影响 |
|---|---|
| 局部最优解 | 可能陷入次优解 |
| 鞍点 | 梯度为零但不是最优解 |
| 梯度消失 | 无法更新参数 |
| 梯度爆炸 | 参数更新过大 |
对偶问题
Lagrange 对偶
对于优化问题:
Lagrange 函数:
其中
对偶问题:
强对偶性
对于凸优化问题,在某些条件下(Slater 条件):
应用: SVM 的对偶形式
实践建议
何时使用凸优化
- 问题可以表述为凸优化形式
- 需要保证找到全局最优解
- 计算资源有限
何时接受非凸优化
- 深度学习问题
- 局部最优解已经足够好
- 有足够的计算资源进行多次尝试
检查凸性
import numpy as np
def is_convex(f, x, eps=1e-5):
"""检查函数在点x处的凸性(通过Hessian矩阵)"""
# 计算Hessian矩阵
H = compute_hessian(f, x)
# 检查是否半正定
eigenvalues = np.linalg.eigvals(H)
return np.all(eigenvalues >= -eps)关键要点
- 凸集和凸函数是凸优化的基础
- 凸优化问题有全局最优解,易于求解
- 深度学习中的问题通常是非凸的
- 理解凸性有助于理解优化的局限性和可能性
- 对偶问题提供了另一种视角来理解优化问题
与深度学习的联系
为什么深度学习是非凸的
深度学习中的优化问题本质上是非凸的。理解这一点对于理解深度学习的优化挑战至关重要。
1. 多层非线性变换导致非凸性
神经网络的结构:
输入 → [线性变换] → [非线性激活] → [线性变换] → [非线性激活] → ... → 输出为什么非凸:
- 每一层的非线性激活函数(ReLU、Sigmoid等)都是非凸的
- 多个非凸函数的复合仍然是非凸的
- 损失函数 = 非凸函数的复合 = 非凸
具体例子:
简单神经网络: y = σ(W₂σ(W₁x + b₁) + b₂)
其中σ是ReLU激活函数(非凸)
整个函数关于W₁, W₂, b₁, b₂是非凸的2. 多个局部最优解
凸优化的性质:
- 任何局部最优解都是全局最优解
- 最优解是唯一的(或形成凸集)
非凸优化的现实:
- 存在多个局部最优解
- 不同的初始化可能收敛到不同的局部最优
- 全局最优解难以找到
深度学习中的例子:
参数空间中的损失函数景观:
- 多个"山谷"(局部最优)
- 多个"鞍点"(梯度为0但不是最优)
- 一个"最深的山谷"(全局最优)3. 优化的困难性
非凸优化的挑战:
- 梯度下降可能陷入局部最优
- 无法保证找到全局最优解
- 优化过程对初始化敏感
但深度学习仍然有效的原因:
- 在许多过参数化深度网络中,可达局部解往往已经足够好,但这不是所有非凸问题的通用结论
- 梯度下降的隐式正则化倾向于找到好的解
- 过参数化使得全局最优解更容易找到
凸性在优化中的意义
1. 凸问题的优势
凸优化问题的特点:
- ✅ 任何局部最优都是全局最优
- ✅ 最优解集是凸集
- ✅ 可以用高效的算法求解(内点法、梯度下降等)
- ✅ 理论保证收敛到全局最优
应用领域:
- 线性规划(Linear Programming)
- 二次规划(Quadratic Programming)
- 半定规划(Semidefinite Programming)
- 传统机器学习(SVM、逻辑回归等)
2. 非凸问题的挑战
非凸优化问题的困难:
- ❌ 局部最优不一定是全局最优
- ❌ 无法保证收敛到全局最优
- ❌ 需要启发式方法(多次尝试、随机初始化等)
- ❌ 理论分析困难
但为什么仍然使用:
- 许多重要问题本质上是非凸的
- 深度学习的表达能力来自于非凸性
- 实践中找到的局部最优通常足够好
3. 深度学习的特殊性
深度学习的非凸性与众不同:
| 特性 | 传统非凸问题 | 深度学习 |
|---|---|---|
| 参数数量 | 少(几十到几百) | 巨大(数十亿) |
| 数据量 | 少(几百到几千) | 巨大(数十亿) |
| 局部最优质量 | 差异大 | 大多数都很好 |
| 优化难度 | 很难 | 相对容易 |
| 泛化性能 | 不确定 | 通常很好 |
关键观察:
- 高维空间中的非凸优化比低维更"友好"
- 过参数化使得优化景观更平坦
- 梯度下降的隐式正则化帮助泛化
具体的应用例子
例子1:凸优化问题 - 逻辑回归
问题定义:
最小化: L(w) = -1/n Σᵢ [yᵢ log σ(wᵀxᵢ) + (1-yᵢ) log(1-σ(wᵀxᵢ))]凸性分析:
- 损失函数是凸函数
- 约束条件是线性的
- 这是一个凸优化问题
优化特点:
- ✅ 任何局部最优都是全局最优
- ✅ 梯度下降保证收敛到全局最优
- ✅ 可以用高效的算法求解
实践效果:
- 收敛快
- 结果稳定
- 不需要多次尝试
例子2:非凸优化问题 - 神经网络
问题定义:
最小化: L(W) = 1/n Σᵢ ℓ(f(xᵢ; W), yᵢ)
其中 f(x; W) = σ(W₂σ(W₁x + b₁) + b₂)非凸性分析:
- 激活函数σ是非凸的
- 多层复合导致整体非凸
- 这是一个非凸优化问题
优化特点:
- ❌ 局部最优不一定是全局最优
- ❌ 梯度下降可能陷入局部最优
- ❌ 需要多次尝试或启发式方法
实践效果:
- 收敛可能较慢
- 结果依赖初始化
- 需要调整超参数
例子3:深度学习中的非凸性 - 为什么仍然有效
关键观察:
高维空间的性质
在许多过参数化深度网络中,可达局部解往往已经足够好,但这不是所有非凸问题的通用结论 原因: - 参数空间维度很高(数十亿) - 损失函数景观有很多"山谷" - 这些山谷的深度相近过参数化的优势
当参数数量 >> 数据点数量时: - 存在多个全局最优解 - 梯度下降容易找到其中一个 - 泛化性能通常很好梯度下降的隐式正则化
SGD的梯度噪音引导优化器: - 找到"平坦"的最小值 - 平坦的最小值泛化性能更好 - 不需要显式正则化
具体例子:
GPT-3 (175B参数):
- 参数数量: 1.75×10¹¹
- 训练数据: 3×10¹¹ tokens
- 参数/数据比: 0.58
虽然是非凸问题,但:
✅ 梯度下降仍然有效
✅ 找到的解泛化性能很好
✅ 不需要多次尝试凸性与深度学习的权衡
为什么深度学习放弃凸性:
| 方面 | 凸优化 | 深度学习 |
|---|---|---|
| 理论保证 | ✅ 全局最优 | ❌ 无保证 |
| 表达能力 | ❌ 有限 | ✅ 无限 |
| 可扩展性 | ❌ 差 | ✅ 好 |
| 实践效果 | ✅ 稳定 | ✅ 优秀 |
| 应用范围 | 有限 | 广泛 |
结论:
- 凸性提供理论保证,但限制了表达能力
- 深度学习放弃凸性,换取强大的表达能力
- 在实践中,深度学习的非凸优化通常比凸优化更有效
总结
深度学习是非凸的
- 多层非线性变换导致非凸性
- 存在多个局部最优解
- 优化理论上很困难
但深度学习仍然有效
- 高维空间中的非凸优化相对容易
- 过参数化使得全局最优解容易找到
- 梯度下降的隐式正则化帮助泛化
凸性的意义
- 凸优化提供理论保证
- 但限制了表达能力
- 深度学习的成功来自于放弃凸性
进一步阅读
相关资源
文件位置
本文档是第2章的高级扩展内容,位于:
docs/02_optimization/extensions/convex_analysis.md相关主文档
- 主文档: 第2章:优化算法与传统机器学习
- 2.1 梯度下降基础: 01_gradient_descent.md
- 2.2 自适应优化器: 02_adaptive_optimizers.md
- 2.3 优化与传统ML: 03_optimization_and_traditional_ml.md
- 2.4 数值方法: 04_numerical_methods.md
- 2.5 线性/逻辑回归: 05_linear_logistic_regression.md
- 2.6 SVM与核方法: 06_svm_kernel_methods.md
相关扩展文档
- 高级优化话题: advanced_optimization.md
- 树数据结构: tree_data_structures.md
代码实验
- 凸分析实验:
code/ch02_optimization/convex_analysis_demo.py - 运行方式:
python code/ch02_optimization/convex_analysis_demo.py

图:凸分析实验结果。包含凸函数与非凸函数的优化路径对比、Rosenbrock 函数的等高线图、以及条件数对梯度下降收敛速度的影响。
- 线性/逻辑回归:
code/ch02_optimization/linear_logistic_regression.py - SVM核方法:
code/ch02_optimization/svm_kernel.py
后续阅读建议
如果你对以下话题感兴趣,可以继续阅读:
深度学习中的优化
- 第3章:深度学习基础
- 了解非凸优化在深度学习中的实际应用
高级优化话题
- advanced_optimization.md
- 了解二阶方法、随机优化理论等高级内容
数学基础
- 附录A:数学参考
- 了解更多关于Hessian矩阵、梯度等数学概念
优化理论经典著作
- Boyd & Vandenberghe, "Convex Optimization" - 凸优化的标准教材
- Nesterov, "Introductory Lectures on Convex Optimization" - 凸优化理论入门
- Goodfellow, Bengio, Courville, "Deep Learning" - 深度学习中的优化
返回: 第2章:优化与机器学习
