趋近智
标准梯度下降 (gradient descent) (SGD) 及其动量变体在更新所有参数 (parameter)时使用相同的学习率(可能受动量影响而缩放),但这可能不是最理想的。设想一个损失函数 (loss function),它在一个方向上非常陡峭,但在另一个方向上却相当平坦。单一的学习率可能会在陡峭方向上引起震荡,或者在平坦方向上移动过慢。我们需要一种方法来为每个参数单独调整学习率。
RMSprop(均方根传播)是一种优化算法,旨在通过保持每个参数各自的学习率来解决这个问题。它通过跟踪每个参数梯度平方的移动平均值来实现这一点。核心思想是将特定权重 (weight)的学习率除以该权重近期梯度幅度的运行平均值。
RMSprop 修改了梯度下降 (gradient descent)的更新规则。对于每个参数 (parameter)(以权重 (weight) 为例),它计算梯度平方的指数衰减平均值。设 为权重 在给定迭代中的此移动平均值。 的更新规则是:
这里:
参数更新规则随后使用此移动平均值来缩放学习率 :
类似地,对于偏置 (bias)参数 :
项 (或 )是近期梯度的均方根 (RMS),算法因此得名。添加小值 (epsilon,例如 )是为了数值稳定性,以防止在 可能变得非常接近零的情况下发生除以零的错误。
这如何提供帮助?
本质上,RMSprop 根据每个参数 (parameter)梯度的历史幅度自动调整其步长。
优点:
考量:
RMSprop 是优化算法中的一个重要进展。它通过引入基于近期梯度大小的、针对每个参数的调整,解决了单一全局学习率的局限性。
在 PyTorch 这样的框架中实现 RMSprop 简单明了。配置优化器时,只需从 torch.optim 模块中选择 RMSprop 即可。
import torch
import torch.nn as nn
import torch.optim as optim
# 假设您已定义模型,例如:
# model = nn.Sequential(nn.Linear(10, 5), nn.ReLU(), nn.Linear(5, 1))
# 定义输入数据和目标标签
# inputs = torch.randn(64, 10)
# labels = torch.randn(64, 1)
# loss_fn = nn.MSELoss()
# 示例:定义一个简单的线性模型用于演示
model = nn.Linear(10, 1)
# 定义超参数
learning_rate = 0.001
# 注意:PyTorch 使用 'alpha' 作为平滑常数(即我们符号中的 beta)
beta_rms = 0.99
epsilon = 1e-8
# 实例化 RMSprop 优化器
optimizer = optim.RMSprop(model.parameters(),
lr=learning_rate,
alpha=beta_rms, # 这是衰减率 beta
eps=epsilon,
momentum=0) # 标准 RMSprop 在此处没有动量项
# --- 训练步骤示例 ---
# 假设输入和标签可用
# optimizer.zero_grad() # 清除之前的梯度
# outputs = model(inputs) # 前向传播
# loss = loss_fn(outputs, labels) # 计算损失
# loss.backward() # 反向传播
# optimizer.step() # 使用 RMSprop 更新权重
# -----------------------------
print(f"已创建优化器: {optimizer}")
一个简单的例子,展示了如何在 PyTorch 中实例化 RMSprop 优化器。请注意,
optim.RMSprop中的参数 (parameter)alpha对应于算法描述中讨论的衰减率 。标准 RMSprop 本身不包含动量项,尽管 PyTorch 的实现允许添加(在此处设置为 0 以获得基本版本)。
RMSprop 提供了一种调整训练期间学习率的有效方法。下一节将介绍 Adam 优化器,它将 RMSprop 的自适应学习率方法与我们之前看到的动量原理结合起来,创建了当今深度学习 (deep learning)中最广泛使用的优化器之一。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•