Math-04.优化-01.总论

本页为 Math-04 优化 子系列总论。机器学习训练本质是:在参数空间 $\boldsymbol{\theta}$ 中最小化损失 $L(\boldsymbol{\theta})$。

段末注释优化(optimization)求 $\boldsymbol{\theta}^* = \arg\min_{\boldsymbol{\theta}} L(\boldsymbol{\theta})$;梯度(gradient)$\nabla L$ 指向函数增长最快方向,负梯度为下降方向。

系列入口00.系列规划 | 前置:Math-00/50 损失Math-03/02 矩阵


1. 优化问题形式(D2)

图 1 min L(theta)

无约束优化(最常见 DL):

$$
\min_{\boldsymbol{\theta} \in \mathbb{R}^d} L(\boldsymbol{\theta})
$$

约束优化

$$
\min_{\boldsymbol{\theta}} L(\boldsymbol{\theta}) \quad \text{s.t.} \quad g_i(\boldsymbol{\theta}) \le 0,\ h_j(\boldsymbol{\theta}) = 0
$$

类型 ML 例子
无约束 神经网络权重训练
等式约束 Lagrange 乘子、SVM margin
不等式约束 RLHF 中 KL 约束(Math-05/20
正则化 $\min L(\boldsymbol{\theta}) + \lambda |\boldsymbol{\theta}|_2^2$ 可视为约束的 Lagrange 形式

2. 极小与驻点(D3)

图 2 局部极小 vs 鞍点

一阶必要条件(可微、局部极小 $\boldsymbol{\theta}^*$):

$$
\nabla L(\boldsymbol{\theta}^*) = \mathbf{0}
$$

二阶:Hessian $H = \nabla^2 L$ 半正定 → 局部极小;不定 → 鞍点

概念 说明
全局极小 全空间最小;凸问题任一局部极小即全局
局部极小 邻域内最小
鞍点 某些方向升、某些方向降;深网常见
plateau 梯度近零但非极小

非凸深网:不保证全局最优,实践靠 SGD 噪声、初始化、架构。


3. 凸性概览(D3–D6)

凸函数:$\forall \boldsymbol{\theta}_1,\boldsymbol{\theta}_2,,\lambda\in[0,1]$,

$$
L(\lambda \boldsymbol{\theta}_1 + (1-\lambda)\boldsymbol{\theta}_2) \le \lambda L(\boldsymbol{\theta}_1) + (1-\lambda) L(\boldsymbol{\theta}_2)
$$

函数 凸性
线性回归 MSE
Logistic + CE 凸(对 $\boldsymbol{\theta}$)
2 层以上 ReLU 网 非凸
L1 正则 凸(非光滑)

凸优化任一局部极小 = 全局极小;详见 02 凸优化


4. ML 训练地图(D7)

图 3 训练循环

1
2
3
4
5
6
损失 L(theta)  [Math-00/50, Math-05]
→ 梯度 nabla L [Math-06 矩阵微积分]
→ 更新 theta [03 SGD, 04 Adam]
→ 学习率 schedule [05]
→ 正则/约束 [Math-08, Math-05/20 KL]
→ 验证与早停 [Math-08]

批量训练循环

  1. 采样 mini-batch
  2. 前向 → 损失
  3. 反向 → $\nabla L$
  4. 优化器更新 $\boldsymbol{\theta}$
  5. 重复至收敛

5. 一阶 vs 二阶(D4)

方法 更新 代价
一阶(GD/SGD/Adam) 用 $\nabla L$ $O(d)$ 每步
二阶(Newton) 用 $H^{-1}\nabla L$ $O(d^3)$ 或近似
XGBoost 二阶 Taylor 近似 树分裂(存量 XGBoost

DL 几乎全用一阶 + 自适应学习率。


6. 局限(D8)

图 4 常见陷阱

陷阱 说明
学习率过大 发散、loss NaN
学习率过小 训练极慢、陷 plateau
只调 optimizer 不调 lr Adam 默认 lr 未必适配任务
忽视 batch size 大 batch 常需更大 lr 或 warmup
验证集泄漏 「优化」了测试表现

7. PyTorch 训练骨架(D12)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import torch
import torch.nn as nn

model = nn.Linear(20, 1)
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)
criterion = nn.MSELoss()

for epoch in range(100):
x = torch.randn(32, 20)
y = torch.randn(32, 1)
optimizer.zero_grad()
loss = criterion(model(x), y)
loss.backward()
optimizer.step()

8. 系列导航

篇号 主题
03 SGD 批量/随机
04 Adam 自适应
05 学习率 warmup/cosine
10 DL 实践 clip/累积

系列导航00 规划 | 03 SGD

-------------本文结束感谢您的阅读-------------