⚠️ Alpha内测版本警告:此为早期内部构建版本,尚不完整且可能存在错误,欢迎大家提Issue反馈问题或建议。
Skip to content

扩展:凸分析基础

在线 Notebook

对应的交互式版本可在 Google Colab 打开,统一使用方式见 第0章说明

难度: 高级
前置知识: 线性代数、微积分、优化基础(第2章)


为什么需要凸分析

在优化问题中,凸性是一个关键性质:

  • 凸优化问题有全局最优解,易于求解
  • 非凸优化问题可能有多个局部最优解,难以求解
  • 深度学习中的大多数问题都是非凸的,但理解凸性有助于理解优化的局限性

凸集

定义

凸集:如果对于集合中的任意两点 x,y,它们的任意凸组合也在集合中:

λx+(1λ)yC,λ[0,1]

几何意义:集合中任意两点的连线都在集合内。

例子

凸集:

  • 球体:{x:xr}
  • 超平面:{x:aTx=b}
  • 半空间:{x:aTxb}
  • 多面体:线性不等式的交集

非凸集:

  • 圆环(中间有洞)
  • 新月形

凸集的运算

运算结果
交集凸集 ∩ 凸集 = 凸集
并集凸集 ∪ 凸集 ≠ 一定凸
仿射变换f(x)=Ax+b 保持凸性

凸函数

定义

凸函数:对于凸集上的函数 f,如果:

f(λx+(1λ)y)λf(x)+(1λ)f(y)

对所有 λ[0,1] 成立。

几何意义:函数图像上任意两点的连线都在函数图像上方。

凹函数

凹函数:不等号反向的凸函数。

f(λx+(1λ)y)λf(x)+(1λ)f(y)

判断凸性

一阶条件:如果 f 可微,则 f 是凸函数当且仅当:

f(y)f(x)+f(x)T(yx)

二阶条件:如果 f 二阶可微,则 f 是凸函数当且仅当 Hessian 矩阵半正定:

2f(x)0

常见凸函数

函数凸性定义域
x2R
|x|R
exR
logxx>0
logxx>0
|x|p (p1)Rn

凸优化问题

标准形式

minxf(x)s.t.gi(x)0,i=1,,mhj(x)=0,j=1,,p

其中:

  • f 是凸函数
  • gi 是凸函数
  • hj 是仿射函数

凸优化的性质

  1. 任何局部最优解都是全局最优解
  2. 最优解集是凸集
  3. 可以用高效的算法求解(内点法、梯度下降等)

例子

线性规划:

minxcTxs.t.Axb

二次规划:

minx12xTQx+cTxs.t.Axb

其中 Q0(半正定)。


非凸优化

深度学习中的非凸性

深度学习中的优化问题通常是非凸的

  • 神经网络的损失函数是非凸的
  • 有多个局部最优解
  • 全局最优解难以找到

为什么深度学习仍然有效

尽管非凸,深度学习仍然有效的原因:

  1. 过参数化模型中的可达解通常够用

    • 在许多过参数化深度网络中,可达局部解的质量往往已经足够好
    • 不需要找到全局最优解
  2. 梯度下降的隐式正则化

    • 梯度下降倾向于找到"平坦"的最小值
    • 平坦的最小值通常泛化性能更好
  3. 过参数化的模型

    • 模型参数远多于数据点
    • 存在多个全局最优解

非凸优化的挑战

挑战影响
局部最优解可能陷入次优解
鞍点梯度为零但不是最优解
梯度消失无法更新参数
梯度爆炸参数更新过大

对偶问题

Lagrange 对偶

对于优化问题:

minxf(x)s.t.gi(x)0

Lagrange 函数:

L(x,λ)=f(x)+iλigi(x)

其中 λi0 是对偶变量。

对偶问题:

maxλ0minxL(x,λ)

强对偶性

对于凸优化问题,在某些条件下(Slater 条件):

minxf(x)=maxλ0minxL(x,λ)

应用: SVM 的对偶形式


实践建议

何时使用凸优化

  • 问题可以表述为凸优化形式
  • 需要保证找到全局最优解
  • 计算资源有限

何时接受非凸优化

  • 深度学习问题
  • 局部最优解已经足够好
  • 有足够的计算资源进行多次尝试

检查凸性

python
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. 凸集和凸函数是凸优化的基础
  2. 凸优化问题有全局最优解,易于求解
  3. 深度学习中的问题通常是非凸的
  4. 理解凸性有助于理解优化的局限性和可能性
  5. 对偶问题提供了另一种视角来理解优化问题

与深度学习的联系

为什么深度学习是非凸的

深度学习中的优化问题本质上是非凸的。理解这一点对于理解深度学习的优化挑战至关重要。

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:深度学习中的非凸性 - 为什么仍然有效

关键观察:

  1. 高维空间的性质

    在许多过参数化深度网络中,可达局部解往往已经足够好,但这不是所有非凸问题的通用结论
    
    原因:
    - 参数空间维度很高(数十亿)
    - 损失函数景观有很多"山谷"
    - 这些山谷的深度相近
  2. 过参数化的优势

    当参数数量 >> 数据点数量时:
    - 存在多个全局最优解
    - 梯度下降容易找到其中一个
    - 泛化性能通常很好
  3. 梯度下降的隐式正则化

    SGD的梯度噪音引导优化器:
    - 找到"平坦"的最小值
    - 平坦的最小值泛化性能更好
    - 不需要显式正则化

具体例子:

GPT-3 (175B参数):
- 参数数量: 1.75×10¹¹
- 训练数据: 3×10¹¹ tokens
- 参数/数据比: 0.58

虽然是非凸问题,但:
✅ 梯度下降仍然有效
✅ 找到的解泛化性能很好
✅ 不需要多次尝试

凸性与深度学习的权衡

为什么深度学习放弃凸性:

方面凸优化深度学习
理论保证✅ 全局最优❌ 无保证
表达能力❌ 有限✅ 无限
可扩展性❌ 差✅ 好
实践效果✅ 稳定✅ 优秀
应用范围有限广泛

结论:

  • 凸性提供理论保证,但限制了表达能力
  • 深度学习放弃凸性,换取强大的表达能力
  • 在实践中,深度学习的非凸优化通常比凸优化更有效

总结

  1. 深度学习是非凸的

    • 多层非线性变换导致非凸性
    • 存在多个局部最优解
    • 优化理论上很困难
  2. 但深度学习仍然有效

    • 高维空间中的非凸优化相对容易
    • 过参数化使得全局最优解容易找到
    • 梯度下降的隐式正则化帮助泛化
  3. 凸性的意义

    • 凸优化提供理论保证
    • 但限制了表达能力
    • 深度学习的成功来自于放弃凸性

进一步阅读


相关资源

文件位置

本文档是第2章的高级扩展内容,位于:

docs/02_optimization/extensions/convex_analysis.md

相关主文档

相关扩展文档

代码实验

Convex Analysis

图:凸分析实验结果。包含凸函数与非凸函数的优化路径对比、Rosenbrock 函数的等高线图、以及条件数对梯度下降收敛速度的影响。

后续阅读建议

如果你对以下话题感兴趣,可以继续阅读:

  1. 深度学习中的优化

    • 第3章:深度学习基础
    • 了解非凸优化在深度学习中的实际应用
  2. 高级优化话题

  3. 数学基础

    • 附录A:数学参考
    • 了解更多关于Hessian矩阵、梯度等数学概念
  4. 优化理论经典著作

    • Boyd & Vandenberghe, "Convex Optimization" - 凸优化的标准教材
    • Nesterov, "Introductory Lectures on Convex Optimization" - 凸优化理论入门
    • Goodfellow, Bengio, Courville, "Deep Learning" - 深度学习中的优化

返回: 第2章:优化与机器学习

本教程采用 CC BY-NC-SA 4.0 许可协议