Skip to content

梯度下降法

梯度下降(Gradient Descent)是训练机器学习模型的核心优化算法。它的基本思想是:沿着损失函数梯度的负方向迭代更新参数,逐步找到使损失函数最小的参数值。它是计算机实践中无法一步求解多层神经网络的最值,而采用的逐步微调逼近的思想,模型的参数在逐步逼近损失函数最小值的过程中得以确定。

基本原理

对于参数向量 θ,梯度下降的更新规则为:

θt+1=θtηJ(θt)

其中:

  • η 是学习率(learning rate),控制每次更新的步长
  • J(θt) 是损失函数在当前参数处的梯度
  • 负号表示沿着梯度下降的方向(使损失减小)

三种变体

批量梯度下降(Batch GD)

θt+1=θtη1mi=1mL(yi,f(xi;θt))
  • 特点:每次使用全部 m 个训练样本计算梯度
  • 优点:梯度准确,收敛稳定,理论保证强
  • 缺点:大数据集计算开销巨大,无法在线更新

随机梯度下降(SGD)

θt+1=θtηL(yi,f(xi;θt))
  • 特点:每次仅使用一个随机样本
  • 优点:更新速度快,可逃离浅层局部最优,支持在线学习
  • 缺点:梯度噪声大,收敛路径震荡,需要精细调节学习率

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

θt+1=θtη1biBtL(yi,f(xi;θt))

其中 Bt 是大小为 b 的随机小批量(batch size 常取 32、64、128 等)。

  • 特点:折中方案,深度学习的标准做法
  • 优点
    • 平衡计算效率和收敛稳定性
    • 充分利用 GPU 并行计算
    • 噪声适中,有助于泛化
  • 缺点:需要调节 batch size 超参数

现代优化器

为了加速收敛和提高训练稳定性,研究者提出了许多改进算法:

Momentum(动量法)

vt+1=βvt+ηJ(θt)θt+1=θtvt+1
  • 思想:引入速度(velocity)概念,积累历史梯度
  • 优点:加速收敛,减少震荡,更容易越过小坑
  • 典型参数β=0.9

AdaGrad(自适应梯度)

θt+1=θtηGt+ϵJ(θt)

其中 Gt 是历史梯度平方和。

  • 思想:为每个参数自适应调整学习率
  • 优点:稀疏特征学习效果好(如NLP)
  • 缺点:学习率单调递减,可能过早停止

RMSProp

Gt+1=βGt+(1β)(J(θt))2θt+1=θtηGt+1+ϵJ(θt)
  • 思想:改进 AdaGrad,使用指数加权移动平均
  • 优点:避免学习率过快衰减,适合非平稳目标

Adam(Adaptive Moment Estimation)

mt+1=β1mt+(1β1)J(θt)vt+1=β2vt+(1β2)(J(θt))2m^t+1=mt+11β1t+1,v^t+1=vt+11β2t+1θt+1=θtηv^t+1+ϵm^t+1
  • 思想:结合 Momentum 和 RMSProp
  • 优点
    • 对学习率不敏感
    • 收敛快速稳定
    • 适用范围广
  • 典型参数β1=0.9,β2=0.999,η=0.001
  • 地位:深度学习最常用的优化器

AdamW

θt+1=θtη(m^t+1v^t+1+ϵ+λθt)
  • 改进:修正了 Adam 中权重衰减的实现方式
  • 优点:更好的泛化性能,推荐用于 Transformer 等大模型

学习率调度策略

固定学习率往往不是最优选择,常用调度策略包括:

  1. Step Decay:每 N 个 epoch 降低学习率

    ηt=η0γt/N
  2. Exponential Decay:指数衰减

    ηt=η0eλt
  3. Cosine Annealing:余弦退火

    ηt=ηmin+12(ηmaxηmin)(1+cos(tπT))
  4. Warmup:前期逐渐增大学习率,避免初期不稳定

    ηt=ηbasemin(1,tTwarmup)

实践建议

调试技巧

  1. 监控损失曲线

    • 训练损失持续下降:模型正在学习
    • 训练损失不降:学习率可能过大或过小,或模型容量不足
    • 训练损失下降但验证损失上升:过拟合,需要正则化
  2. 检查梯度

    • 梯度消失:考虑改变激活函数、使用 BatchNorm、残差连接
    • 梯度爆炸:降低学习率、使用梯度裁剪、检查网络初始化
  3. 损失为 NaN

    • 学习率过大
    • 数值不稳定(如 log(0))
    • 梯度爆炸

超参数选择

超参数典型范围调整建议
学习率1e-4 ~ 1e-2最重要!建议用学习率查找器
Batch16 ~ 512显存允许的情况下尽量大
OptimizerAdam / AdamW首选 Adam,大模型用 AdamW
权重衰减1e-5 ~ 1e-3防止过拟合,从 1e-4 开始尝试
Dropout0.1 ~ 0.5过拟合时使用

常见陷阱

  1. 错误的损失函数选择

    • 回归任务用交叉熵 ❌
    • 多分类用 MSE ❌
    • Softmax 后接 Sigmoid 交叉熵 ❌
  2. 数据预处理不当

    • 回归任务目标值未归一化
    • 分类任务标签编码错误
    • 训练集和测试集归一化参数不一致
  3. 忽略类别不平衡

    • 99% 准确率可能毫无意义
    • 考虑使用加权损失或重采样