【深度学习笔记】7_7 AdaDelta算法

news2024/9/27 19:26:12

注:本文为《动手学深度学习》开源内容,部分标注了个人理解,仅为个人学习记录,无抄袭搬运意图

7.7 AdaDelta算法

除了RMSProp算法以外,另一个常用优化算法AdaDelta算法也针对AdaGrad算法在迭代后期可能较难找到有用解的问题做了改进 [1]。有意思的是,AdaDelta算法没有学习率这一超参数

Adadelta是一种自适应学习率的方法,用于神经网络的训练过程中。 它的基本思想是避免使用手动调整学习率的方法来控制训练过程,而是自动调整学习率,使得训练过程更加顺畅。

7.7.1 算法

AdaDelta算法也像RMSProp算法一样,使用了小批量随机梯度 g t \boldsymbol{g}_t gt按元素平方的指数加权移动平均变量 s t \boldsymbol{s}_t st。在时间步0,它的所有元素被初始化为0。给定超参数 0 ≤ ρ < 1 0 \leq \rho < 1 0ρ<1(对应RMSProp算法中的 γ \gamma γ),在时间步 t > 0 t>0 t>0,同RMSProp算法一样计算

s t ← ρ s t − 1 + ( 1 − ρ ) g t ⊙ g t . \boldsymbol{s}_t \leftarrow \rho \boldsymbol{s}_{t-1} + (1 - \rho) \boldsymbol{g}_t \odot \boldsymbol{g}_t. stρst1+(1ρ)gtgt.

与RMSProp算法不同的是,AdaDelta算法还维护一个额外的状态变量 Δ x t \Delta\boldsymbol{x}_t Δxt,其元素同样在时间步0时被初始化为0。我们使用 Δ x t − 1 \Delta\boldsymbol{x}_{t-1} Δxt1来计算自变量的变化量:

g t ′ ← Δ x t − 1 + ϵ s t + ϵ ⊙ g t , \boldsymbol{g}_t' \leftarrow \sqrt{\frac{\Delta\boldsymbol{x}_{t-1} + \epsilon}{\boldsymbol{s}_t + \epsilon}} \odot \boldsymbol{g}_t, gtst+ϵΔxt1+ϵ gt,

其中 ϵ \epsilon ϵ是为了维持数值稳定性而添加的常数,如 1 0 − 5 10^{-5} 105。接着更新自变量:

x t ← x t − 1 − g t ′ . \boldsymbol{x}_t \leftarrow \boldsymbol{x}_{t-1} - \boldsymbol{g}'_t. xtxt1gt.

最后,我们使用 Δ x t \Delta\boldsymbol{x}_t Δxt来记录自变量变化量 g t ′ \boldsymbol{g}'_t gt按元素平方的指数加权移动平均:

Δ x t ← ρ Δ x t − 1 + ( 1 − ρ ) g t ′ ⊙ g t ′ . \Delta\boldsymbol{x}_t \leftarrow \rho \Delta\boldsymbol{x}_{t-1} + (1 - \rho) \boldsymbol{g}'_t \odot \boldsymbol{g}'_t. ΔxtρΔxt1+(1ρ)gtgt.

可以看到,如不考虑 ϵ \epsilon ϵ的影响,AdaDelta算法跟RMSProp算法的不同之处在于使用 Δ x t − 1 \sqrt{\Delta\boldsymbol{x}_{t-1}} Δxt1 来替代学习率 η \eta η

7.7.2 从零开始实现

AdaDelta算法需要对每个自变量维护两个状态变量,即 s t \boldsymbol{s}_t st Δ x t \Delta\boldsymbol{x}_t Δxt。我们按AdaDelta算法中的公式实现该算法。

%matplotlib inline
import torch
import sys
sys.path.append("..") 
import d2lzh_pytorch as d2l

features, labels = d2l.get_data_ch7()

def init_adadelta_states():
    s_w, s_b = torch.zeros((features.shape[1], 1), dtype=torch.float32), torch.zeros(1, dtype=torch.float32)
    delta_w, delta_b = torch.zeros((features.shape[1], 1), dtype=torch.float32), torch.zeros(1, dtype=torch.float32)
    return ((s_w, delta_w), (s_b, delta_b))

def adadelta(params, states, hyperparams):
    rho, eps = hyperparams['rho'], 1e-5
    for p, (s, delta) in zip(params, states):
        s[:] = rho * s + (1 - rho) * (p.grad.data**2)
        g =  p.grad.data * torch.sqrt((delta + eps) / (s + eps))
        p.data -= g
        delta[:] = rho * delta + (1 - rho) * g * g

使用超参数 ρ = 0.9 \rho=0.9 ρ=0.9来训练模型。

d2l.train_ch7(adadelta, init_adadelta_states(), {'rho': 0.9}, features, labels)

输出:

loss: 0.243728, 0.062991 sec per epoch

在这里插入图片描述

7.7.3 简洁实现

通过名称为Adadelta的优化器方法,我们便可使用PyTorch提供的AdaDelta算法。它的超参数可以通过rho来指定。

d2l.train_pytorch_ch7(torch.optim.Adadelta, {'rho': 0.9}, features, labels)

输出:

loss: 0.242104, 0.047702 sec per epoch

在这里插入图片描述

小结

  • AdaDelta算法没有学习率超参数,它通过使用有关自变量更新量平方的指数加权移动平均的项来替代RMSProp算法中的学习率。

参考文献

[1] Zeiler, M. D. (2012). ADADELTA: an adaptive learning rate method. arXiv preprint arXiv:1212.5701.


注:除代码外本节与原书此节基本相同,原书传送门

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1517130.html

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

相关文章

了解关键字

关键字 定义&#xff1a;被Java语言赋予了特殊含义&#xff0c;用做专门用途的字符串&#xff08;或单词&#xff09; HelloWorld案例中&#xff0c;出现的关键字有 class、public 、 static 、 void 等&#xff0c;这些单词已经被Java定义好了。 特点&#xff1a;全部关键字都…

“多彩非遗 用爱编织”社区志愿者心理解压活动

为提升志愿者心理健康水平&#xff0c;帮助他们及时疏导情绪、缓解生活中的压力&#xff0c;构筑心理防线&#xff0c;促进身心健康&#xff0c;引导志愿者以积极的心态面对服务和生活中的压力&#xff0c;2月28日海滨街社工站在海滨街道西运社区开展了“多彩非遗 用爱编织”社…

力扣● 300.最长递增子序列 ● 674. 最长连续递增序列 ● 718. 最长重复子数组

● 300.最长递增子序列 1.dp数组含义。dp[i]&#xff1a;以nums[i]为结尾的递增子序列的最大长度。 注意一定是以nums[i]结尾&#xff0c;如果dp[i]定义错误的话&#xff0c;暴力也不知道咋整。 2.递推公式。这道题与背包的单词划分比较像&#xff0c;一个单层循环是弄不出来…

AJAX 02 案例、Bootstrap框架

AJAX 学习 AJAX 2 综合案例黑马 API01 图书管理Bootstrap 官网Bootstrap 弹框图书管理-渲染列表图书管理-添加图书图书管理-删除图书图书管理 - 编辑图书 02 图片上传03 更换图片04 个人信息设置信息渲染头像修改补充知识点&#xff1a;label扩大表单的范围 AJAX 2 综合案例 黑…

深入剖析Mysql事务和Spring事务,mongodb面试题2024

注意max_trx_id并不是m_ids中的最大值&#xff0c;事务id是递增分配的。比方说现在有id为1&#xff0c;2&#xff0c;3这三个事务&#xff0c;之后id为3的事务提交了。那么一个新的读事务在生成ReadView时&#xff0c;m_ids就包括1和2&#xff0c;min_trx_id的值就是1&#xff…

OSG编程指南<二十>:OSG路径动画

1、路径动画 如果读者耐心地读到这里,已经对路径动画不陌生了。因为前面很多处已经涉及路径动画,在很多示例中也用到了路径动画。路径动画就是按一定的插值方式生成路径,物体对象按照生成的路径或预先指定的路径来完成相应的动作的动画。 在 OSG 中,管理路径动画的核心类主…

数据结构——循环链表,双向链表,线性表和有序表的合并详解

目录 1.循环链表 1.带尾指针循环链表的合并 代码示例&#xff1a; 2.双向链表 代码示例&#xff1a; 1.双向链表的插入 ​代码示例&#xff1a; 2.双向链表的删除 代码示例&#xff1a; 3.单链表&#xff0c;循环链表&#xff0c;双向链表时间效率的比较 4.顺序表和链…

LSM树(Log-Structured-Merge-Tree)

学习笔记&#xff1a;参考LSM树详解 - 知乎 (zhihu.com) NoSQL&#xff08;HBase,LevelDB,RocksDB&#xff09;采用LSM树 核心&#xff1a;利用顺序写来提高性能&#xff0c;但因为分层&#xff08;内存和文件两部分&#xff09;的设计会降低读性能。//牺牲小部分读性能来换高…

Hack The Box-Codify

目录 信息收集 rustscan nmap dirsearch WEB 提权 get user get root 信息收集 rustscan ┌──(root㉿ru)-[~/kali/hackthebox] └─# rustscan -b 2250 10.10.11.239 --range0-65535 --ulimit4500 -- -A -sC .----. .-. .-. .----..---. .----. .---. .--. .-. …

漏洞复现-金蝶系列

漏洞复现-金蝶系列 Apusic 金蝶天燕Apusic 应⽤中间件代码命令执⾏金蝶云星空RCE金蝶云OA星空 CommonFileserver 任意文件读取金蝶云星空 管理中心介绍⾦蝶 EAS 系统存在⽬录遍历金蝶EAS myUploadFile任意文件上传实战之金蝶RCE上传绕过金蝶云金蝶云SaveUserPassport存在反序列…

音视频实战---读取音视频文件的AAC音频保存成aac文件

1、使用avformat_open_input函数打开音视频文件 2、使用avformat_find_stream_info函数获取解码器信息。 3、使用av_dump_format设置打印信息 4、使用av_init_packet初始化AVPacket。 5、使用av_find_best_stream查找对应音视频流的流下标。 6、使用av_read_frame读取音视…

移动硬盘分区误删?别担心,数据恢复来帮忙!

在日常使用移动硬盘的过程中&#xff0c;有时会因为各种原因导致分区被误删。这种情况一旦发生&#xff0c;很多人会感到惊慌失措&#xff0c;担心数据丢失无法找回。然而&#xff0c;只要及时采取正确的数据恢复措施&#xff0c;大多数情况下都能够成功恢复误删的分区和数据。…

变量直接赋值、浅拷贝、深拷贝、递归、异常

对象拷贝(对象存在堆中) 变量直接赋值 赋值 就是一个&#xff0c;比如let obj2obj1 这就是赋值&#xff0c;只是把栈中存储的值&#xff0c;赋值给另一个变量 把obj1在栈中的地址&#xff0c;赋值给obj2 <script>let str hellolet str2 str //把str的值,赋值给str2.也…

公派访问学者申请被拒签的原因有哪些?

在申请公派访问学者时&#xff0c;拒签是一种常见的结果&#xff0c;其原因多种多样。首先&#xff0c;申请材料不完整或者不符合要求可能是导致拒签的主要原因之一。例如&#xff0c;个人简历、研究计划书、推荐信等材料未能清晰地展示申请人的学术背景和研究意图&#xff0c;…

想零基础转行Python开发,怎么学习呢?

转行零基础学Python编程开发难度大吗&#xff1f;从哪学起&#xff1f;近期很多小伙伴问我&#xff0c;如果自己转行学习Python&#xff0c;完全0基础能否学会呢&#xff1f;Python的难度到底有多大&#xff1f;今天&#xff0c;小编就来为大家详细解读一下这个问题。 学习 Py…

蓝桥杯刷题|02入门真题

[蓝桥杯 2022 省 B] 刷题统计 题目描述 小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做 a 道题目&#xff0c;周六和周日每天做 b 道题目。请你帮小明计算&#xff0c;按照计划他将在第几天实现做题数大于等于 n 题? 输入格式 输入一行包含三个整数…

用这个工具制作企业宣传册,效果也太酷了

​随着市场的竞争日益激烈&#xff0c;企业的宣传册成为了展示企业形象和实力的重要途径。而如何制作一份既美观又实用的宣传册&#xff0c;成为了许多企业家和设计师们关注的焦点。 今天&#xff0c;笔者要向大家介绍的就是这样一款工具&#xff0c;它能够让用户轻松制作出既具…

软件测试中的AI-为什么它在软件自动化测试中很重要?

通俗地说&#xff0c;人工智能&#xff08;AI&#xff09;是计算机科学的一个领域&#xff0c;它专注于使机器“智能化”。所谓智能&#xff0c;就是使系统能够像人类一样学习和做出决策。因此&#xff0c;人工智能机器将能够学习如何在特定情况下做出反应&#xff0c;然后根据…

基于springboot社团管理系统的设计与实现

互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差&#xff0c;劳…

使用vscode+clangd+bear+publickeyssh远程开发Linux程序

目录 配置ssh密钥远程登录登录远程Linux主机安装必要软件安装vscode插件1.安装remote-ssh插件2.通过vscode远程连接到linux机器3.在远程安装插件clangd4.关闭C/C Intellense engine 使用vscodeclangdbear1.修改Makefile2.编译内核3.结果 配置ssh密钥远程登录 一定要配置成密钥…