← 返回笔记列表
深度学习 第 23 / 49 篇

深度学习:RMSProp 优化器 — 每个参数拥有自己的学习率

查看“深度学习”专题目录(23/49)
本文目录 9 个小节

1. 统一学习率的困境

所有参数共用一个学习率:

参数类型问题
梯度大的参数学习率稍大就在最优值附近振荡,收敛不了
梯度小的参数学习率稍小就几乎不动,学不到东西

你找不到一个学习率能同时适配所有参数。


2. RMSProp 的核心思想:自适应学习率

让每个参数有自己的”有效学习率”。

参数类型历史梯度除数有效学习率
梯度大的参数历史都很大除以大数变小,抑制振荡
梯度小的参数历史都很小除以小数变大,加速学习

一句话:历史梯度大 → 慢下来;历史梯度小 → 快起来。训练既稳定又高效。


3. 计算过程

以参数 ww 为例:

第一步:计算梯度

gw=∂loss∂wg_w = \frac{\partial \text{loss}}{\partial w}

第二步:更新历史梯度平方的指数加权平均 SwS_w

Sw=βSw+(1−β)gw2S_w = \beta S_w + (1-\beta) g_w^2
  • SwS_w 记录的是 gw2g_w^2 的历史平滑值,反映”这个参数的梯度一直有多大”
  • 取平方是为了:消除正负号影响 + 放大大小差异

第三步:用 SwS_w 来缩放学习率

w=w−lrSw+ε⋅gww = w - \frac{lr}{\sqrt{S_w} + \varepsilon} \cdot g_w
符号含义典型值
β\beta控制历史窗口的衰减系数0.9
ε\varepsilon防止除零的小常数1e-8
Sw\sqrt{S_w}开方是因为 SwS_w 存的是平方值,需还原到梯度的量级—

4. 对比

标准 SGDMomentumRMSProp
更新方向来源当前梯度梯度的指数加权平均当前梯度
学习率全局统一全局统一每个参数自适应
解决什么—振荡 + 局部最优不同参数梯度量级不匹配
核心机制w−=lr⋅gw -= lr \cdot gw−=lr⋅Vw -= lr \cdot Vw−=lrS⋅gw -= \frac{lr}{\sqrt{S}} \cdot g

5. PyTorch 中使用

optimizer = optim.RMSprop(model.parameters(), lr=0.001, alpha=0.9, eps=1e-8)
# alpha 对应 β(PyTorch 中参数名不同)

6. 总结

问题:所有参数共享一个学习率 → 大的振荡、小的停滞

RMSProp 解法:
  S = β·S + (1-β)·g²       ← 追踪梯度平方的历史
  w = w - lr/(√S+ε) · g     ← 历史大的除得多,历史小的除得少

效果:
  ├── 每个参数自适应学习率
  ├── 训练更稳定(大梯度被压制)
  └── 收敛更快(小梯度被放大)

预演:RMSProp + Momentum = Adam(下一节)
继续学习本专题