← 返回Book 3目录
第19章Optimization

优化入门

Introduction to Optimization

极值理论、Hessian矩阵、梯度下降法

🎯 本章导读

优化是数学、工程和机器学习中的核心问题。本章介绍优化的基础理论,包括如何寻找函数的极值点、判断极值类型,以及梯度下降这一重要的数值优化方法。

📐 极值理论
一阶、二阶导数判别法
🔢 Hessian矩阵
多元函数极值判定
⚡ 梯度下降
数值优化算法

19.1 极值问题引入

优化问题(Optimization Problem)是指在给定约束条件下,寻找使目标函数达到最大值或最小值的参数取值。

标准形式

min f(x)
subject to: gi(x) ≤ 0, i = 1, 2, ..., m
hj(x) = 0, j = 1, 2, ..., n

公式 (1)

其中 f(x) 是目标函数,gi(x) 是不等式约束,hj(x) 是等式约束。

📌 无约束优化

没有约束条件的优化问题。主要通过求导数为零的点来寻找极值。

🔗 约束优化

有约束条件的优化问题。需要使用拉格朗日乘数法等方法求解。

常见应用场景

🏭
工程设计
在材料、成本等约束下,最大化性能或最小化重量
💰
经济管理
在预算约束下,最大化利润或最小化成本
🤖
机器学习
通过最小化损失函数来训练模型参数

19.2 一元函数极值

极值的定义

对于一元函数 f(x),如果存在点 x₀,使得在其邻域内:

局部最大值(Local Maximum)
f(x) ≤ f(x₀) 对所有 x ∈ (x₀ - δ, x₀ + δ)
局部最小值(Local Minimum)
f(x) ≥ f(x₀) 对所有 x ∈ (x₀ - δ, x₀ + δ)

公式 (2)

xf(x)局部最大值局部最小值局部最大值全局最大值

图 1. 函数的极值点示意图

一阶导数判别法

函数 f(x) 在点 x₀ 处取得极值的必要条件是:

f'(x₀) = 0

(驻点或临界点)

公式 (3)

⚠️ 注意:导数为零是必要条件但不是充分条件。导数为零的点不一定是极值点(如拐点)。

二阶导数判别法

如果 f'(x₀) = 0,则可以用二阶导数判断极值类型:

若 f''(x₀) < 0
→ x₀ 是局部最大值点
若 f''(x₀) > 0
→ x₀ 是局部最小值点
若 f''(x₀) = 0
→ 需要更高阶导数判断

公式 (4)

📝 例题:求 f(x) = x³ - 3x² - 9x + 5 的极值

步骤 1:求一阶导数
f'(x) = 3x² - 6x - 9 = 3(x² - 2x - 3) = 3(x - 3)(x + 1)
步骤 2:令 f'(x) = 0,得驻点
x₁ = -1, x₂ = 3
步骤 3:求二阶导数
f''(x) = 6x - 6
步骤 4:判断极值类型
f''(-1) = -12 < 0 → x = -1 处为局部最大值,f(-1) = 10
f''(3) = 12 > 0 → x = 3 处为局部最小值,f(3) = -22

19.3 多元函数极值

对于多元函数 f(x₁, x₂, ..., xₙ),极值判定需要使用梯度和Hessian矩阵。

梯度为零的必要条件

函数在点 x₀ 处取得极值的必要条件是梯度为零向量:

∇f(x₀) = 0
即:∂f/∂x₁ = 0, ∂f/∂x₂ = 0, ..., ∂f/∂xₙ = 0

公式 (5)

二元函数的极值点xzy极小值点∇f = 0梯度方向

图 2. 二元函数极值点的等高线图

二元函数示例

📝 例题:求 f(x, y) = x² + y² - 4x - 6y + 13 的极值

步骤 1:求偏导数
∂f/∂x = 2x - 4
∂f/∂y = 2y - 6
步骤 2:令偏导数为零
2x - 4 = 0 → x = 2
2y - 6 = 0 → y = 3
步骤 3:得到驻点 (2, 3)
步骤 4:计算函数值
f(2, 3) = 4 + 9 - 8 - 18 + 13 = 0
✓ 结论:点 (2, 3) 是驻点,需要用Hessian矩阵进一步判断是否为极值点。

19.4 Hessian矩阵

Hessian矩阵(Hessian Matrix)是由函数的二阶偏导数组成的方阵,用于判定多元函数的极值类型。

Hessian矩阵定义

对于二元函数 f(x, y),Hessian矩阵定义为:

H(x, y) =
∂²f/∂x²
∂²f/∂x∂y
∂²f/∂y∂x
∂²f/∂y²

公式 (6)

💡 注意:对于光滑函数,混合偏导数相等:

∂²f/∂x∂y = ∂²f/∂y∂x

(Schwarz定理)

极值判别法

设 (x₀, y₀) 是驻点(即 ∇f = 0),令:

A = ∂²f/∂x² (x₀, y₀)
B = ∂²f/∂x∂y (x₀, y₀)
C = ∂²f/∂y² (x₀, y₀)
Δ = AC - B²

公式 (7)

判别准则

情况 1:Δ > 0 且 A > 0
→ (x₀, y₀) 是局部最小值点
(Hessian矩阵正定)
情况 2:Δ > 0 且 A < 0
→ (x₀, y₀) 是局部最大值点
(Hessian矩阵负定)
情况 3:Δ < 0
→ (x₀, y₀) 是鞍点(Saddle Point)
(Hessian矩阵不定)
情况 4:Δ = 0
→ 无法判定,需要更高阶分析
三种驻点类型的曲面示意图局部最小值Δ > 0, A > 0局部最大值Δ > 0, A < 0鞍点Δ < 0

图 3. 三种驻点类型的等高线对比

📝 例题:判断 f(x, y) = x² + y² - 4x - 6y + 13 的极值

已知驻点:(2, 3)
步骤 1:计算二阶偏导数
∂²f/∂x² = 2 → A = 2
∂²f/∂x∂y = 0 → B = 0
∂²f/∂y² = 2 → C = 2
步骤 2:计算判别式
Δ = AC - B² = 2 × 2 - 0² = 4 > 0
步骤 3:判断极值类型
Δ > 0 且 A = 2 > 0
✓ 结论:点 (2, 3) 是局部最小值点,最小值为 f(2, 3) = 0

Hessian矩阵判别器

调整二阶偏导数值,实时观察驻点类型变化

二阶偏导数

Hessian矩阵

2.0
0.0
0.0
2.0

计算结果

Δ = AC - B² = (2.0)(2.0) - (0.0)² = 4.00
判别式 Δ > 0且 A > 0
✅

驻点类型:局部最小值

函数在此点达到局部最小值,Hessian矩阵正定

预设示例

等高线可视化

xy(2, 3)局部最小值梯度指向中心(下降)

💡 探索建议:尝试调整 A、B、C 的值,观察判别式 Δ 和驻点类型的变化。注意鞍点的等高线呈马鞍形状。

19.5 梯度下降法

梯度下降法(Gradient Descent)是一种迭代优化算法,通过沿着梯度的反方向更新参数,逐步逼近函数的极小值点。

基本思想

梯度 ∇f(x) 指向函数值增长最快的方向,因此负梯度方向就是函数值下降最快的方向。

梯度下降迭代公式

xk+1 = xk - α ∇f(xk)
xk:第 k 次迭代的参数值
α:学习率(步长),α > 0
∇f(xk):在 xk 处的梯度

公式 (8)

梯度下降动画演示:f(x) = x²

观察从起点 x₀ = 10 逐步下降到最小值点 x* = 0 的过程

xf(x)最小值点 x* = 0
当前步骤:0 / -1
当前位置:x =
函数值:f(x) =
太小(慢)合适太大(不稳定)

💡 观察要点:学习率过小时收敛慢,过大时可能振荡。观察每步更新如何沿负梯度方向减小函数值。

学习率的影响

α 太小

收敛速度慢,需要很多次迭代

优点:稳定;缺点:效率低

α 合适

快速收敛到最优解

理想情况

α 太大

可能振荡或发散,无法收敛

优点:快;缺点:不稳定

梯度下降变体

批量梯度下降(Batch GD)

每次迭代使用全部训练数据计算梯度

准确但计算量大

随机梯度下降(Stochastic GD)

每次迭代随机选择一个样本计算梯度

快速但有噪声

小批量梯度下降(Mini-batch GD)

每次迭代使用一小批样本计算梯度

平衡速度和稳定性,最常用

📝 例题:用梯度下降求 f(x) = x² 的最小值

初始化:
起点 x₀ = 10,学习率 α = 0.1
梯度:
f'(x) = 2x
迭代过程:
x₁ = 10 - 0.1 × (2 × 10) = 10 - 2 = 8
x₂ = 8 - 0.1 × (2 × 8) = 8 - 1.6 = 6.4
x₃ = 6.4 - 0.1 × (2 × 6.4) = 6.4 - 1.28 = 5.12
x₄ = 5.12 - 0.1 × (2 × 5.12) = 5.12 - 1.024 = 4.096
...
x → 0(逐渐收敛到最小值点)
✓ 结论:通过梯度下降,从 x = 10 逐步收敛到最小值点 x = 0,最小值 f(0) = 0

优化算法的改进

为了提高梯度下降的性能,研究者提出了许多改进算法:

🚀 动量法(Momentum)

利用历史梯度信息,加速收敛并减少振荡

📊 AdaGrad

为每个参数自适应调整学习率

🎯 Adam

结合动量和自适应学习率,深度学习最常用

⚡ RMSprop

自适应调整学习率,适合非平稳目标

优化算法对比:f(x,y) = x² + y²

对比不同优化算法从起点 (8, 6) 收敛到最优点 (0, 0) 的路径

xy起点 (8,6)最优点 (0,0)
标准梯度下降
当前步数: 0
总步数: 29
动量法
当前步数: 0
总步数: 36
Adam
当前步数: 0
总步数: 50
全局步数: 0 / 50
标准梯度下降

直接沿负梯度方向更新,路径较直但收敛慢

动量法 (β=0.9)

利用历史梯度信息,加速收敛并减少振荡

Adam

自适应学习率,收敛最快且最稳定

💡 观察要点:注意不同算法的收敛速度和路径平滑度。Adam 通常收敛最快,动量法路径更平滑,标准梯度下降最直接但可能较慢。

📋章节总结

核心内容回顾

1️⃣
极值理论
一元函数:f'(x) = 0(必要条件),f''(x) 判断极值类型
多元函数:∇f = 0(必要条件),Hessian矩阵判断极值类型
2️⃣
Hessian矩阵
二阶偏导数矩阵,通过判别式 Δ = AC - B² 确定驻点类型
Δ > 0:极值点;Δ < 0:鞍点;Δ = 0:不确定
3️⃣
梯度下降法
迭代公式:xk+1 = xk - α∇f(xk)
沿负梯度方向更新参数,逐步逼近最小值点

关键公式速查

一元函数极值
f'(x₀) = 0
f''(x₀) > 0 → 最小值
f''(x₀) < 0 → 最大值
多元函数极值
∇f(x₀) = 0
Δ = AC - B²
Δ > 0, A > 0 → 最小值
梯度下降
xk+1 = xk - α∇f(xk)
梯度
∇f = (∂f/∂x₁, ∂f/∂x₂, ..., ∂f/∂xₙ)

实际应用

机器学习
训练神经网络,最小化损失函数
工程优化
设计参数优化,成本最小化
金融分析
投资组合优化,风险控制