当前位置: 首页 > article >正文

梯度下降优化算法-RMSProp

RMSProp(Root Mean Square Propagation)是一种自适应学习率的优化算法,旨在解决 AdaGrad 学习率单调递减的问题。RMSProp 通过引入衰减系数(decay rate),使得历史梯度平方和不会无限增长,从而更好地适应非凸优化问题。


1. RMSProp 的数学原理

1.1 AdaGrad 的问题回顾

AdaGrad 的核心思想是为每个参数分配自适应的学习率,其更新公式为:

G t = G t − 1 + g t 2 G_t = G_{t-1} + g_t^2 Gt=Gt1+gt2

θ t + 1 = θ t − η G t + ϵ ⋅ g t \theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{G_t + \epsilon}} \cdot g_t θt+1=θtGt+ϵ ηgt

其中:

  • G t G_t Gt 是历史梯度平方和的累积值。
  • η \eta η 是全局学习率。
  • ϵ \epsilon ϵ 是一个很小的常数,用于避免分母为零。

AdaGrad 的问题是:

  1. 学习率单调递减:由于 G t G_t Gt 是单调递增的,学习率会逐渐减小,可能导致训练后期学习率过小,收敛缓慢。
  2. 内存开销较大:需要存储每个参数的历史梯度平方和。

1.2 RMSProp 的引入

RMSProp 通过引入衰减系数 γ \gamma γ,解决了 AdaGrad 学习率单调递减的问题。其核心思想是对历史梯度平方和进行指数加权移动平均(Exponential Moving Average, EMA),而不是简单累加。


1.3 RMSProp 的更新规则

RMSProp 的更新规则分为以下几个步骤:

1.3.1 梯度计算

首先,计算当前时刻的梯度:

g t = ∇ θ J ( θ t ) g_t = \nabla_\theta J(\theta_t) gt=θJ(θt)

其中:

  • g t g_t gt 是当前时刻的梯度向量,形状与参数 θ t \theta_t θt 相同。

1.3.2 历史梯度平方和的指数加权平均

RMSProp 使用指数加权移动平均来计算历史梯度平方和:

E [ g 2 ] t = γ ⋅ E [ g 2 ] t − 1 + ( 1 − γ ) ⋅ g t 2 E[g^2]_t = \gamma \cdot E[g^2]_{t-1} + (1 - \gamma) \cdot g_t^2 E[g2]t=γE[g2]t1+(1γ)gt2

其中:

  • E [ g 2 ] t E[g^2]_t E[g2]t 是历史梯度平方和的指数加权平均值。
  • γ \gamma γ 是衰减系数(decay rate),通常取值在 [ 0.9 , 0.99 ) [0.9, 0.99) [0.9,0.99) 之间。
  • g t 2 g_t^2 gt2 表示对梯度向量 g t g_t gt 逐元素平方。

注意:

  • 初始时, E [ g 2 ] 0 E[g^2]_0 E[g2]0 通常设置为 0。

1.3.3 自适应学习率的计算

RMSProp 使用历史梯度平方和的指数加权平均值 E [ g 2 ] t E[g^2]_t E[g2]t 来调整学习率。具体来说,学习率被调整为:

学习率 = η E [ g 2 ] t + ϵ \text{学习率} = \frac{\eta}{\sqrt{E[g^2]_t + \epsilon}} 学习率=E[g2]t+ϵ η

其中:

  • η \eta η 是全局学习率。
  • ϵ \epsilon ϵ 是一个很小的常数(通常为 1 0 − 8 10^{-8} 108),用于避免分母为零。
  • E [ g 2 ] t + ϵ \sqrt{E[g^2]_t + \epsilon} E[g2]t+ϵ 是对历史梯度平方和的指数加权平均值逐元素开平方。

1.3.4 参数更新

最后,RMSProp 的参数更新公式为:

θ t + 1 = θ t − η E [ g 2 ] t + ϵ ⋅ g t \theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{E[g^2]_t + \epsilon}} \cdot g_t θt+1=θtE[g2]t+ϵ ηgt

其中:

  • η E [ g 2 ] t + ϵ \frac{\eta}{\sqrt{E[g^2]_t + \epsilon}} E[g2]t+ϵ η 是自适应学习率。
  • g t g_t gt 是当前时刻的梯度。

2. RMSProp 的详细推导

2.1 指数加权移动平均的意义

RMSProp 使用指数加权移动平均(EMA)来计算历史梯度平方和,其意义在于:

  1. 最近梯度的影响更大:由于 γ < 1 \gamma < 1 γ<1,最近的梯度平方 g t 2 g_t^2 gt2 E [ g 2 ] t E[g^2]_t E[g2]t 的影响更大。
  2. 历史梯度的影响逐渐衰减:较早的梯度平方会随着时间步的增加而逐渐衰减。

这种机制使得 RMSProp 能够更好地适应非平稳目标函数(如非凸优化问题)。


2.2 衰减系数 γ \gamma γ 的作用

衰减系数 γ \gamma γ 控制历史梯度平方和的衰减速度:

  • γ \gamma γ 较大时(如 0.99),历史梯度平方和的变化较慢,学习率调整较为平滑。
  • γ \gamma γ 较小时(如 0.9),历史梯度平方和的变化较快,学习率调整较为敏感。

2.3 小常数 ϵ \epsilon ϵ 的作用

小常数 ϵ \epsilon ϵ 的作用是避免分母为零。具体来说:

  • E [ g 2 ] t E[g^2]_t E[g2]t 很小时, E [ g 2 ] t + ϵ \sqrt{E[g^2]_t + \epsilon} E[g2]t+ϵ 接近于 ϵ \sqrt{\epsilon} ϵ ,避免学习率过大。
  • E [ g 2 ] t E[g^2]_t E[g2]t 很大时, ϵ \epsilon ϵ 的影响可以忽略不计。

3. PyTorch 中的 RMSProp 实现

在 PyTorch 中,RMSProp 通过 torch.optim.RMSprop 实现。以下是 torch.optim.RMSprop 的主要参数:

参数名含义
params需要优化的参数(通常是模型的参数)。
lr全局学习率(learning rate),即 η \eta η,默认值为 1 0 − 2 10^{-2} 102
alpha衰减系数(decay rate),即 γ \gamma γ,默认值为 0.99。
eps分母中的小常数 ϵ \epsilon ϵ,用于避免除零,默认值为 1 0 − 8 10^{-8} 108
weight_decay权重衰减(L2 正则化)系数,默认值为 0。
momentum动量系数,默认值为 0。如果大于 0,则使用动量法。
centered是否使用中心化的 RMSProp,默认值为 False

3.1 使用 RMSProp 的代码示例

以下是一个使用 RMSProp 的完整代码示例:

import torch
import torch.nn as nn
import torch.optim as optim

# 定义一个简单的线性模型
model = nn.Linear(10, 1)

# 定义损失函数
criterion = nn.MSELoss()

# 定义优化器,使用 RMSProp
optimizer = optim.RMSprop(model.parameters(), lr=0.01, alpha=0.99, eps=1e-8, weight_decay=0.01)

# 模拟输入数据和目标数据
inputs = torch.randn(32, 10)  # 32 个样本,每个样本 10 维
targets = torch.randn(32, 1)  # 32 个目标值

# 训练过程
for epoch in range(100):
    # 前向传播
    outputs = model(inputs)
    loss = criterion(outputs, targets)

    # 反向传播
    optimizer.zero_grad()  # 清空梯度
    loss.backward()        # 计算梯度

    # 更新参数
    optimizer.step()       # 更新参数

    # 打印损失
    if (epoch + 1) % 10 == 0:
        print(f"Epoch [{epoch+1}/100], Loss: {loss.item():.4f}")

3.2 参数设置说明

  1. 学习率 (lr)

    • 学习率 η \eta η 控制每次参数更新的步长。
    • 在 RMSProp 中,学习率会自适应调整,因此初始学习率可以设置得稍大一些。
  2. 衰减系数 (alpha)

    • 衰减系数 γ \gamma γ 控制历史梯度平方和的衰减速度,通常取值在 [ 0.9 , 0.99 ) [0.9, 0.99) [0.9,0.99) 之间。
  3. 小常数 (eps)

    • 小常数 ϵ \epsilon ϵ 用于避免分母为零,通常设置为 1 0 − 8 10^{-8} 108
  4. 权重衰减 (weight_decay)

    • 权重衰减系数用于 L2 正则化,防止过拟合。
  5. 动量 (momentum)

    • 如果大于 0,则使用动量法,进一步加速收敛。
  6. 中心化 (centered)

    • 如果设置为 True,则使用中心化的 RMSProp,计算梯度平方的均值。

4. 总结

  • RMSProp 的核心思想:通过指数加权移动平均计算历史梯度平方和,自适应调整学习率。
  • RMSProp 的更新公式
    E [ g 2 ] t = γ ⋅ E [ g 2 ] t − 1 + ( 1 − γ ) ⋅ g t 2 E[g^2]_t = \gamma \cdot E[g^2]_{t-1} + (1 - \gamma) \cdot g_t^2 E[g2]t=γE[g2]t1+(1γ)gt2
    θ t + 1 = θ t − η E [ g 2 ] t + ϵ ⋅ g t \theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{E[g^2]_t + \epsilon}} \cdot g_t θt+1=θtE[g2]t+ϵ ηgt
  • PyTorch 实现:使用 torch.optim.RMSprop,设置 lralphaeps 等参数。
  • 优缺点
    • 优点:自适应学习率,适合非凸优化问题。
    • 缺点:需要手动调整衰减系数 γ \gamma γ

http://www.kler.cn/a/522160.html

相关文章:

  • 内网穿透实现MC联机
  • 未来无线技术的发展方向
  • 团体程序设计天梯赛-练习集——L1-022 奇偶分家
  • react native在windows环境搭建并使用脚手架新建工程
  • 基于物联网的火灾报警器设计与实现(论文+源码)
  • 开发者交流平台项目部署到阿里云服务器教程
  • 【源码+文档+调试讲解】基于Spring Boot的摇滚乐鉴赏网站的设计与实现
  • Git 出现 Please use your personal access token instead of the password 解决方法
  • 发布 VectorTraits v3.1(支持 .NET 9.0,支持 原生AOT)
  • 基于微信小程序的助农扶贫系统设计与实现(LW+源码+讲解)
  • 98.1 AI量化开发:长文本AI金融智能体(Qwen-Long)对金融研报大批量处理与智能分析的实战应用
  • 高阶C语言|深入理解字符串函数和内存函数
  • 【C++高并发服务器WebServer】-10:网络编程基础概述
  • 寒假刷题Day16
  • Compose笔记(一)--LifecycleEventObserver
  • 能量提升法三:赞美
  • 设置jmeter外观颜色
  • EasyExcel写入和读取多个sheet
  • 【景区导游——LCA】
  • 《深入Python子域名扫描:解锁网络空间的隐藏宝藏》
  • CPP-存储区域
  • c语言网 1127 尼科彻斯定理
  • 阅读springboot源码 记录
  • 动手学深度学习-卷积神经网络-3填充和步幅
  • Python GUI 开发 | Qt Designer — 工具介绍
  • TensorFlow 2基本功能和示例代码