Skip to content

一句话总结:训练就是"找一组参数让损失最小"——梯度告诉方向、链式法则让梯度从输出层一路传回每一层(反向传播)、优化器决定每步怎么走(SGD→Momentum→Adam);理解这条链,就理解了模型是怎么"学会"的。

梯度:损失下降的方向

  • 梯度 ∇L(θ) = ∂L/∂θ:参数往哪个方向调,Loss 下降最快
  • 参数更新:θ ← θ - η·∇L(η 学习率,控制步长)
  • 学习率过大 → 震荡不收敛;过小 → 收敛极慢

链式法则与反向传播

神经网络是巨型复合函数(多米诺骨牌):损失 = f(输出层),输出层 = f(倒数第二层)……第 1 层 = f(输入)。

  • 链式法则:复合函数求导逐层相乘,损失对第 1 层参数的梯度 = 从输出层一路乘回去
  • 反向传播(BP):先正向算损失,再从后往前逐层积累梯度(每层只做局部导数 × 上游梯度)
  • 核心公式:
    • 线性层 y = Wx + b:dL/dW = (dL/dy)·xᵀ,dL/db = dL/dy
    • 激活层 y = f(z):dL/dz = dL/dy ⊙ f'(z)(⊙ 逐元素乘)
  • 框架自动完成(PyTorch 的 backward),但面试要能手推一层

梯度消失与爆炸

深层网络:梯度是多层导数乘积(∂L/∂W₁ = ∂L/∂Wₙ · ∂Wₙ/∂Wₙ₋₁ · … · ∂W₂/∂W₁)。

  • 乘积 < 1 → 梯度消失(深层学不动);乘积 > 1 → 梯度爆炸(数值溢出)
  • 缓解:残差连接(跳层让梯度直通)、归一化(Batch/LayerNorm)、ReLU 类激活、梯度裁剪

优化器演进(从 SGD 到 Adam)

优化器机制一句话直觉
批量 GD全量数据算梯度准但慢
SGD每样本/小批量更新快、带噪声能跳出局部极小,但震荡
Momentum一阶动量 m(β₁=0.9)方向:加速、抑制震荡
AdaGrad累计梯度平方自适应步长,但步长单调衰减
RMSProp二阶动量 v步长:大梯度缩步、小梯度放步
Adamm + v 双动量Momentum + RMSProp 组合,默认首选
AdamWAdam + 解耦权重衰减大模型/Transformer 训练标配

Adam 更新步骤(默写级):

  1. 梯度 gₜ
  2. 一阶矩 mₜ = β₁·mₜ₋₁ + (1-β₁)gₜ(方向)
  3. 二阶矩 vₜ = β₂·vₜ₋₁ + (1-β₂)gₜ²(步长)
  4. 偏差校正:m̂ = m/(1-β₁ᵗ),v̂ = v/(1-β₂ᵗ)(起步时 m、v 为 0 需修正)
  5. 更新:θ ← θ - η·m̂/(√v̂ + ε)
  • 默认超参:β₁=0.9,β₂=0.999,ε=1e-8

学习率策略与工程

  • 衰减:分段常数、指数衰减、1/t 衰减、warmup(先小后大再衰减,Transformer 常用)
  • 工程要点:模型分层(简单任务小模型、复杂任务大模型,省 50-70% 成本)、梯度裁剪(防爆炸)、每轮 Token/步数预算

面试要点

  • 能手推一层线性层的梯度(dL/dW = 上游梯度 × 输入转置)
  • 能讲清 Adam = Momentum(方向)+ RMSProp(步长),并默写更新公式
  • 能解释梯度消失/爆炸的成因(链式乘积)与三个缓解手段
  • Agent 岗延伸:RLHF/PPO 的优化、在线 eval 采样、成本 FinOps 与模型路由

相关概念