机器学习-New Optimization

news2024/11/25 9:59:06

机器学习(New Optimization)

前言:
学习资料

videopptblog

下面的PPT里面有一些符号错误,但是我还是按照PPT的内容编写公式,自己直到符号表示什么含义就好了

Notation

符号解释
θ t \theta_t θt第 t 步时,模型的参数
Δ L ( θ ) \Delta L(\theta) ΔL(θ) or g t g_t gt模型参数为 θ t \theta_t θt 时,对应的梯度,用于计算 θ t + 1 \theta_{t+1} θt+1
m t + 1 m_{t+1} mt+1从第 0 步到第 t 步累计的momentum,用于计算 θ t + 1 \theta_{t+1} θt+1

Notation


On-line VS Off-line

  • On-line:每次参数更新,只给一对 ( x t x_t xt , y t y_t yt )
  • Off-line:每次更新参数,考虑所有的训练资料

常用优化算法

intention:

  • Find a 𝜃 to get the lowest ∑ x L ( θ ; x ) \sum_x L(\theta; x) xL(θ;x) !!
  • Or, Find a 𝜃 to get the lowest L ( θ ) L(\theta) L(θ) !!

1. 随机梯度下降法(SGD,Stochastic gradient descent)

算法思想:少量多次

  • GD算法进行梯度更新的时候,一般都使所有数据训练完成以后才进行一次更新,每一次都是对参数进行一大步的更新
  • SGD算法每次选取其中的一个样本进行梯度的计算,然后再进行参数的更新,每一次都是对参数进行一小步的更新

注意

  • SGD随机梯度下降本质是只取一个样本来计算梯度,避免了梯度下降用全部样本计算梯度的大量运算,而在上面的代码里的loss.backward()会使用全部样本来计算梯度,可以去看看这个问答
  • 先在的主流框架中所谓的SGD实际上都是Mini-batch Gradient Descent (MBGD,亦成为SGD)。对于含有N个训练样本的数据集,每次参数更新,仅依据一部分数据计算梯度。小批量梯度下降法既保证了训练速度,也保证了最后收敛的准确率。

图解:
SGD


2. SGD with Momentum (SGDM)

算法思想:在SGD的基础上,考虑前一次更新的梯度。

  • 将前面的梯度考虑在内,防止出现局部最优解
  • Local Minimum,此时的gradient是0,但是不是全局最优解,如果我们考虑前面的梯度的history,那么他会继续优化前进,达到更好的效果

算法:

  • 参数: θ t \theta^t θt
  • 梯度: Δ L ( θ t ) \Delta L(\theta^t) ΔL(θt)
  • 移动:
    • v 0 = 0 v^0 = 0 v0=0
    • v t + 1 = λ v t + η Δ L ( θ t ) v^{t+1} = \lambda v^t + \eta \Delta L(\theta^t) vt+1=λvt+ηΔL(θt)
  • 参数更新: θ t + 1 = θ t + v t + 1 \theta^{t+1} = \theta^t + v^{t+1} θt+1=θt+vt+1

Movement not just based on gradient, but previous movement
图解:
SGDM

Why momentum?
  • Momentum即动量,它模拟的是物体运动时的惯性,即更新的时候在一定程度上保留之前更新的方向,同时利用当前batch的梯度微调最终的更新方向。这样一来,可以在一定程度上增加稳定性,从而学习地更快,并且还有一定摆脱局部最优的能力
  • 防止局部最优解
  • 在进入梯度为0的地方,并不会马上停下来,而因为gradient of previous 而继续前进

Momentum


3. Adagrad

算法思想:根据所有的梯度自行调整学习率,使得模型在较短的时间内达到较好的收敛效果
算法:
θ t = θ t − 1 − η ∑ i = 0 t − 1 ( g i ) 2 g t − 1 \theta_t = \theta_{t-1} - \frac{\eta}{\sqrt{\sum_{i=0}^{t-1}(g_i)^2}} g_{t-1} θt=θt1i=0t1(gi)2 ηgt1
优缺点:

  • 优点:
    • 自适应学习率,根据每个参数的历史梯度信息调整学习率,有助于更稳定地收敛。
    • 不需要手动调整学习率,适应不同参数的更新频率。
    • 适用于稀疏数据,对出现频率较低的参数使用较大的学习率。
  • 缺点:
    • 学习率逐渐减小可能导致学习率过小,使得模型停止学习或更新过于缓慢。
    • 对非凸优化问题可能表现不佳,难以跳出局部最小值。
    • 内存开销较大,对大规模模型和数据集可能不适用。

图解:
在这里插入图片描述


4. RMSProp(Root Mean Square Propagation)

算法思想:实现学习率的自动更新

  • 用微分平方移动加权平均解决了vt一直增大,防止在t很大以后,系数太小,无法走出去的问题。vt如果是前t个gradient的平方和,分母会永无止境的增加。
  • 与Adagrad一致,但解决了Adagrad的缺点

算法:

  • v 1 = g 0 2 v_1 = g_0^2 v1=g02
  • v t = α v t − 1 + ( 1 − α ) g t − 1 2 v_t = \alpha v_{t-1} + (1 - \alpha)g_{t-1}^2 vt=αvt1+(1α)gt12
  • θ t = θ t − 1 − η v t g t − 1 \theta_t = \theta_{t-1} - \frac{\eta}{\sqrt{v_t}}g_{t-1} θt=θt1vt ηgt1
  • α \alpha α:衰减因子(一般取值较接近1,如0.9)

优缺点:

  • 优点:
    • 自适应学习率,可以在训练过程中调整学习率,有助于稳定收敛。
    • 解决Adagrad的学习率衰减问题,避免学习率过小导致停止学习。
    • 在非凸优化问题中表现良好,有助于跳出局部最小值。
    • 适用于大规模模型和数据集,内存开销较小。
  • 缺点:
    • 学习率仍可能衰减过快,导致收敛较慢。
    • 对于不同问题,对超参数敏感,需要调参。
    • 不适用于稀疏数据。

图解:
RMSProp

5. Adam(Adaptive Moment Estimation)

算法思想:将SGDM与RMSProp合在一起使用
算法:

  • m t = β 1 m t − 1 + ( 1 − β 1 ) g t ( 1 ) m_t = \beta_1m_{t-1} + (1 - \beta_1)g_t \qquad(1) mt=β1mt1+(1β1)gt(1)
  • v t = β 2 v t − 1 + ( 1 − β 2 ) g t 2 ( 2 ) v_t = \beta_2v_{t-1} + (1 - \beta_2)g_t^2 \qquad(2) vt=β2vt1+(1β2)gt2(2)
  • m ^ t = m t 1 − β 1 t ( 3 ) \widehat{m}_t = \frac{m_t}{1 - \beta_1^t} \qquad(3) m t=1β1tmt(3)
  • v ^ t = v t 1 − β 2 t ( 4 ) \widehat{v}_t = \frac{v_t}{1 - \beta_2^t} \qquad(4) v t=1β2tvt(4)
  • θ t = θ t − 1 − η v ^ t + ε m ^ t ( 5 ) \theta_t = \theta_{t-1} - \frac{\eta}{\sqrt{\widehat{v}_t + \varepsilon}}\widehat{m}_t \qquad(5) θt=θt1v t+ε ηm t(5)

注解:

  • 公式(1)取自SGDM算法,保留了Momentum即动量,它模拟的是物体运动时的惯性,即更新的时候在一定程度上保留之前更新的方向,同时利用当前batch的梯度微调最终的更新方向。
    • m t m_t mt是本次的Momentum
    • m t − 1 m_{t-1} mt1是上一次的Momentum
    • g t g_t gt是本次的梯度
    • β 1 \beta_1 β1是超参数,默认为0.9。通过修改这个参数实现前面动量对后面动向的影响。
    • β 1 \beta_1 β1看起感觉只考虑了0.1的本次梯度,考虑了0.9的历史梯度,但本次梯度会在下次更新时被考虑进来。
  • 公式(2)取自RMSProp算法, β 2 \beta_2 β2是超参数,默认0.999。
  • 公式(3)和(4)是分别对 m t m_t mt v t v_t vt进行了放大,而且是放大得越来越少。
    • 注意:Adam算法中的矩变量(一阶矩估计m和二阶矩估计v)在训练的初期可能会有偏差。这是因为在初始时,这些变量会被初始化为零,导致它们在训练初期偏向于较小的值。
  • 公式(5)是我们最后更新的公式,分母加入 ε \varepsilon ε是为了防止分母为0,一般很小,默认 1 0 − 8 10^{-8} 108.
  • 矩:通过这种方式,Adam算法能够更快地收敛并避免陷入局部最小值。
    • 一阶矩变量m类似于动量的作用,有助于平滑梯度更新方向;
    • 二阶矩变量v类似于RMSProp的作用,对历史梯度平方进行衰减,适应不同参数的更新频率。

优缺点:

  • 优点:
    • 自适应学习率,稳定收敛,适应不同参数的更新频率。
    • 综合了动量和自适应学习率,高效优化模型参数。
    • 适用于稀疏数据和大规模模型,内存开销较小。
  • 缺点:
    • 对非平稳目标函数可能不稳定。
    • 对超参数敏感,需要调参。

图解:
Adam
Adam
Adam

6. AMSGrad(Adaptive Moment Estimation with Slower Learning Rates)

算法思想:与Adam算法基本一样(Adam算法的优化)
调整:二阶矩变量(自适应学习率)
v ^ t = m a x ( v ^ t − 1 , v t ) \widehat{v}_t = max(\widehat{v}_{t-1},v_t) v t=max(v t1,vt)
在对二阶矩变量进行纠正之前,先与前一次纠正后的二阶矩变量进行大小比较,直接赋值给纠正后的二阶矩变量,然后在对纠正后的二阶矩变量再进行纠正
算法:

  • m t = β 1 m t − 1 + ( 1 − β 1 ) g t ( 1 ) m_t = \beta_1m_{t-1} + (1 - \beta_1)g_t \qquad(1) mt=β1mt1+(1β1)gt(1)
  • v t = β 2 v t − 1 + ( 1 − β 2 ) g t 2 ( 2 ) v_t = \beta_2v_{t-1} + (1 - \beta_2)g_t^2 \qquad(2) vt=β2vt1+(1β2)gt2(2)
  • v ^ t = m a x ( v ^ t − 1 , v t ) ( 3 ) \widehat{v}_t = max(\widehat{v}_{t-1},v_t) \qquad(3) v t=max(v t1,vt)(3)
  • m ^ t = m t 1 − β 1 t ( 4 ) \widehat{m}_t = \frac{m_t}{1 - \beta_1^t} \qquad(4) m t=1β1tmt(4)
  • v ^ t = v ^ t 1 − β 2 t ( 5 ) \widehat{v}_t = \frac{\widehat{v}_t}{1 - \beta_2^t} \qquad(5) v t=1β2tv t(5)
  • θ t = θ t − 1 − η v ^ t + ε m ^ t ( 6 ) \theta_t = \theta_{t-1} - \frac{\eta}{\sqrt{\widehat{v}_t + \varepsilon}}\widehat{m}_t \qquad(6) θt=θt1v t+ε ηm t(6)

优缺点:

  • 优点:
    • 防止学习率过大,更稳定地收敛。
    • 适用于不同问题,在某些复杂的优化问题中表现优于Adam算法。
  • 缺点:
    • 需要额外的存储开销,可能增加内存需求。
    • 需要调参,同样需要调节学习率和衰减因子等超参数。

7. SWATS(Simply combine Adam with SGDM)

算法思想:将Adam算法和SGDM(随机梯度下降法与动量)算法简单地结合在一起的优化算法。

  • 在SGDM中,动量被用来加速优化过程,通过将上一次的更新的一部分加到当前的更新中,帮助算法在某个方向上“保持运动”,从而加快收敛速度。
  • Adam算法结合了自适应学习率和动量的优点。它根据历史梯度信息为每个参数自适应地调整学习率,从而在不同场景下实现更高效的优化。
  • 在SWATS算法中,主要思想是同时使用Adam的自适应学习率和SGDM的动量。通过这样做,算法可以充分利用Adam对每个参数使用不同学习率的能力,以及SGDM的加速特性。

8. RAdam(Rectified Adam)

算法思想:
算法:

  1. 初始化:设置学习率 α \alpha α,一阶矩估计的衰减因子 β 1 \beta_1 β1和二阶矩估计的衰减因子 β 2 \beta_2 β2,并初始化一阶矩变量 m m m和二阶矩变量 v v v
  2. 计算梯度:计算当前迭代的梯度 g t = ∇ θ L ( θ ) g_t = \nabla_{\theta} L(\theta) gt=θL(θ)
  3. 更新一阶矩变量:计算一阶矩估计 m t = β 1 m t − 1 + ( 1 − β 1 ) g t m_t = \beta_1 m_{t-1} + (1 - \beta_1) g_t mt=β1mt1+(1β1)gt
  4. 更新二阶矩变量:计算二阶矩估计 v t = β 2 v t − 1 + ( 1 − β 2 ) g t 2 v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2 vt=β2vt1+(1β2)gt2
  5. 计算修正后的一阶矩估计:计算修正后的一阶矩估计 m ^ t = m t 1 − β 1 t \widehat m_t = \frac{m_t}{1 - \beta_1^t} m t=1β1tmt
  6. 计算修正项 ρ \rho ρ:计算 ρ = ( 2 − β 2 t ) ( 1 − β 2 t ) \rho = \sqrt{\frac{(2 - \beta_2^t)}{(1 - \beta_2^t)}} ρ=(1β2t)(2β2t)
  7. 计算修正后的学习率:计算修正后的学习率 l r t = α ρ lr_t = \alpha \rho lrt=αρ
  8. 计算RAdam更新量:如果 v ^ t = max ⁡ ( v ^ t − 1 , v t ) \widehat v_t = \max(\widehat v_{t-1}, v_t) v t=max(v t1,vt),则 r t = l r t m ^ t v ^ t + ϵ r_t = \frac{lr_t \widehat m_t}{\sqrt{\widehat v_t} + \epsilon} rt=v t +ϵlrtm t,否则 r t = l r t m t v t + ϵ r_t = \frac{lr_t m_t}{\sqrt{v_t} + \epsilon} rt=vt +ϵlrtmt
  9. 更新参数: θ t = θ t − 1 − r t \theta_t = \theta_{t-1} - r_t θt=θt1rt

优缺点:

  • 优点:
    • 稳定性改进:修正学习率在训练初期的偏差,提高了算法的稳定性,更容易收敛。
    • 自适应学习率:无需手动调节学习率,算法能够自适应地调整学习率。
    • 高效:在大规模模型和数据集上具有较快的收敛速度。
  • 缺点:
    • 适用性限制:对于某些问题可能不如其他优化算法效果好。
    • 需要额外存储开销:算法需要额外存储梯度平方估计的历史信息,增加一些内存开销。
    • 需要调参:虽然不需手动调节学习率,但仍需调节其他超参数以获得最佳性能。

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

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

相关文章

CSS图片放到<div>里面,自适应宽高全部显示,点击图片跳到新页面预览

有一个需求是图片放到一个固定宽高的<div>里面&#xff0c;不管是横图还是竖图&#xff0c;都要全部显示出来并且保持图片的长宽比例不变形&#xff0c;点击图片可以跳到一个新页面预览&#xff0c;代码如下&#xff1a; <!DOCTYPE html> <html> <head>…

第六次作业 密码学

发送者为Alice 接受者为Bob 首先对原始信息进行hash运算得到信息摘要&#xff0c;然后使用发送者Alice私钥进行签名&#xff08;签名的作用是验证该信息是Alice的&#xff09;&#xff0c;然后将原始信息数字签名Alice证书&#xff08;该Alice的证书是由CA组织进行办发的&…

YOLOV8改进:更换PoolFormer主干网络

1.该文章属于YOLOV5/YOLOV7/YOLOV8改进专栏,包含大量的改进方式,主要以2023年的最新文章和2022年的文章提出改进方式。 2.提供更加详细的改进方法,如将注意力机制添加到网络的不同位置,便于做实验,也可以当做论文的创新点。 2.涨点效果:添加PoolFormer主干,有效涨点。 论…

bigemap在工程项目行业里的应用案例

一、工程单位为什么要选择bigemap : 1.地图影像清晰&#xff0c;更新及时 2.能直接用软件做等高线地形图进行投影转换配合cad来使用 3.直接在线下载卫星图和高程节省测绘时间&#xff0c;以及手机端去做数据的采集&#xff0c;对工作有帮助 二、工程单位使用场景&#xff1a; …

Stable Diffusion AI绘画初学者指南【概述、云端环境搭建】

概述、云端环境搭建 Stable Diffusion 是什么、能干啥&#xff1f; 是一种基于深度学习的图像处理技术&#xff0c;可以生成高质量的图像。它可以在不需要真实图像的情况下&#xff0c;通过文字描述来生成逼真的图像。 可以对图像进行修复、超分辨率转换&#xff0c;将低分辨…

可以写进简历的kafka优化-----吞吐量提升一倍的方法

冲突 在看到项目工程里kafka 生产端配置的batch.size为500&#xff0c;而实际业务数据平均有1K大小的时候&#xff1b;我有点懵了。是的&#xff0c;这里矛盾了&#xff1b;莫非之前的作者认为这个batch.size是发送的条数&#xff0c;而不是kafka生产端内存缓存记录的大小&…

【数据结构】手撕排序NO.2----直接插入排序与希尔排序

目录 一. 导入 二. 直接插入排序 2.1 基本思想 2.2 过程分析 2.3 代码实现 2.4 复杂度/稳定性分析 三. 希尔排序(缩小增量排序) 3.1 基本思想 3.2 过程分析 3.3 代码实现 3.4 复杂度/稳定性分析 一. 导入 本期是排序篇的第二期&#xff0c;我们的主角是插入排序。在座的各…

提高电脑寿命的维护技巧与方法分享

在维护电脑运行方面&#xff0c;我有一些自己觉得非常有用的技巧和方法。下面我将分享一些我常用的维护技巧&#xff0c;并解释为什么我会选择这样做以及这样做的好处。 首先&#xff0c;我经常清理我的电脑内部的灰尘。电脑内部的灰尘会影响散热效果&#xff0c;导致电脑发热…

Nodejs 第五章(Npm run 原理)

npm run xxx 发生了什么 按照下面的例子npm run dev 举例过程中发生了什么 读取package json 的scripts 对应的脚本命令(dev:vite),vite是个可执行脚本&#xff0c;他的查找规则是&#xff1a; 先从当前项目的node_modules/.bin去查找可执行命令vite如果没找到就去全局的node…

C++模板初阶学习

目录 1.函数模板1.1函数模板概念1.2函数模板格式1.3函数模板的原理1.4函数模板实例化隐式实例化显示实例化 1.5模板参数适配原则 2.类模板2.1类模板的定义格式2.2类模板实例化 总结 1.函数模板 如何实现一个通用的交换函数呢&#xff1f; #include<iostream> using nam…

软件外包开发的JAVA开发框架

Java的开发框架有很多&#xff0c;以下是一些常见的Java开发框架及其特点&#xff0c;每个框架都有其特定的使用场景和优势&#xff0c;开发者可以根据项目的需求选择合适的框架。今天和大家介绍常见的框架及特点&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&…

Day50 算法记录| 动态规划 17(子序列)

这里写目录标题 647. 回文子串516.最长回文子序列总结 647. 回文子串 1.动态规划和2.中心扩展 这个视频是基于上面的视频的代码 方法1:动态规划 布尔类型的dp[i][j]&#xff1a;表示区间范围[i,j] &#xff08;注意是左闭右闭&#xff09;的子串是否是回文子串&#xff0c;如…

面向切面编程(SpringAOP)、通过注解实现AOP代码、AOP的工作流程

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaweb 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 SpringAOP 一、AOP简介1.1连接点&#xff08;JoinPoint&am…

IntelliJ IDEA 2023.1.3 主菜单不见了

通过以下操作&#xff0c;去掉了勾&#xff0c;把主菜单玩没了 然后主菜单找半天都不知道怎么回来&#xff0c;下面记录找回来的过程 双击shift&#xff0c;在弹出的菜单里面搜索 "main menu"&#xff0c;在下图高亮位置选项改为 on

火警智能感知定位 智慧消防大数据可视化监测系统

伴随着城市建设的快速发展&#xff0c;城市消防安全风险的不断上升&#xff0c;城市高层、超高层建筑和大型建筑日益增多&#xff0c;建筑消防安全问题越来越突出。 建设背景 市场背景 近年来&#xff0c;我国多数省级以上城市、90%左右地级以上城市均提出了智慧消防建设计划…

无涯教程-jQuery - width( )方法函数

width()方法获取第一个匹配元素的当前计算像素宽度。 width( ) - 语法 selector.width( ) 此方法能够找到窗口和文档的宽度&#xff0c;如下所示: $(window).width(); //返回浏览器窗口的宽度 $(document).width(); //返回 HTML 文档的宽度 width( ) - 示例 <html&g…

如何用C#实现上位机与下位机之间的Wi-Fi通信?

有IP协议支持的话用UDP报文或者TCP直接发IP地址和端口不行么&#xff1f;你说的WiFi难道是2.4GHz频率模块那种东东&#xff1f; 你既然用了wifi&#xff0c;那么只要上位机和下位机的对应wifi网卡都具有ip地址以及其协议支持&#xff0c;那么和网络编程没啥子明显区别的吧………

pycharm制作柱状图

Bar - Bar_rotate_xaxis_label 解决标签名字过长的问题 from pyecharts import options as opts from pyecharts.charts import Barc (Bar().add_xaxis(["高等数学1&#xff0c;2","C语言程序设计","python程序设计","大数据导论",…

MBA拓展有感-见好就收,还是挑战到底?MBA拓展有感-见好就收,还是挑战到底?

今天看到新闻提到某位坚持了14年高考的同学滑档&#xff0c;让人心生感叹&#xff1a;无论在日常工作还是生活中&#xff0c;选择都是非常重要的。不由想起前段时间我参加研究生新生拓展时的一些感悟&#xff0c;和大家分享一下。 事情的起因是拓展活动中的一个分队竞技类的活…

利用DIE、de4dot和dnspy进行反编译

1.数据准备 1.软件 知云翻译7.0这个版本好破解&#xff0c;该软件是C#写的程序 DIE&#xff08;Detect it Easy&#xff09;该软件是进行查看软件的壳及编译程序&#xff0c;详细了解EXE软件 de4dot是对PE进行脱壳处理&#xff0c;源码下载链接&#xff1a;GitHub - de4dot…