优化器

news/2024/11/17 6:26:08/文章来源:https://www.cnblogs.com/EIPsilly/p/18381925

优化器

目录
  • 优化器
    • SGD
    • Adagrad
    • Adadelta
    • RMSprop
    • Adam
    • AdamW

SGD

随机梯度下降
问题:训练轨迹会呈现锯齿状,这无疑会大大延长训练时间。同时,由于存在摆动现象,学习率只能设置的较小,才不会因为步伐太大而偏离最小值。
Momentum:将一段时间内的梯度向量进行了加权平均,分别计算得到梯度更新过程中参数的大致走向,一定程度上消除了更新过程中的不确定性因素(如摆动现象),使得梯度更新朝着一个越来越明确的方向前进。\(\beta\) 常取0.90.9 的 60 次方约等于 0.001,相当仅考虑最近的60轮迭代所产生的的梯度。

\[m_t=\beta m_{t-1}+\alpha g_t, \left(\alpha\text{取1或}1-\beta\right) \]

\[\theta_t=\theta_{t-1}-\eta*m_t \]

Adagrad

AdaGrad对学习率进行了一个约束,对于经常更新的参数,我们已经积累了大量关于它的知识,不希望被单个样本影响太大,希望学习速率慢一些;对于偶尔更新的参数,我们了解的信息太少,希望能从每个偶然出现的样本身上多学一些,即学习速率大一些。
AdaGrad引入了二阶动量。二阶动量是迄今为止所有梯度值的平方和,即\(v_t=\sum_{i=1}^{t}g_i^2\)
优点:AdaGrad消除了手动调整学习率的需要。AdaGrad在迭代过程中不断调整学习率,并让目标函数中的每个参数都分别拥有自己的学习率。
缺点:1. 分母会不断积累,这样学习率就会收缩并最终会变得非常小。2. 需要设置全局学习率

\[\theta_t=\theta_{t-1} - \frac{\eta}{\sqrt{v_t+\epsilon}}*g_t \]

Adadelta

这个算法是对 Adagrad 的改进,主要从两个方面进行改进:

  1. 解决学习率逐渐下降至 0 的问题:
    Adadelta 在一个窗口 w 中对梯度进行求和,而不是对梯度一直累加。但由于需要存储前w个状态,比较麻烦。AdaDelta使用了类似动量因子的平均方法(分母相当于使用了梯度的均方根 \(RMS\)):

    \[ v_t=\beta * v_{t-1} + (1-\beta) * g_t^2 \]

    \[ \theta_t=\theta_{t-1} - \frac{\eta}{\sqrt{v_t+\epsilon}}*g_t \]

  2. 解决依赖全局学习率的问题:
    将学习率 \(\eta\) 换成了 \(RMS[\Delta \theta]\):

    \[ \theta_t=\theta_{t-1}-\frac{RMS[\Delta \theta]_{t-1}}{RMS[g]_t}*g_t \]

    修改为动量形式(\(\beta\) 一般取 0.9):

    \[ \begin{align*}v_t&=\beta * v_{t-1}+(1-\beta)* g_t^2 \\\theta_t&=\theta_{t-1}- \frac{\sqrt{u_{t-1}+\epsilon}}{\sqrt{v_t+\epsilon}}g_t\\u_t&=\beta * u_{t-1}+(1-\beta)*\Delta \theta_t^2 \\\end{align*} \]

    Adadelta

RMSprop

RMSprop是为了解决 Adagrad 学习率急剧下降问题,与 Adadelta 的第1个形式相同(\(\beta\) 常取 0.9):

\[v_t=\beta * v_{t-1} + (1-\beta) * g_t^2 \]

\[\theta_t=\theta_{t-1} - \frac{\eta}{\sqrt{v_t+\epsilon}}*g_t \]

Adam

Adam 计算每个参数的自适应学习率,相当于 RMSprop + Momentum,并进行了偏差修正

因为 \(m_t\)\(v_t\) 被初始化为 0 向量,所以在刚开始迭代的时候是有偏的,需要进行偏差修正,修正系数分别为 \(1-\beta_1^t\)\(1-\beta_2^t\) ,随着迭代的进行(\(t\) 增加),估计逐渐变为无偏估计,修正强度逐渐降低为1。

\[\begin{align*} &m_t=\beta_1 * m_{t-1} + (1-\beta_1)*g_t \\ &v_t=\beta_2 * v_{t-1} + (1-\beta_2)*g_t^2 \\ &\hat{m}_t=\frac{m_t}{1-\beta_1^t} \\ &\hat{v}_t=\frac{v_t}{1-\beta_2^t} \\ &\theta_t=\theta_{t-1}-\eta*\frac{\hat{m}_t}{\sqrt{\hat{v}_t}+\epsilon} \end{align*} \]

Adam

分子表示在过去一段时间内各分量的平均值,即梯度更新的大致走向,分母表示在过去一段时间内各分量的平均大小。相当于分两步走,第一步是确定一个合适的下降方向(即分子项),第二步,对这个选定的方向上的各个子方向做一下微调(分母项),这样,推进较快的子方向会慢下来,推进较慢的子方向会加快速度,动态调整了各个子方向的学习率。因此,Adam结合了Momentum和RMSprop两种算法的优点。

AdamW

Adam+权重衰减
AdamW_1
AdamW_2

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

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

相关文章

读软件开发安全之道:概念、设计与实施10安全设计审查

安全设计审查1. 安全设计审查 1.1. Security Design Review,SDR 1.2. 将安全性融入软件设计的最佳方法之一是戴上“安全帽”进行单独的设计审查 1.3. 安全审查员是熟悉软件运行的系统和环境,以及知道如何使用它的人,但他们不参与设计工作,这能够给予他们距离感以保持客观性…

【Java】FastJson 利用JSONPath.eval快速获取目标json的属性值

一、需求场景: JSON串格式化之后,JSON树的属性深度太长了 二、代码实现: 语法等效MySQL的JSON读取方式 方法调用的返回类型为Object,强转至String进行处理/* 读取报告时间 */ Object reportDateEval = JSONPath.eval(jsonObject, "$.categories[0].children[0].data.…

10.网络安全技术

12-1 数据备份策略和盘阵列备备份方式12-2 加密技术12-3 入侵检测系统IDS12-4 入侵防护系统IPS脚本属于应用12-5 网络版防病毒软件的安装及配置12-6 防火墙PIX配置过程下面nameif常考内网100外网0下面管道第二常考www是默认的80端口C,监视模式TCPorUDPfixup nat global

30 分钟内了解 IEC 61850

30 分钟内了解 IEC 61850 索引术语——IEC 61850 配置、语义分层对象数据模型、客户端 - 服务器、发布 - 订阅。平时学习标准或调试IEC61850设备,需要IEC61850模拟器,推荐一款:客户端下载地址:IEC61850客户端模拟器 服务端下载地址:IEC61850服务端模拟器谣传 IEC 61850 过…

6.2K star!推荐一款开源混沌工程测试平台:Chaos Mesh

1、Chaos Mesh 介绍 Chaos Mesh是一个开源的混沌工程平台,旨在帮助用户在生产环境中测试、验证和优化其应用程序的可靠性和稳定性。通过引入故障注入和混沌工程原则,Chaos Mesh可以模拟各种故障场景,如网络延迟、节点故障、磁盘故障等,以帮助用户发现和解决系统中的潜在问题…

看图学 - Swift 并发

Swift 内置支持以结构化方式编写异步和并行代码。看着那些层层嵌套的闭包,你是不是很想把它们全都干掉? 本文首发于 Ficow Shens Blog,原文地址: 看图学 - Swift 并发。想第一时间获取对于自己有帮助的新内容? 欢迎关注 Ficow 的公众号: 看图学 - Swift 并发如需获取 PD…

《黑神话,悟空》研发公司的薪资水平

大家好,我是晓凡。 最近全网最火爆的要属《黑神话:悟空》了,即便是我这个平时不沾游戏、不追直播的人,也看直播看得津津有味。 一、销量与热度背后 首先,让我们来看看那些令人瞩目的数字。《黑神话:悟空》自发布以来,销量已经超过450万份,总销售额达到了惊人的15亿元人…

NetScaler Release 14.1 Build 29.63 (nCore, VPX, SDX, CPX, BLX) - 混合多云应用交付控制器

NetScaler Release 14.1 Build 29.63 (nCore, VPX, SDX, CPX, BLX) - 混合多云应用交付控制器NetScaler Release 14.1 Build 29.63 (nCore, VPX, SDX, CPX, BLX) - 混合多云应用交付控制器 NetScaler - 混合多云应用交付控制器 请访问原文链接:https://sysin.org/blog/netscal…

dotnet WinUI 3 修复非打包应用运行提示 Microsoft.ui.xaml.dll 找不到

本文记录一个 WinUI 3 的坑点,有时候开发者只是想拉下来代码跑一下,自己本机没有预先安装好 Windows App Runtime 导致缺失环境,进而在运行的时候提示 Unable to load DLL 找不到 Microsoft.ui.xaml.dll 启动失败详细的错误信息如下 System.DllNotFoundException:“Unable t…

读 dotnet 源代码 为何 Thread.Sleep 半毫秒和一毫秒等待时间差距如此之大

本文记录我读 dotnet 的源代码了解到为什么调用 Thread.Sleep 的时候,传入的是不足一毫秒,如半毫秒时或 0.99 毫秒,与传入是一毫秒时,两者的等待时间差距非常大大概如下的代码,分别进行两次传入给 Thread.Sleep 不同等待时间的循环测试。其中一次传入的是 0.99 毫秒,一次…

从零开始学会建网站,个人博客建设!一步步全程图文教程。

第一步,需要购买一个域名,当然,若是测试只用也可用ip暂时替代。 比如 .com .cn .net 等域名,比如以本站:70zhan.com 为例,70zhan是我选择的域名,而.com后缀是国际域名,目前推荐的国际域名后缀包括:.com .net .org,如果是国内则可以选择.cn! 目前国际域名都比较贵,…

如何用英语读出所有数字 All In One

如何用英语读出所有数字 All In One 大数/小数/序数/分数/日期/地址/电话如何用英语读出所有数字 All In One大数/小数/序数/分数/日期/地址/电话号码图解大数基数词序数词小数⚠️ 根据语境,区分 $4.99 与 $499分数日期地址电话号码demosHow to read ALL NUMBERS in English…