趋近智
AdaGrad引入了根据每个参数的梯度历史调整学习率的强大思想。然而,AdaGrad的一个主要缺点是在分母中不断累积梯度的平方。随着时间的推移,这个和会持续增大,导致有效学习率单调减小,并最终变得无限小。这种过快的衰减可能会提前停止学习过程,在深度学习中常见的非凸优化场景下,即使经过许多次迭代,可能仍需要持续优化。
RMSprop(均方根传播)与AdaGrad大约在同一时间独立开发,旨在解决这种快速衰减问题。RMSprop的核心在于使用梯度的平方的指数衰减移动平均,而不是累加所有过去的梯度平方。这种方法赋予近期梯度信息更大的权重,并能有效地“遗忘”久远的过去。
相对于为每个参数保留所有过去梯度平方的总和 Gt,RMSprop保留了梯度均方的估计值,表示为 E[g2]t。这个值在每个时间步 t 使用衰减率超参数 β(通常在0.9到0.99之间)进行更新:
E[g2]t=βE[g2]t−1+(1−β)gt2这里:
这种计算方式确保 E[g2]t 主要受近期梯度平方的影响。如果近期梯度值较大,E[g2]t 也会较大;如果梯度值较小,它就会减小。
RMSprop的参数更新规则随后在分母中使用该移动平均的平方根,这与AdaGrad类似,但重要的是,它使用了自适应的 E[g2]t,而不是不断增大的总和:
θt+1=θt−E[g2]t+ϵηgt其中:
通过使用指数衰减平均 E[g2]t,RMSprop阻止了分母项 E[g2]t+ϵ 在整个训练过程中单调增长。它会适应每个参数近期梯度的量级。如果一个参数的梯度在最初较大后变小,E[g2]t 会随时间减小,这使得该参数的有效学习率有可能再次提高,这与AdaGrad中学习率会保持受抑制的情况不同。这种适应性使得RMSprop在长时间训练深度神经网络时更为有效。
思考分母可能如何演变:
AdaGrad的分母项因累加所有过去的梯度平方而倾向于持续增长。RMSprop的分母则基于移动平均进行调整,如果近期梯度变小,它会随之减小,从而避免学习率过快衰减。(注意:这是一个假设梯度序列开始时较大,然后变小的示意图)。
RMSprop是一种广泛使用的优化器,在所有主要的深度学习框架中均可使用。使用它时,您通常需要指定学习率 η,并且常常需要指定衰减因子 β(在库中通常命名为 alpha 或 rho,默认值约为0.9或0.99)以及 ϵ。尽管与SGD相比,它通常对学习率的调整要求较低,但找到合适的 η 和 β 值仍然会影响性能。
import torch
import torch.optim as optim
import torch.nn as nn
# 假设 'model' 是您定义的神经网络 (nn.Module)
# 示例: model = nn.Linear(10, 2)
# 初始化RMSprop优化器
# 常用参数:要优化的参数、学习率 (lr)、alpha (衰减因子)、epsilon (eps)
optimizer = optim.RMSprop(model.parameters(), lr=0.001, alpha=0.99, eps=1e-08)
# --- 在您的训练循环内部 ---
# loss.backward() # 计算梯度
# optimizer.step() # 使用RMSprop更新参数
# optimizer.zero_grad() # 为下一次迭代重置梯度
# --- 训练循环结束 ---
RMSprop为AdaGrad提供了一种有益的替代方案,为Adam等优化器中出现的后续改进奠定了基础,我们将在接下来讨论Adam。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造