优化与梯度下降

本节目标

你将把负梯度更新与局部线性近似连接起来,用一个二次函数推导学习率何时收敛,并建立训练诊断清单:数据、梯度、loss、验证指标、数值异常和停止规则要分别检查。

优化问题

训练通常写成:

是参数, 是损失。损失是训练代理目标,不等于用户价值;例如降低交叉熵不自动保证事实性、延迟或安全性。

梯度下降更新

是学习率。负号表示走向局部下降。以 为例,梯度 ;从 、 开始:,逐步接近 3。

令误差 ,则:

要让误差绝对值逐步缩小,需要 ,即这个特定函数上 。 一步到达最小点, 会交替振荡但收敛, 不衰减, 发散。这只是该二次函数的精确结论,不是所有模型的通用阈值。

学习率

  • 太小:下降稳定但很慢;
  • 合适:较快收敛;
  • 太大:跨过谷底振荡甚至发散。

学习率与特征尺度、曲率和 batch 噪声相关,不能从别的模型机械复制。训练曲线应同时看 loss、验证指标、梯度范数和数值异常。

特征缩放会改变不同方向的曲率。一个方向很陡、另一个方向很平时,单一学习率容易在陡方向来回摆动而沿平方向前进缓慢。标准化、预条件、自适应优化器或更好的参数化可能改善路径,但都需要用验证集和真实任务检查。

批量与随机梯度

全量梯度使用全部样本;SGD 每次一个样本;mini-batch 取一小批。mini-batch 梯度有噪声但计算高效。batch 越大通常方差越小,却更耗内存,且学习率等设置需联动。

一个 epoch 表示按定义遍历训练集一次;step 是一次参数更新。若最后一个 batch 大小不同、使用抽样器或流式数据,“一个 epoch”的实际样本暴露也要具体说明。

曲率、凸性与局部最优

凸函数任意局部最小即全局最小,线性回归平方损失是典型例子。深度网络通常非凸,有鞍点和平坦区域。Hessian 描述二阶曲率;不同方向曲率差异大时,固定学习率会在陡方向振荡、缓方向慢。

常见优化器的最低认识

  • Momentum 累积历史方向以减少摆动。
  • Adam 按参数维护一阶/二阶矩估计并自适应缩放。
  • weight decay/正则化改变目标或更新,不能只当“防过拟合开关”。

本课不展开 API;先理解所有优化器仍需可靠梯度、合适学习率、验证集和停止条件。

停止与诊断

停止条件应在训练前定义,例如:

  • 达到最大 step/epoch;
  • 验证指标在预设 patience 内没有改善;
  • 梯度或参数出现非有限数;
  • loss 相对基线急剧增大;
  • 达到计算、费用或时间预算。

诊断顺序:先验证一小批数据能否过拟合,再检查梯度、reduction、学习率和尺度;然后才扩大数据与模型。只看到 loss 不降,无法区分数据标签错误、梯度实现错误、学习率问题、模型容量或目标不匹配。

在 Agent 工程中的边界

多数 Agent 应用开发并不训练基础模型,但会调 reranker、embedding、分类器或提示/策略参数。离散 prompt 选择不一定可微,可用搜索或 bandit;不要对任何问题都强行梯度下降。

常见误区、练习与自测

  • 训练 loss 下降不代表验证/线上指标提升。
  • 梯度为 NaN 时继续训练并等待自愈。
  • 只调 epoch,不记录数据版本和随机种子。
  • 把优化失败与模型表达能力不足混为一谈。

练习:

  1. 手算 前 3 步;分别用 和 ,比较收敛/发散。
  2. 用 解释 的行为。
  3. 为一次训练写出 step、epoch、batch size 和实际样本暴露量。
  4. 给出 loss 下降但验证指标恶化的诊断路径。
  5. 设计遇到 NaN 时的停止与记录规则,不允许“继续等它恢复”。
  • 我能写出更新式并解释每项。
  • 我能从 loss 曲线诊断学习率候选问题。
  • 我知道训练目标与业务指标不同。
  • 我能区分 step、epoch、batch 与样本暴露量。
  • 我会预先定义停止条件并把发散作为显式错误。

参考资料

核验日期:2026-07-14。训练 API 和优化器默认值会变化,本节只使用稳定原理;具体实现以当前框架官方文档为准。

上一节:自动微分与梯度检查|下一步:积分、概率与梯度下降项目。