梯度下降

梯度下降是训练神经网络最核心的优化算法。通过沿损失函数梯度的反方向更新参数,模型逐步找到最优解。

学习难度:入门·阅读时间:约10分钟

什么是梯度下降

核心思想

梯度下降是一种迭代优化方法:

  • 计算损失函数关于参数的梯度
  • 沿梯度的反方向移动
  • 逐步接近损失函数的最小值

数学表达

θ = θ - η × ∇L(θ)

其中θ是参数,η是学习率,∇L是损失函数的梯度。

为什么沿着负梯度方向

  • 梯度指向函数增长最快的方向
  • 负梯度指向函数下降最快的方向
  • 沿此方向移动可以最快降低损失

梯度下降变体

批量梯度下降(BGD)

每次使用全部数据计算梯度:

  • ✅ 梯度准确,收敛稳定
  • ❌ 速度慢,内存占用大
  • ❌ 无法处理大数据集

随机梯度下降(SGD)

每次使用一个样本计算梯度:

  • ✅ 计算快,可以在线学习
  • ✅ 有助于跳出局部最优
  • ❌ 梯度噪声大,收敛震荡

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

每次使用一小批样本:

  • ✅ 平衡了计算效率和梯度准确性
  • ✅ 可以利用向量化加速
  • ✅ 实践中最常用

典型批次大小

场景批次大小
小模型/小数据32, 64, 128
大模型预训练256, 512, 1024+
GPU内存受限梯度累积

学习率

学习率的作用

学习率控制每次更新的步长:

  • 太小:收敛太慢
  • 太大:可能震荡或发散
  • 需要找到合适的平衡

学习率调度

步进衰减

每N轮将学习率乘以衰减因子。

指数衰减

学习率按指数函数衰减。

余弦退火

学习率按余弦曲线变化,大模型训练常用。

预热(Warmup)

开始时逐步增加学习率,防止早期不稳定。

面临的挑战

局部最优

梯度下降可能陷入局部最优而非全局最优。但在高维空间中,真正的局部最优很少,更多是鞍点。

鞍点

某些方向是极小值,某些方向是极大值:

  • 高维空间中很常见
  • SGD的噪声有助于逃离

病态曲率

损失曲面在不同方向上曲率差异大:

  • 某些方向下降快,某些方向下降慢
  • 导致震荡或收敛缓慢
  • 自适应优化器可以缓解

优化技巧

动量(Momentum)

累积历史梯度方向:

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

动量有助于加速收敛并减少震荡。

自适应方法

  • AdaGrad:根据历史梯度调整学习率
  • RMSprop:改进AdaGrad,使用滑动平均
  • Adam:结合动量和自适应学习率

梯度裁剪

限制梯度的最大范数:

  • 防止梯度爆炸
  • RNN训练中常用

直观理解

下山类比

梯度下降可以类比为蒙眼下山:

  • 当前位置是参数值
  • 海拔高度是损失值
  • 梯度是山坡最陡的方向
  • 学习率是每一步的步长

不同优化器的行为

  • SGD:沿最陡方向走,可能曲折
  • Momentum:保持惯性,走得更直
  • Adam:自适应调整步长,走得更快
----