梯度下降优化-RMSProp
1. 问题引入
AdaGrad 的问题:
AdaGrad 通过累积所有历史梯度的平方和来自适应调整学习率,但这种方法存在一个严重问题:
- 学习率衰减过快:随着训练进行,累积梯度平方和 $G_t$ 单调递增,学习率 $\eta / \sqrt{G_t + \epsilon}$ 会越来越小
- 过早停止:在训练后期,学习率变得极小,参数几乎不再更新,可能无法收敛到最优解
- 无法适应非平稳问题:对于非平稳优化问题(损失函数形状变化),AdaGrad 无法适应
RMSProp 的解决方案:
RMSProp(Root Mean Square Propagation)由 Geoff Hinton 提出,通过使用 指数移动平均(Exponential Moving Average, EMA) 来替代简单累加,解决了 AdaGrad 学习率衰减过快的问题。
核心改进:
- 使用指数移动平均累积梯度平方,给最近的梯度更大的权重
- 学习率不会无限衰减,能够适应非平稳优化问题
- 在深度学习中表现优异,是 Adam 等更先进算法的基础

2. 理解 RMSProp
2.1 生活中的类比:记忆衰减
想象你在学习一门新技能(比如学习优化算法):
AdaGrad 的类比(简单累加):
- 你记录下所有学过的知识点,每学一个就加一个
- 随着学习时间增长,记录本越来越厚
- 当你需要复习时,你发现记录本太厚了,不知道重点在哪里
- 就像学习率越来越小,最后几乎不更新了
RMSProp 的类比(指数移动平均):
- 你使用"记忆衰减"的方式记录知识点
- 最近学的知识记得更清楚(权重更大)
- 很久以前学的知识逐渐淡忘(权重变小)
- 这样你的记忆本不会无限增长,而且总是关注最近的重要信息
- 就像 RMSProp 的学习率不会无限衰减,而且能适应新的梯度信息
2.2 股票价格的类比
AdaGrad 类似简单移动平均:
- 计算所有历史价格的平均值
- 随着时间增长,历史数据越来越多,平均值变化越来越慢
- 无法快速响应价格的新变化
RMSProp 类似指数移动平均(EMA):
- 给最近的价格更大的权重
- 能够快速响应价格的新变化
- 同时保留历史信息,但不会让历史信息完全主导
2.3 优化问题的具体场景
假设我们在优化一个损失函数,有两个参数 $\theta_1$ 和 $\theta_2$:
场景:非平稳优化问题
- 前100步:$\theta_1$ 的梯度一直很大(比如都是 10),$\theta_2$ 的梯度一直很小(比如都是 0.1)
- 第101步开始:由于损失函数形状变化,$\theta_1$ 的梯度突然变小(变成 0.1),$\theta_2$ 的梯度突然变大(变成 10)
AdaGrad 的问题:
- 对于 $\theta_1$:前100步累积了 $100 \times 10^2 = 10000$,学习率已经很小
- 即使第101步梯度变小,学习率仍然很小,无法快速适应新情况
- 对于 $\theta_2$:前100步累积了 $100 \times 0.1^2 = 1$,学习率还比较大
- 但第101步梯度突然变大,可能更新过快
RMSProp 的优势:
- 使用指数移动平均,最近的梯度权重更大
- 对于 $\theta_1$:虽然历史梯度大,但最近的梯度小,累积值会逐渐减小,学习率会逐渐恢复
- 对于 $\theta_2$:虽然历史梯度小,但最近的梯度大,累积值会快速增大,学习率会快速减小
- 能够适应非平稳优化问题!

================================================================================
非平稳优化问题对比分析
================================================================================
第50步(梯度变化前):
AdaGrad 学习率: 0.001414
RMSProp 学习率: 0.010026
第51步(梯度变化后):
AdaGrad 学习率: 0.001414 (变化: 1.0000x)
RMSProp 学习率: 0.010568 (变化: 1.0541x)
第51步更新量:
AdaGrad 更新量: 0.000141
RMSProp 更新量: 0.001057
RMSProp 是 AdaGrad 的 7.47 倍
关键观察:
- AdaGrad 学习率几乎不变,无法适应梯度变化
- RMSProp 学习率快速增大,能够适应新的梯度模式
3. AdaGrad 回顾:理解问题所在
3.1 AdaGrad 的更新公式
AdaGrad 的更新公式:
$$
G_t = G_{t-1} + g_t^2
$$
$$
\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{G_t + \epsilon}} \cdot g_t
$$
其中:
- $g_t = \nabla_\theta L(\theta_t)$:第 $t$ 步的梯度
- $G_t$:累积梯度平方和(从第1步到第 $t$ 步)
- $\eta$:初始学习率
- $\epsilon$:小常数(通常 $10^{-8}$),防止除零
3.2 AdaGrad 的问题分析
问题1:$G_t$ 单调递增
$$
G_t = g_1^2 + g_2^2 + \cdots + g_t^2
$$
由于 $g_i^2 \geq 0$,所以 $G_t$ 是单调递增的:
$$
G_1 < G_2 < G_3 < \cdots < G_t
$$
问题2:学习率单调递减
$$
\text{学习率}_t = \frac{\eta}{\sqrt{G_t + \epsilon}}
$$
由于 $G_t$ 单调递增,所以学习率单调递减:
$$
\text{学习率}_1 > \text{学习率}_2 > \text{学习率}_3 > \cdots > \text{学习率}_t
$$
问题3:学习率趋于零
当 $t \to \infty$ 时,如果梯度不为零,则 $G_t \to \infty$,因此:
$$
\lim_{t \to \infty} \frac{\eta}{\sqrt{G_t + \epsilon}} = 0
$$
这意味着在训练后期,参数几乎不再更新!
3.3 数值示例
假设 $\eta = 0.1$,$\epsilon = 10^{-8}$,每步梯度都是 $g_t = 1$:
| 步数$t$ | $G_t$ | 学习率 | 更新步长 |
|---|---|---|---|
| 1 | 1 | 0.100 | 0.100 |
| 10 | 10 | 0.032 | 0.032 |
| 100 | 100 | 0.010 | 0.010 |
| 1000 | 1000 | 0.003 | 0.003 |
| 10000 | 10000 | 0.001 | 0.001 |
可以看到,即使梯度保持不变,学习率也在不断减小!

初始学习率: 0.100000
第10步学习率: 0.031623
第100步学习率: 0.010000
第1000步学习率: 0.003162
学习率衰减比例(第1000步/第1步): 0.0316
5. RMSProp 的数学公式详解
5.1 RMSProp 的完整更新公式
RMSProp 的核心更新公式包含两个主要步骤:
步骤1:更新梯度平方的指数移动平均
$$
E[g^2]t = \beta \cdot E[g^2]{t-1} + (1-\beta) \cdot g_t^2
$$
步骤2:更新参数
$$
\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{E[g^2]_t + \epsilon}} \cdot g_t
$$
5.2 公式中每一项的详细说明
5.2.1 梯度 $g_t$
$$
g_t = \nabla_\theta L(\theta_t)
$$
含义:
- $g_t$ 表示在第 $t$ 步迭代时,损失函数 $L(\theta)$ 关于参数 $\theta$ 的梯度
- 梯度指向损失函数增长最快的方向
- 在优化过程中,我们沿着梯度的负方向更新参数以减小损失
计算方式:
- 对于单参数:$g_t = \frac{\partial L}{\partial \theta}\Big|_{\theta=\theta_t}$
- 对于多参数:$g_t$ 是一个向量,每个分量对应一个参数的偏导数
示例:
- 如果损失函数是 $L(\theta) = \theta^2$,则 $g_t = 2\theta_t$
- 如果 $\theta_t = 3$,则 $g_t = 2 \times 3 = 6$
5.2.2 梯度平方 $g_t^2$
$$
g_t^2 = (\nabla_\theta L(\theta_t))^2
$$
含义:
- $g_t^2$ 是当前梯度 $g_t$ 的平方
- 对于多参数情况,$g_t^2$ 表示逐元素的平方(element-wise square)
- 梯度平方反映了当前梯度的"大小"或"强度"
作用:
- 用于估计梯度的方差或二阶矩
- 梯度平方越大,说明该方向的梯度变化越剧烈
- RMSProp 使用梯度平方来调整学习率:梯度平方大的方向,学习率会相应减小
示例:
- 如果 $g_t = 6$,则 $g_t^2 = 36$
- 如果 $g_t = 0.1$,则 $g_t^2 = 0.01$
5.2.3 梯度平方的指数移动平均 $E[g^2]_t$
$$
E[g^2]t = \beta \cdot E[g^2]{t-1} + (1-\beta) \cdot g_t^2
$$
含义:
- $E[g^2]_t$ 表示到第 $t$ 步为止,梯度平方的指数移动平均(Exponential Moving Average, EMA)
- 这是 RMSProp 的核心创新,替代了 AdaGrad 中的简单累加
递推关系:
- 初始值:$E[g^2]_0 = 0$(或初始化为一个很小的值)
- 更新规则:$E[g^2]t = \beta \cdot E[g^2]{t-1} + (1-\beta) \cdot g_t^2$
展开形式:
$$
E[g^2]t = (1-\beta) \sum{i=1}^{t} \beta^{t-i} \cdot g_i^2
$$
这个展开式表明:
- 第 $i$ 步的梯度平方 $g_i^2$ 的权重是 $(1-\beta) \beta^{t-i}$
- 最近的梯度($i$ 接近 $t$)权重更大
- 历史梯度($i$ 远离 $t$)权重指数衰减
权重分布示例($\beta = 0.9$):
- 当前梯度 $g_t^2$ 的权重:$(1-0.9) \times 0.9^0 = 0.1$
- 上一步梯度 $g_{t-1}^2$ 的权重:$(1-0.9) \times 0.9^1 = 0.09$
- 两步前梯度 $g_{t-2}^2$ 的权重:$(1-0.9) \times 0.9^2 = 0.081$
- 十步前梯度 $g_{t-10}^2$ 的权重:$(1-0.9) \times 0.9^{10} \approx 0.035$
关键特性:
- 有界性:$E[g^2]_t$ 不会无限增长,而是趋向于一个稳定值
- 适应性:如果梯度模式发生变化,$E[g^2]_t$ 能够快速适应新的梯度大小
- 记忆衰减:历史梯度的影响会随时间指数衰减
5.2.4 衰减系数 $\beta$(Beta)
含义:
- $\beta$ 是衰减系数(decay rate),控制历史信息的权重
- $\beta$ 的取值范围:$0 < \beta < 1$,通常取 $\beta = 0.9$ 或 $\beta = 0.99$
作用:
-
$\beta$ 越大(如 0.99):
- 历史信息权重更大,$E[g^2]_t$ 变化更缓慢
- 对梯度变化的响应更慢,更稳定
- 适合梯度变化缓慢的优化问题
-
$\beta$ 越小(如 0.5):
- 当前信息权重更大,$E[g^2]_t$ 变化更快
- 对梯度变化的响应更快,更灵活
- 适合梯度变化快速的优化问题
权重分配:
- 当前梯度权重:$(1-\beta)$
- 历史梯度权重:$\beta$
- 总权重:$(1-\beta) + \beta = 1$(归一化)
常见选择:
- $\beta = 0.9$:默认值,适合大多数情况
- $\beta = 0.99$:梯度变化非常缓慢的情况
- $\beta = 0.5$:梯度变化非常快速的情况
5.2.5 学习率 $\eta$(Eta)
含义:
- $\eta$ 是初始学习率(learning rate),控制参数更新的步长
- 学习率是优化算法中最重要的超参数之一
作用:
- 学习率越大,参数更新步长越大,收敛可能更快,但可能不稳定
- 学习率越小,参数更新步长越小,收敛更稳定,但可能较慢
在 RMSProp 中:
- RMSProp 使用自适应学习率:$\text{有效学习率} = \frac{\eta}{\sqrt{E[g^2]_t + \epsilon}}$
- 实际的学习率会根据 $E[g^2]_t$ 动态调整
- 梯度平方大的方向,有效学习率会减小
- 梯度平方小的方向,有效学习率会增大
常见选择:
- $\eta = 0.001$:深度学习中的常用默认值
- $\eta = 0.01$:较小的模型或简单问题
- $\eta = 0.1$:简单优化问题
与 AdaGrad 的对比:
- AdaGrad:学习率单调递减,最终趋于零
- RMSProp:学习率有界,不会无限衰减
5.2.6 小常数 $\epsilon$(Epsilon)
含义:
- $\epsilon$ 是一个很小的正数,通常取 $10^{-8}$
- 添加到分母 $\sqrt{E[g^2]_t + \epsilon}$ 中,防止除零错误
作用:
-
数值稳定性:
- 当 $E[g^2]_t = 0$ 时(初始状态或梯度为零),$\sqrt{E[g^2]_t} = 0$ 会导致除零错误
- 添加 $\epsilon$ 后,$\sqrt{E[g^2]_t + \epsilon} \geq \sqrt{\epsilon} > 0$,避免除零
-
防止学习率过大:
- 当 $E[g^2]_t$ 很小时,$\frac{\eta}{\sqrt{E[g^2]_t}}$ 会很大
- 添加 $\epsilon$ 后,学习率有上界:$\frac{\eta}{\sqrt{E[g^2]_t + \epsilon}} \leq \frac{\eta}{\sqrt{\epsilon}}$
常见选择:
- $\epsilon = 10^{-8}$:最常用的默认值
- $\epsilon = 10^{-7}$:某些实现中的选择
- $\epsilon$ 不能太大:否则会影响自适应学习率的效果
数值示例:
- 如果 $E[g^2]_t = 0$,则 $\sqrt{E[g^2]_t + 10^{-8}} = \sqrt{10^{-8}} = 10^{-4}$
- 如果 $E[g^2]_t = 1$,则 $\sqrt{E[g^2]_t + 10^{-8}} \approx \sqrt{1} = 1$($\epsilon$ 的影响可忽略)
5.2.7 自适应学习率 $\frac{\eta}{\sqrt{E[g^2]_t + \epsilon}}$
$$
\text{自适应学习率} = \frac{\eta}{\sqrt{E[g^2]_t + \epsilon}}
$$
含义:
- 这是 RMSProp 的核心创新:每个参数(或每个方向)都有自己的自适应学习率
- 学习率不是固定的,而是根据梯度平方的历史平均值动态调整
工作原理:
- 梯度平方大 → $E[g^2]_t$ 大 → 分母大 → 学习率小 → 更新步长小
- 梯度平方小 → $E[g^2]_t$ 小 → 分母小 → 学习率大 → 更新步长大
优势:
- 自适应调整:不同参数有不同的学习率,适应各自的梯度特性
- 稳定训练:梯度大的方向更新更谨慎,避免震荡
- 加速收敛:梯度小的方向更新更大胆,加快收敛
与 AdaGrad 的对比:
- AdaGrad:$\frac{\eta}{\sqrt{G_t + \epsilon}}$,其中 $G_t$ 单调递增,学习率单调递减
- RMSProp:$\frac{\eta}{\sqrt{E[g^2]_t + \epsilon}}$,其中 $E[g^2]_t$ 有界,学习率有下界
数值示例:
- 假设 $\eta = 0.1$,$\epsilon = 10^{-8}$
- 如果 $E[g^2]_t = 1$,则学习率 $= \frac{0.1}{\sqrt{1 + 10^{-8}}} \approx 0.1$
- 如果 $E[g^2]_t = 100$,则学习率 $= \frac{0.1}{\sqrt{100 + 10^{-8}}} = 0.01$
- 如果 $E[g^2]_t = 0.01$,则学习率 $= \frac{0.1}{\sqrt{0.01 + 10^{-8}}} \approx 1.0$
5.2.8 参数更新量 $\frac{\eta}{\sqrt{E[g^2]_t + \epsilon}} \cdot g_t$
$$
\Delta \theta_t = -\frac{\eta}{\sqrt{E[g^2]_t + \epsilon}} \cdot g_t
$$
含义:
- 这是第 $t$ 步的参数更新量(更新步长)
- 负号表示沿着梯度的负方向(损失函数减小的方向)更新
组成:
- 方向:$-g_t$(梯度的负方向)
- 步长:$\frac{\eta}{\sqrt{E[g^2]_t + \epsilon}}$(自适应学习率)
更新规则:
$$
\theta_{t+1} = \theta_t + \Delta \theta_t = \theta_t - \frac{\eta}{\sqrt{E[g^2]_t + \epsilon}} \cdot g_t
$$
特性:
- 更新量的大小取决于:
- 当前梯度 $g_t$ 的大小
- 梯度平方的历史平均值 $E[g^2]_t$
- 初始学习率 $\eta$
示例:
- 如果 $g_t = 6$,$E[g^2]_t = 36$,$\eta = 0.1$,$\epsilon = 10^{-8}$
- 则更新量 $= -\frac{0.1}{\sqrt{36 + 10^{-8}}} \times 6 = -\frac{0.1}{6} \times 6 = -0.1$
- 参数更新:$\theta_{t+1} = \theta_t - 0.1$
5.3 RMSProp 算法的完整流程
初始化:
- 参数:$\theta_0$(初始参数值)
- 梯度平方的指数移动平均:$E[g^2]_0 = 0$
- 超参数:$\eta$(学习率),$\beta$(衰减系数),$\epsilon$(小常数)
迭代过程(对于每一步 $t = 1, 2, 3, \ldots$):
-
计算梯度:
$$
g_t = \nabla_\theta L(\theta_t)
$$ -
更新梯度平方的指数移动平均:
$$
E[g^2]t = \beta \cdot E[g^2]{t-1} + (1-\beta) \cdot g_t^2
$$ -
计算自适应学习率:
$$
\text{lr}_t = \frac{\eta}{\sqrt{E[g^2]_t + \epsilon}}
$$ -
更新参数:
$$
\theta_{t+1} = \theta_t - \text{lr}_t \cdot g_t
$$ -
检查收敛:如果满足收敛条件,停止迭代;否则继续
5.4 公式总结表
| 符号 | 名称 | 含义 | 典型值 |
|---|---|---|---|
| $g_t$ | 梯度 | 第$t$ 步的梯度 | 计算得出 |
| $g_t^2$ | 梯度平方 | 梯度的平方 | 计算得出 |
| $E[g^2]_t$ | 梯度平方的指数移动平均 | 梯度平方的历史加权平均 | 递推计算 |
| $\beta$ | 衰减系数 | 控制历史信息的权重 | 0.9 |
| $\eta$ | 学习率 | 初始学习率 | 0.001 或 0.01 |
| $\epsilon$ | 小常数 | 防止除零 | $10^{-8}$ |
| $\theta_t$ | 参数 | 第$t$ 步的参数值 | 优化目标 |
| $\theta_{t+1}$ | 更新后的参数 | 第$t+1$ 步的参数值 | 优化目标 |
5.5 关键公式的数学性质
5.5.1 $E[g^2]_t$ 的有界性
性质: 如果梯度有界,即 $|g_t| \leq M$,则 $E[g^2]_t$ 有上界。
证明:
$$
E[g^2]t = (1-\beta) \sum{i=1}^{t} \beta^{t-i} \cdot g_i^2 \leq (1-\beta) \sum_{i=1}^{t} \beta^{t-i} \cdot M^2
$$
当 $t \to \infty$ 时:
$$
\lim_{t \to \infty} E[g^2]t \leq (1-\beta) M^2 \sum{i=0}^{\infty} \beta^i = (1-\beta) M^2 \cdot \frac{1}{1-\beta} = M^2
$$
因此,$E[g^2]_t \leq M^2$,有上界。
意义: 学习率 $\frac{\eta}{\sqrt{E[g^2]_t + \epsilon}} \geq \frac{\eta}{\sqrt{M^2 + \epsilon}}$ 有下界,不会趋于零。
5.5.2 权重归一化
性质: 展开式中的权重总和为 $1-\beta^t$。
证明:
$$
\sum_{i=1}^{t} (1-\beta) \beta^{t-i} = (1-\beta) \sum_{j=0}^{t-1} \beta^j = (1-\beta) \cdot \frac{1-\beta^t}{1-\beta} = 1-\beta^t
$$
当 $t$ 很大时,$1-\beta^t \approx 1$,权重近似归一化。
意义: $E[g^2]_t$ 可以理解为梯度平方的加权平均,权重总和接近 1。
5.5.3 有效窗口大小
定义: 有效窗口大小是指包含总权重的一定比例(如 90%)所需的步数。
计算: 对于 $\beta = 0.9$,包含 90% 权重的步数 $k$ 满足:
$$
(1-\beta) \sum_{j=0}^{k-1} \beta^j = 1-\beta^k \geq 0.9
$$
解得:$k \geq \frac{\ln(0.1)}{\ln(0.9)} \approx 22$ 步
意义: RMSProp 主要关注最近约 20-30 步的梯度信息,历史更远的信息影响很小。

5.6 RMSProp 的详细计算示例
5.6.1 单参数优化示例
假设我们要优化函数 $f(\theta) = \theta^2$,初始值 $\theta_0 = 3$。
参数设置:
- 学习率 $\eta = 0.1$
- 衰减系数 $\beta = 0.9$
- 小常数 $\epsilon = 10^{-8}$
梯度计算:
$$
g_t = \frac{\partial f}{\partial \theta} = 2\theta_t
$$
让我们逐步计算前5步:
初始状态:
- $\theta_0 = 3$
- $E[g^2]_0 = 0$
第1步:
- $g_1 = 2 \times 3 = 6$
- $E[g^2]_1 = 0.9 \times 0 + 0.1 \times 6^2 = 0 + 3.6 = 3.6$
- 学习率 = $\frac{0.1}{\sqrt{3.6 + 10^{-8}}} \approx 0.0527$
- $\theta_1 = 3 - 0.0527 \times 6 = 3 - 0.316 = 2.684$
第2步:
- $g_2 = 2 \times 2.684 = 5.368$
- $E[g^2]_2 = 0.9 \times 3.6 + 0.1 \times 5.368^2 = 3.24 + 2.879 = 6.119$
- 学习率 = $\frac{0.1}{\sqrt{6.119 + 10^{-8}}} \approx 0.0404$
- $\theta_2 = 2.684 - 0.0404 \times 5.368 = 2.684 - 0.217 = 2.467$
第3步:
- $g_3 = 2 \times 2.467 = 4.934$
- $E[g^2]_3 = 0.9 \times 6.119 + 0.1 \times 4.934^2 = 5.507 + 2.434 = 7.941$
- 学习率 = $\frac{0.1}{\sqrt{7.941 + 10^{-8}}} \approx 0.0355$
- $\theta_3 = 2.467 - 0.0355 \times 4.934 = 2.467 - 0.175 = 2.292$
第4步:
- $g_4 = 2 \times 2.292 = 4.584$
- $E[g^2]_4 = 0.9 \times 7.941 + 0.1 \times 4.584^2 = 7.147 + 2.101 = 9.248$
- 学习率 = $\frac{0.1}{\sqrt{9.248 + 10^{-8}}} \approx 0.0329$
- $\theta_4 = 2.292 - 0.0329 \times 4.584 = 2.292 - 0.151 = 2.141$
第5步:
- $g_5 = 2 \times 2.141 = 4.282$
- $E[g^2]_5 = 0.9 \times 9.248 + 0.1 \times 4.282^2 = 8.323 + 1.834 = 10.157$
- 学习率 = $\frac{0.1}{\sqrt{10.157 + 10^{-8}}} \approx 0.0314$
- $\theta_5 = 2.141 - 0.0314 \times 4.282 = 2.141 - 0.134 = 2.007$
5.6.2 关键观察
-
$E[g^2]_t$ 的变化:从 3.6 → 6.119 → 7.941 → 9.248 → 10.157
- 虽然递增,但增长速度在减慢(因为梯度在减小)
- 不会像 AdaGrad 那样无限增长
-
学习率的变化:从 0.0527 → 0.0404 → 0.0355 → 0.0329 → 0.0314
- 学习率在减小,但减小的速度在减慢
- 不会像 AdaGrad 那样趋于零
-
参数更新的效果:$\theta$ 从 3 → 2.684 → 2.467 → 2.292 → 2.141 → 2.007
- 逐渐接近最优值 0
- 更新步长适中,不会过大或过小

================================================================================
RMSProp 详细计算示例:f(θ) = θ²
================================================================================
初始参数:θ₀ = 3.0
学习率:η = 0.1
衰减系数:β = 0.9
小常数:ε = 1e-08
================================================================================
步数 θ g E[g²] 学习率 更新量 θ_new
--------------------------------------------------------------------------------
1 3.000000 6.000000 3.600000 0.052705 -0.316228 2.683772
2 2.683772 5.367544 6.121053 0.040419 -0.216951 2.466821
3 2.466821 4.933642 7.943030 0.035482 -0.175055 2.291766
4 2.291766 4.583532 9.249603 0.032881 -0.150709 2.141057
5 2.141057 4.282114 10.158293 0.031375 -0.134353 2.006704
6 2.006704 4.013408 10.753208 0.030495 -0.122390 1.884314
7 1.884314 3.768629 11.098143 0.030018 -0.113125 1.771189
8 1.771189 3.542379 11.243173 0.029823 -0.105645 1.665544
9 1.665544 3.331088 11.228471 0.029843 -0.099409 1.566135
10 1.566135 3.132270 11.086735 0.030033 -0.094071 1.472064
================================================================================
最终参数:θ = 1.472064
最优值:θ* = 0.0
误差:|θ - θ*| = 1.472064
================================================================================
6. RMSProp 的变体形式
6.1 标准形式(我们使用的)
$$
E[g^2]t = \beta \cdot E[g^2]{t-1} + (1-\beta) \cdot g_t^2
$$
$$
\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{E[g^2]_t + \epsilon}} \cdot g_t
$$
6.2 另一种常见形式
有些文献中使用以下形式:
$$
E[g^2]t = \beta \cdot E[g^2]{t-1} + g_t^2
$$
$$
\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{E[g^2]_t + \epsilon}} \cdot g_t
$$
区别: 在更新 $E[g^2]_t$ 时,没有 $(1-\beta)$ 系数。
等价性: 这两种形式在数学上不等价,但可以通过调整 $\beta$ 和学习率 $\eta$ 来达到相似的效果。
我们使用标准形式的原因:
- 权重归一化:$(1-\beta) \sum_{i=1}^{t} \beta^{t-i} = 1-\beta^t \approx 1$(当 $t$ 很大时)
- 更符合指数移动平均的标准定义
- 与 Adam 等后续算法保持一致
6.3 参数 $\beta$ 的选择
$\beta$ 的影响:
| $\beta$ 值 | 历史信息权重 | 当前信息权重 | 适用场景 |
|---|---|---|---|
| 0.9 | 大 | 小 | 默认选择,适合大多数情况 |
| 0.99 | 很大 | 很小 | 梯度变化缓慢的情况 |
| 0.5 | 小 | 大 | 梯度变化快速的情况 |
经验法则:
- 大多数情况下,$\beta = 0.9$ 是一个很好的默认值
- 如果优化过程不稳定,可以尝试减小 $\beta$(如 0.5)
- 如果优化过程过于保守,可以尝试增大 $\beta$(如 0.99)
6.4 学习率 $\eta$ 的选择
RMSProp 的学习率选择:
- RMSProp 对学习率的选择比 AdaGrad 更不敏感
- 通常可以使用比 AdaGrad 稍大的学习率
- 常见的选择:0.001, 0.01, 0.1
- 建议从 0.001 开始,根据训练效果调整
7. RMSProp 、AdaGrad 、普通梯度下降完整对比
7.1 算法对比总结
| 特性 | 普通梯度下降 | AdaGrad | RMSProp |
|---|---|---|---|
| 学习率 | 固定 | 自适应(单调递减) | 自适应(有界) |
| 历史信息 | 不使用 | 简单累加 | 指数移动平均 |
| 学习率衰减 | 无 | 过快,趋于零 | 适中,有界 |
| 非平稳适应 | 无 | 差 | 好 |
| 参数 | $\eta$ | $\eta, \epsilon$ | $\eta, \beta, \epsilon$ |
| 适用场景 | 简单凸优化 | 稀疏梯度问题 | 深度学习、非平稳问题 |
7.2 数学公式对比
普通梯度下降:
$$
\theta_{t+1} = \theta_t - \eta \cdot g_t
$$
AdaGrad:
$$
G_t = G_{t-1} + g_t^2
$$
$$
\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{G_t + \epsilon}} \cdot g_t
$$
RMSProp:
$$
E[g^2]t = \beta \cdot E[g^2]{t-1} + (1-\beta) \cdot g_t^2
$$
$$
\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{E[g^2]_t + \epsilon}} \cdot g_t
$$
7.3 关键区别
-
历史信息的处理方式
- AdaGrad:简单累加,所有历史梯度权重相等
- RMSProp:指数移动平均,最近梯度权重更大
-
学习率的衰减
- AdaGrad:单调递减,趋于零
- RMSProp:有界衰减,能够适应非平稳问题
-
计算复杂度
- 两者相同:都是 $O(n)$,其中 $n$ 是参数数量
- 都需要存储每个参数的累积值($G_t$ 或 $E[g^2]_t$)
测试函数:Rosenbrock 函数(经典的优化测试函数)
f(x, y) = (1-x)² + 100(y-x²)²

8. RMSProp 的优缺点总结
8.1 优点
-
解决 AdaGrad 学习率衰减过快的问题
- 使用指数移动平均,学习率不会无限衰减
- 能够适应非平稳优化问题
-
自适应学习率
- 每个参数有自己的学习率
- 梯度大的参数学习率小,梯度小的参数学习率大
-
计算效率高
- 计算复杂度与 AdaGrad 相同:$O(n)$
- 只需要存储每个参数的 $E[g^2]_t$
-
在深度学习中表现优异
- 是 Adam 等更先进算法的基础
- 适合处理大规模神经网络
-
对超参数不敏感
- 默认参数($\beta=0.9$)在大多数情况下表现良好
- 比 AdaGrad 对学习率的选择更不敏感
8.2 缺点
-
仍然可能陷入局部最优
- 与所有基于梯度的优化算法一样,可能陷入局部最优
- 需要结合其他技术(如学习率调度、动量等)
-
需要额外的超参数
- 需要选择衰减系数 $\beta$
- 虽然默认值通常有效,但在某些问题上可能需要调整
-
内存开销
- 需要存储每个参数的 $E[g^2]_t$
- 对于超大规模模型,内存开销可能较大
-
可能的学习率过小
- 在某些情况下,$E[g^2]_t$ 可能很大,导致学习率过小
- 需要合理设置初始学习率 $\eta$
8.3 适用场景
RMSProp 特别适合:
- 深度学习(神经网络训练)
- 非平稳优化问题
- 稀疏梯度问题
- 大规模参数优化
RMSProp 可能不适合:
- 简单的凸优化问题(普通梯度下降可能更简单)
- 需要精确控制学习率衰减的问题
- 内存受限的场景
8.4 与其他算法的关系
RMSProp 是以下算法的基础:
- Adam:RMSProp + Momentum
- AdaDelta:RMSProp 的改进版本(不需要学习率)
- Nadam:Adam + Nesterov 加速梯度
RMSProp 的改进方向:
- 结合动量(Momentum)→ Adam
- 自适应学习率衰减 → AdaDelta
- 二阶信息 → 自然梯度方法