梯度下降优化算法-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.mzph.cn/diannao/68356.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gradle和maven的区别以及怎么选择使用它们

目录 区别 1. 配置方式 2. 依赖管理 3. 构建性能 4. 灵活性和扩展性 5. 多项目构建 如何选择使用 选择 Maven 的场景 选择 Gradle 的场景 区别 1. 配置方式 Maven&#xff1a; 使用基于 XML 的 pom.xml 文件进行配置。所有的项目信息、依赖管理、构建插件等都在这个文…

鲁滨逊漂流记读后感

前言:学校要求出鲁滨逊漂流记的读后感啊&#xff0c;那么今天我就写着试试叭&#xff0c;好久都没更新了嘤&#xff0c;可能写的不好嗷。真的不是很建议参考&#xff0c;因为我的思想可能会与学校的要求不同&#xff0c;更多的是介入了自己的思考&#xff0c;从鲁滨逊好的地方和…

[笔记] 极狐GitLab实例 : 手动备份步骤总结

官方备份文档 : 备份和恢复极狐GitLab 一. 要求 为了能够进行备份和恢复&#xff0c;请确保您系统已安装 Rsync。 如果您安装了极狐GitLab&#xff1a; 如果您使用 Omnibus 软件包&#xff0c;则无需额外操作。如果您使用源代码安装&#xff0c;您需要确定是否安装了 rsync。…

06-机器学习-数据预处理

数据清洗 数据清洗是数据预处理的核心步骤&#xff0c;旨在修正或移除数据集中的错误、不完整、重复或不一致的部分&#xff0c;为后续分析和建模提供可靠基础。以下是数据清洗的详细流程、方法和实战示例&#xff1a; 一、数据清洗的核心任务 问题类型表现示例影响缺失值数值…

【统计的思想】假设检验(二)

假设检验是根据人为设定的显著水平&#xff0c;对被测对象的总体质量特性进行统计推断的方法。 如果我们通过假设检验否定了零假设&#xff0c;只是说明在设定的显著水平下&#xff0c;零假设成立的概率比较小&#xff0c;并不是说零假设就肯定不成立。如果零假设事实上是成立…

2025多目标优化创新路径汇总

多目标优化是当下非常热门且有前景的方向&#xff01;作为AI领域的核心技术之一&#xff0c;其专注于解决多个相互冲突的目标的协同优化问题&#xff0c;核心理念是寻找一组“不完美但均衡”的“帕累托最优解”。在实际中&#xff0c;几乎处处都有它的身影。 但随着需求场景的…

DeepSeek-R1试用

最近DeepSeek太火了&#xff0c;对配置要求不高。刚好放假&#xff0c;下载试试。发现开源大模型的生态做的挺好的&#xff0c;几分钟就能在本地部署一个大模型。 配置 NVIDIA RTX 2060 6GB&#xff08;最低要求 NVIDIA GTX 1060 6GB &#xff09; 下载Ollama Ollama是一个…

Android中Service在新进程中的启动流程2

目录 1、Service在客户端的启动入口 2、Service启动在AMS的处理 3、Service在新进程中的启动 4、Service与AMS的关系再续 上一篇文章中我们了解了Service在新进程中启动的大致流程&#xff0c;同时认识了与客户端进程交互的接口IApplicationThread以及与AMS交互的接口IActi…

C语言--数据在内存中的存储

在C语言中&#xff0c;数据在内存中的存储方式主要取决于数据的类型和存储位置。以下是C语言中数据在内存中的存储方式的详细说明&#xff1a; 1. 数据类型与存储方式 基本数据类型 • 整数类型&#xff08;如int、short、long等&#xff09;&#xff1a; • 存储方式&#x…

【PySide6快速入门】QDialog对话框的使用

文章目录 PySide6快速入门&#xff1a;QDialog对话框的使用前言QDialog的基本用法创建和显示对话框 QDialog的常用函数1. exec()2. accept()3. reject()4. setWindowTitle()5. setModal()6. setFixedSize()7. resize()8. reject()9. setLayout()10. open() 总结 PySide6快速入门…

2748. 美丽下标对的数目(Beautiful Pairs)

2748. 美丽下标对的数目&#xff08;Beautiful Pairs&#xff09; 题目分析 给定一个整数数组 nums&#xff0c;我们需要找出其中符合条件的“美丽下标对”。美丽下标对是指&#xff0c;数组中的某一对数字 nums[i] 和 nums[j]&#xff08;其中 0 ≤ i < j < nums.leng…

计网week1+2

计网 一.概念 1.什么是Internet 节点&#xff1a;主机及其运行的应用程序、路由器、交换机 边&#xff1a;通信链路&#xff0c;接入网链路主机连接到互联网的链路&#xff0c;光纤、网输电缆 协议&#xff1a;对等层的实体之间通信要遵守的标准&#xff0c;规定了语法、语义…

在 Vue 3 中,怎么管理环境变量

在 Vue 3 中&#xff0c;环境变量管理是通过 .env 文件来进行的&#xff0c;利用这些文件可以让开发者根据不同的环境&#xff08;开发、生产、测试等&#xff09;配置不同的变量。这一机制由 Vite 构建工具支持&#xff0c;它帮助开发者根据不同的环境需求做出相应配置。 1. …

Python的那些事第三篇:Python编程的“调味料”与“交流术”运算符与输入输出

运算符与输入输出&#xff1a;Python编程的“调味料”与“交流术” 在编程的世界里&#xff0c;Python不仅仅是一门语言&#xff0c;它更像是一位充满智慧的厨师&#xff0c;而运算符和输入输出则是它手中的“调味料”和“交流术”。没有这些工具&#xff0c;代码就会像没有加…

windows下部署安装 ELK,nginx,tomcat日志分析

1.安装包 如上就是elk- windows下部署需要用到的安装包 &#xff08;ps:注意版本需要对应&#xff0c;另外es7版本对应是 jdk8&#xff0c;若更高版本 请自行查询版本对应号&#xff09;。 下载地址&#xff1a; Past Releases of Elastic Stack Software | Elastic 此地址可…

内联函数——减少函数调用开销的高效利器

在C中&#xff0c;内联函数&#xff08;Inline Function&#xff09;是一种优化手段&#xff0c;它通过将函数的代码插入到每个调用点来避免函数调用的开销。本文将详细介绍内联函数的工作原理、应用场景以及注意事项。 1. 什么是内联函数&#xff1f; 内联函数是一种特殊的函…

docker安装MySQL8:docker离线安装MySQL、docker在线安装MySQL、MySQL镜像下载、MySQL配置、MySQL命令

一、镜像下载 1、在线下载 在一台能连外网的linux上执行docker镜像拉取命令 docker pull mysql:8.0.41 2、离线包下载 两种方式&#xff1a; 方式一&#xff1a; -&#xff09;在一台能连外网的linux上安装docker执行第一步的命令下载镜像 -&#xff09;导出 # 导出镜…

【AI论文】魔鬼在细节:关于在训练专用混合专家模型时实现负载均衡损失

摘要&#xff1a;本文重新审视了在训练混合专家&#xff08;Mixture-of-Experts, MoEs&#xff09;模型时负载均衡损失&#xff08;Load-Balancing Loss, LBL&#xff09;的实现。具体来说&#xff0c;MoEs的LBL定义为N_E乘以从1到N_E的所有专家i的频率f_i与门控得分平均值p_i的…

游戏策划的分类

P3游戏策划分类 1.程序2.美术3.策划 程序&#xff1a;一般分为客户端程序和服务器程序 客户端程序一般负责游戏的前端画面表现 服务器程序负责游戏的后端运算 美术&#xff1a;角色原画&#xff0c;角色模型动作&#xff0c;场景原画&#xff0c;场景模型&#xff0c;UI设计&a…

C语言编程笔记:文件处理的艺术

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言正文一、为什么要用文件二、文件的分…