Adam优化器及其变种的原理

news2024/11/24 11:57:45

本文将从SGD开始介绍Adam优化器的原理以及其变种的提出背景。

1、SGD的原理

SGD(随机梯度下降法)是基于最速梯度下降法的原理,假设我们存在损失函数L(\theta ),其中\theta是要学习参数,定义如下的优化路径\theta^{k+1}=\theta^{k}+t^k\Delta(\theta^{k}),\ k=0,1,2,... ...,使得损失函数L(\theta )值最小。这是一个不断更新迭代参数\theta的过程,其中k表示其中某一更新步,t^k表示更新步长(即学习率),\Delta(\theta^{k})表示更新方向。

假设存在最优参数\theta^*,当前参数为最优参数附近的\theta^k,我们选择合适的参数更新步长,使得\theta^{k+1}=\theta^{k}+t^k\Delta(\theta^{k})逼迫最优参数。我们对目标损失函数L(\theta )进行泰勒展开:

L(\theta^*) = L(\theta^k+v)\approx L(\theta^k) + \nabla L(\theta^k) v 

 因为\theta^*是最优参数,所以:

L(\theta^*) < L(\theta^k) \rightarrow \nabla L(\theta^k) v< 0

最速下降法是指在规范化v的基础上,找到一个合适的值使得方向导数\nabla L(\theta^k) v最小,或者说让L(\theta^k)近可能逼近最优值L(\theta^*),假设是L2范式\left \| v \right \|\leq 1时,当v = -\nabla L(\theta^k)时,方向导数最小。因此最速下降法的更新路径可以表示为:

\theta^{k+1}=\theta^{k} - t^k\nabla L(\theta^k),\ k=0,1,2,... ...

 其中t^k表示更新步长,因为上述泰勒展开式包含要求是在参数附近进行更新,因此需要控制更新的步长,其在SGD中称之为学习率。

2、SGD with Momentum 动量SGD的原理

因为在SGD中方向梯度g_k = L(\theta^k)可能会因为某些点偏差会造成参数学习的振荡,因此通过动量来添加平滑参数:

m_k = \beta m_{k-1} + (1-\beta )g_k

 \theta^{k+1}=\theta^{k} - t^k m_k,\ k=0,1,2,... ...

3、Adam的原理

动量SGD解决了由于梯度在某些点偏差会带来学习的振荡,但同时学习率设置也会影响学习,当梯度较小时,学习率设置过小,会减缓训练速度,而当梯度较大,学习率如果设置过大,会造成训练的振荡,因为Adam在动量SGD基础上增加了自适应调整学习率(即更新步长)。

m_k = \beta_1 m_{k-1} + (1-\beta_1 )g_k

v_k = \beta_2 v_{k-1} + (1-\beta_2 )g_k^2

\theta^{k+1}=\theta^{k} - t^k m_k / \sqrt{v_k},\ k=0,1,2,... ...

Adam在动量SGD的基础上增加了二阶动量v^k,通过其来自适应控制步长,当梯度较小时,整体的学习率t^k /\sqrt{v_k}就会增加,反之会缩小,因此在一般情况下,Adam相较于SGD,其收敛速度要更快。

同时为了避免某些点梯度偏差带来学习率的振荡,因此通过\beta_2引入动量特性(由于梯度二次情况下,一般\beta_2 > \beta_1)。

4、AdamW的原理

但是Adam存在另外的问题,当loss函数中存在L2正则项时,采用Adam优化并不会有效,主要原因是Adam的学习率是变化的,而且当梯度变大时,其学习率会变小,因此会使梯度较大的权重参数同梯度较小的权重参数相差更大,这同L2正则是相违背的。我们通过公式来说明这个过程:

假设目标损失函数添加了L2正则项后,如下表示为:

L(\theta ) = L(\theta ) + \frac{1}{2}\left \| \theta \right \|^2

如果通过动量SGD作为优化器,此时参数的更新可以写为如下式,同时可以看出L2正则项同weight decay也是等价的。

\hat{m_k} = \beta m_{k-1} + (1-\beta )(g_k + \theta^k) = m_k + (1-\beta )\theta^k

\theta^{k+1}=\theta^{k} - t^k \hat{m_k} = \beta \theta^{k} - t^k m_k,\ k=0,1,2,... ...

但是当Adam应用时,weight decay系数当梯度较大时其值较小,使得Adam对于L2正则项的优化并不好。因此AdamW主要是在Adam中增加了weight decay项,来帮助优化L2正则项:

\theta^{k+1}=\theta^{k} - t^k (m_k / \sqrt{v_k} + \omega \theta^{k}),\ k=0,1,2,... ...

\omega =\omega_{norm}\sqrt{\frac{b}{BT}}

上式中的\omega为weight decay的系数,其中b表示batch size,B表示epoch中训练的batch数,T表示总共的epoch数,可以看出weight decay系数同整个训练轮数有关系。

5、AdamWR的原理

AdamWR主要是添加了热重启warm restart功能,其解决的问题是避免模型训练陷入局部最优,因为学习率和梯度会一直收敛,当达成局部最优点时,很难或者要很长时间才能跳出来,因此AdamWR主要是通过周期性增大学习率,从而提升模型的探索空间。

这个周期性调整学习率的函数称为cosine annealing,可以表示为:

t^k = t^i_{min} + 0.5(t^i_{max} - t^i_{min})(1 + cos(\pi T_{cur}/T_i))

AdamWR将整个训练过程分为多个热重启过程,上式中的i表示为第i个热重启过程,t^i_{min}表示在该阶段中最小的学习率,T_i表示当前热重启轮中总共需要训练epoch数,T_{cur}表示当前已经训练的epoch数。

通过AdamWR的模型的探索空间更大,下图评估了在不同初始学习率和L2正则项权重值的情况下,AdamWR所能找到的优点空间更大。

 

 

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

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

相关文章

Ray使用案例

Ray Use Cases Ray用例 本页索引了用于扩展ML的常见Ray用例。它包含了对博客、例子和教程的突出引用,也位于Ray文档的其他地方。 大型语言模型和生成型人工智能 大型语言模型(LLMs)和生成性人工智能正在迅速改变行业,并以惊人的速度要求计算。Ray为这些模型的扩展提供了…

我让ChatGPT用CSS3画一个皮卡丘,还是自己画的可爱

突然想到了小时候看过的动画片《皮卡丘》&#xff0c;于是突然就想&#xff0c;ChatGPT肯定也看过&#xff0c;他哪有不知道的东西啊&#xff0c;于是就想着让他帮我画一个&#xff0c;他画出来之后&#xff0c;我笑了&#xff0c;这啥玩意儿啊。 目录 一、第一次尝试让ChatGP…

智安网络|怎么预防大大小小的网络入侵及信息泄露?五招值得收藏

网络安全是一个涵盖广泛、变幻多端的领域。网络风险防范需要多种措施&#xff0c;从教育人员如何正确处理机密信息到定期检查系统的安全性。 在现代网络环境下&#xff0c;网络安全成为防护重点&#xff0c;网络环境下出现的安全隐患可能会直接影响业务&#xff0c;甚至生命财…

【fiddler+burp+雷神模拟器联动抓包】

0x00 常用抓包工具 常用的抓包工具​有fiddler、wireshark、httpwatch、 firebug、F12/等。抓包抓的是协议&#xff0c;fiddler抓的是HTTP、HTTPS协议&#xff0c;wireshark抓的是其他协议。fiddler、wireshark可以修改接口的参数和返回值&#xff0c;常用的F12调试工具只可以…

npm 知识点

1 ~会匹配最近的小版本依赖包&#xff0c;比如~1.1.3会匹配所有1.1.x版本&#xff0c;但是不包括1.2.0 ^会匹配最新的大版本依赖包&#xff0c;比如^1.3.4会匹配所有1.x.x的包&#xff0c;包括1.3.4&#xff0c;但是不包括2.0.0 *会匹配最新版本 2 ant-design/pro-table 前面…

EndNote X9 引用参考 单击文献编号,不能跳转到文尾文献列表处,咋解决?文献编号 不能跳转 ,怎么办?

文章目录 1 正常情况下 引用文献编号 是可以跳转的2 问题分析3 解决方法4 EndNote X9 插入参考文献常见问题总结5 EndNote X9 快速上手教程&#xff08;毕业论文参考文献管理器&#xff09; 1 正常情况下 引用文献编号 是可以跳转的 正确的插入文献后&#xff0c; 正常情况下&a…

公告 | FISCO BCOS v3.3.0发布,新增块内分片技术,单链性能突破10万TPS

FISCO BCOS开源社区一贯秉承开源、开放、联合共建的原则&#xff0c;致力于链接社区力量将FISCO BCOS打造成更加完美的区块链底层平台。 在社区通力协作下&#xff0c;FISCO BCOS v3.3.0已经发布&#xff0c;块内分片作为本次更新的核心亮点&#xff0c;实现了应用间交易执行的…

PyMuPDF pdf神奇处理工具

可将pdf转图片&#xff0c;图片转pdf&#xff0c;可拼接pdf&#xff0c;可提取固定的内容。 详细参考下面文章&#xff1a; PyMuPDF关键字标注&#xff1a;https://www.cnpython.com/qa/1436855 PyMuPDF去水印&#xff1a;https://sunnysab.cn/2022/06/29/Clean-Watermarks-…

BlockingQueue(阻塞队列)基本使用指南

概述 BlockingQueue 是 java.util.concurrent 包提供的用于解决并发生产者 - 消费者问题的最有用的类。 BlockingQueue 的特性是在任意时刻只有一个线程可以进行 take 或者 put 操作&#xff0c;并且 BlockingQueue 提供了超时 return null 的机制&#xff0c;在许多生产场景…

哪些行业适合开发微信小程序?

随着电子商务的进一步发展&#xff0c;很多行业都开始开发自己的系统软件&#xff0c;企图通过线上线下结合的方式来达到更好的宣传效果&#xff0c;拓客引流。微信小程序凭借成本低、使用方便等优点成为很多商家的首选。那么究竟哪些行业适合开发微信小程序呢&#xff1f; …

springboot项目,localhost:port 可以访问,但是外网IP:port不行

springboot 项目启动后&#xff0c;localhost:port 可以访问&#xff0c;但是外网IP:port不行 现象原因及解决方法解决方法&#xff1a;规则1&#xff1a;规则2&#xff1a;规则3&#xff1a; 现象 springboot项目&#xff0c;localhost:port 可以访问&#xff0c;但是外网IP:…

Java多线程基础-9:代码案例之阻塞队列

阻塞队列是一种特殊的队列&#xff0c;带有“阻塞特性”&#xff0c;也遵守队列 “先进先出” 的原则。阻塞队列是一种线程安全的数据结构&#xff0c;并且具有以下特性&#xff1a; 当队列满时&#xff0c;继续入队列就会阻塞&#xff0c;直到有其他线程从队列中取走元素。当…

协程Flow原理

什么是Flow Flow直译过来就是“流”的意思&#xff0c;也就是将我们我们任务如同水流一样一步一步分割做处理。想象一下&#xff0c;现在有一个任务需要从山里取水来用你需要怎么做&#xff1f; 扛上扁担走几十里山路把水挑回来。简单粗暴&#xff0c;但是有可能当你走了几十…

Java项目经验二:二手车系统

1、项目简介 开发环境&#xff1a;IDEA MySQL JDK1.8 Git Maven 使用技术&#xff1a;Spring Cloud Mybatis Plus MySQL RocketMQ Nginx Nacos Redis MongoDB ElasticSearch Shiro 项目描述&#xff1a; XX二手车的服务贯穿二手车交易各个环节&#xff0c;运用成熟…

穿越数据智能“海峡”,企业更需要什么样的数智底座?

导读&#xff1a;更懂业务&#xff0c;是用友iuap数智中台多年打磨的核心能力。 如果将数智化转型比作企业的大航海旅程&#xff0c;数据和智能就像是大航海过程中企业必须穿越的海峡。随着数智化转型的不断深入&#xff0c;很多企业驶进数据智能海峡后发现&#xff0c;要用好数…

外观数列、文本左右对齐----2023/5/11

外观数列----2023/5/11 给定一个正整数 n &#xff0c;输出外观数列的第 n 项。 「外观数列」是一个整数序列&#xff0c;从数字 1 开始&#xff0c;序列中的每一项都是对前一项的描述。 你可以将其视作是由递归公式定义的数字字符串序列&#xff1a; countAndSay(1) “1”…

分享两款好用的软件

软件一&#xff1a;去水印神器——Inpaint Inpaint是一款功能强大的图像处理软件&#xff0c;它的主要功能是去除图片中的水印。除此之外&#xff0c;它还可以帮助用户修复照片中的缺陷&#xff0c;例如划痕、斑点、红眼等&#xff0c;删除照片中的不必要的元素&#xff0c;例…

Meta最新模型LLaMA详解(含部署+论文)

来源&#xff1a;投稿 作者&#xff1a;毛华庆 编辑&#xff1a;学姐 前言 本课程来自深度之眼《大模型——前沿论文带读训练营》公开课&#xff0c;部分截图来自课程视频。 文章标题&#xff1a;LLaMA: Open and Efficient Foundation Language Models 向量空间中词表示的有效…

ios打包ipa的四种实用方法(.app转.ipa)

总结一下&#xff0c;目前.app包转为.ipa包的方法有以下几种&#xff1a; 1、Apple推荐的方式&#xff0c;即实用xcode的archive功能 Xcode菜单栏->Product->Archive->三选一&#xff0c;一般选后两个。 局限性&#xff1a;个人开发一般采用这种方法&#xff0c;但…

linux内核网络子系统初探2---socket层

linux内核网络子系统初探2—socket层 一、内核网络socket层相关 接着上文&#xff0c;从这章开始&#xff0c;将按照五层网络模型的顺序逐层分析内核代码。 linux1.0网络协议栈部分代码如下&#xff1a; [rootlocalhost linux-1.0]# ls net/ ddi.c inet Makefile socket.…