Ch03 AI数学修订于 二〇二六年七月二日

3.4 优化理论 — 让 AI 找到最优解

前面讲的梯度下降是优化理论的基础。这一节深入展开:AI 训练的优化不只是”往梯度反方向走”那么简单,它涉及一整套理论和工程技巧。

3.4.1 凸优化 vs 非凸优化:为什么深度学习的优化这么难

凸函数(Convex Function):函数图像像一个碗。任意两点连线都在函数图像之上。凸函数只有一个最低点(全局最优),梯度下降无论从哪开始,最终都能走到这个最低点。

非凸函数(Non-convex Function):函数图像像山脉,有多个山峰和山谷。梯度下降可能被困在某个山谷(局部最优),却永远找不到更深的那个山谷(全局最优)。

深度学习的损失函数是极度非凸的:一个 GPT 模型有数千亿参数,损失函数在参数空间中形成了极其复杂的地形——无数个鞍点、局部最优、平坦区域。但实践表明,梯度下降类方法在这个复杂地形中表现得惊人的好。为什么?两个关键发现:

  1. 鞍点比局部最优更常见:在高维空间中,大多数临界点是鞍点,不是局部最优。梯度下降很容易逃离鞍点
  2. 局部最优的质量很高:大的神经网络中,大部分局部最优的损失值非常接近全局最优——找到任何一个局部最优就够了

3.4.2 优化器的演进:从 SGD 到 AdamW

优化器是决定”怎么更新参数”的算法。从最朴素的 SGD 到最先进的 AdamW,每一步演进都是为了解决前一代的问题。

SGD(随机梯度下降):最朴素的优化器。

θ = θ - η × ∇L(θ)

  • 每次随机取一个 batch 的数据,算梯度,更新参数
  • 优点:简单,理解容易
  • 缺点:学习率需要手动调,容易震荡,在”峡谷”地形中来回摆动(就像在山谷两侧来回弹跳,沿着谷底前进的速度很慢)

SGD + Momentum(动量):给 SGD 加上”惯性”。

v = β × v + η × ∇L(θ) θ = θ - v

  • 动量 v 累积了过去的梯度,像滚下山的球——越滚越快
  • β 通常设为 0.9,意味着动量是过去 10 步梯度的加权平均
  • 优点:加速收敛,减少震荡,更容易穿过平坦区域和小鞍点
  • 直觉:你以前走过的路会”推”着你继续往前走,不会因为当前一步的梯度很小就停下来

Adam(自适应矩估计):2014 年提出,至今最常用的优化器。

Adam 结合了两种思想:

  1. 动量(Momentum):累积过去的梯度,保持方向一致性
  2. 自适应学习率(RMSprop):每个参数有自己的学习率,根据历史梯度大小自动调整——变化大的参数学习率自动减小,变化小的参数学习率自动增大

Adam 的完整更新公式(简化版):

  • m = β1 × m + (1-β1) × g(一阶矩估计,动量)
  • v = β2 × v + (1-β2) × g^2(二阶矩估计,自适应学习率)
  • θ = θ - η × m / (sqrt(v) + ε)

默认参数:η=0.001, β1=0.9, β2=0.999, ε=1e-8

AdamW:Adam 的改进版(2017 年提出,2026 年已成为主流)。

Adam 的问题:L2 正则化(权重衰减)和自适应学习率在 Adam 中耦合在一起,导致正则化效果不如预期。

AdamW 的改进:把权重衰减(weight decay)从梯度更新中解耦出来,直接对参数做衰减。 θ = θ - η × (m / (sqrt(v) + ε) + λ × θ)

其中 λ 是权重衰减系数(通常 0.01 到 0.1)。AdamW 几乎在所有场景下都优于原始 Adam,是 2026 年微调大模型的默认优化器。

其他值得了解的优化器:

  • RMSprop:Adam 的前身,只用了自适应学习率,没有动量。在 RNN 训练中有时优于 Adam
  • Adagrad:自适应学习率,但学习率会单调递减到 0,不适合长时间训练
  • LAMB:为大 batch size 设计的优化器,可以在超大批次(32K+)下稳定训练,用于训练 BERT 等大模型
  • Lion:2023 年 Google 提出的新优化器,只使用梯度的符号(sign),内存占用更少,在某些视觉任务上优于 AdamW

3.4.3 学习率调度:让学习率”聪明”地变化

固定学习率往往不是最优的。学习率调度(Learning Rate Schedule)就是让学习率在训练过程中动态变化。

为什么需要调度:

  • 训练初期:模型权重是随机的,需要大步快走,学习率可以大一些
  • 训练后期:模型接近收敛,需要小步微调,学习率应该小一些
  • 中间阶段:学习率太大可能震荡,太小可能卡在鞍点

常用调度策略:

阶梯下降(Step Decay):每隔 N 个 epoch,学习率乘以一个衰减因子(如 0.1)。

  • 简单粗暴,但有效
  • 典型设置:每 30 个 epoch 衰减为原来的 1/10

余弦退火(Cosine Annealing):学习率按余弦曲线从最大值降到最小值。

  • 平滑的衰减,不像阶梯下降那样突然
  • 可以和”热重启”结合——学习率降到最低后再跳回最大值,开始新一轮衰减
  • 2026 年微调大模型时,余弦退火是最常用的调度策略

Warmup(预热):训练最开始的几百步,学习率从 0 线性增加到目标值。

  • 为什么需要:训练初期,模型权重是随机的,梯度很大且不稳定。如果一开始就用大学习率,模型可能直接”跑飞”
  • 在 Transformer 训练中,Warmup 几乎是必需的——没有 warmup,训练可能直接发散
  • 典型设置:前 1000 步从 0 线性增加到 1e-3,然后正常衰减

OneCycleLR:学习率先升后降,像一个”山”形。训练中期的学习率最大,前后都小。

  • 在图像分类等任务中,OneCycleLR 往往能以更少的 epoch 达到更好的效果

2026 年的实践建议:

  • 微调大模型:Cosine Annealing + Warmup,峰值学习率 1e-4 到 5e-5
  • 从头训练:Warmup + Cosine Annealing 或 Step Decay
  • HuggingFace Trainer 默认使用线性衰减 + Warmup

3.4.4 损失函数的选择:回归 vs 分类

选择正确的损失函数,相当于告诉模型”你应该优化什么”。不同的损失函数会引导模型走向不同的方向。

回归问题的损失函数:

MSE(均方误差):L = (1/n) × Σ(y_true - y_pred)^2

  • 直觉:预测值和真实值差的平方的平均
  • 特点:大误差被平方放大,对异常值非常敏感
  • 适用场景:房价预测、股票预测等连续值预测
  • 数学推导:假设误差服从正态分布,MSE 是 MLE 的自然结果

MAE(平均绝对误差):L = (1/n) × Σ|y_true - y_pred|

  • 直觉:预测值和真实值绝对差距的平均
  • 特点:对异常值不敏感,但梯度在 0 点不连续(优化困难)
  • 适用场景:有异常值的数据,或你不想让大误差过度主导损失

Huber Loss:MSE 和 MAE 的折中,小误差用 MSE,大误差用 MAE。

  • 平滑可导,既有 MSE 的稳定性又有 MAE 的鲁棒性
  • 适用场景:需要平衡的回归任务

分类问题的损失函数:

交叉熵损失(Cross-Entropy Loss):分类问题的标准选择。

  • 二分类:L = -[y×log(p) + (1-y)×log(1-p)]
  • 多分类:L = -Σ y_i × log(p_i)
  • 数学推导:假设标签服从伯努利分布(二分类)或分类分布(多分类),MLE 的自然结果
  • 配合 softmax 使用,梯度形式简洁,不会梯度消失

Focal Loss:交叉熵的改进版,用于解决类别不平衡问题。 L = -(1-p_t)^γ × log(p_t)

  • γ 是聚焦参数(通常 2),(1-p_t)^γ 降低了易分类样本的权重
  • 直觉:模型已经能轻松分对的样本,损失权重降低;模型分不对的困难样本,权重保持
  • 适用场景:目标检测(背景样本远多于目标样本)、极度不平衡的分类问题

对比损失(Contrastive Loss):用于度量学习和对比学习。

  • 目标:让同类样本的向量更近,异类样本的向量更远
  • 在 SimCLR、CLIP 等对比学习模型中广泛使用
  • 2026 年,对比损失是 Embedding 模型训练的核心

3.4.5 正则化背后的数学:为什么 L1 产生稀疏解

正则化是在损失函数后面加一个惩罚项,防止模型过拟合。

L2 正则化(Ridge,岭回归):L_total = L_original + λ × Σ|w_i|^2

  • 惩罚参数的平方和
  • 直觉:鼓励所有参数都”小”,但没有参数是 0
  • 数学:相当于在参数的 L2 球内寻找最优解,解在球的边界上
  • 效果:防止模型过度依赖某个特征,所有特征都有贡献但都不大

L1 正则化(Lasso):L_total = L_original + λ × Σ|w_i|

  • 惩罚参数的绝对值和
  • 直觉:鼓励参数”稀疏”——很多参数变成 0,只有少数参数非零
  • 数学:相当于在参数的 L1 菱形内寻找最优解,最优解往往在菱形的角上(那里很多坐标为 0)
  • 效果:自动做特征选择——不重要的特征权重直接归零

为什么 L1 产生稀疏解而 L2 不产生:这是由几何决定的。L2 的约束区域是圆形(高维是球),最优解可以在圆的任何位置,参数可以任意小但很少精确为 0。L1 的约束区域是菱形(高维是超立方体),菱形的顶点在坐标轴上,最优解更容易落在顶点上——落在顶点意味着很多坐标精确为 0。

Dropout:训练时随机”关掉”一部分神经元(将它们的输出设为 0),防止神经元之间过度依赖。相当于每次训练一个不同的子网络,最终结果是这些子网络的集成。Dropout 的概率通常设为 0.1 到 0.5——太多会欠拟合,太少没效果。

Elastic Net:L1 和 L2 的组合,兼顾稀疏性和稳定性。


← 上一节:3.3 微积分:理解优化 | 下一节:3.5 信息论基础 →

关联6

知识图谱

局部图谱 · 点节点跳转