梯度下降算法、随机梯度下降算法、动量随机梯度下降算法、AdaGrad算法、RMSProp算法、Adam算法详细介绍及其原理详解

news2024/10/6 10:26:20

相关文章

  1. 梯度下降算法、随机梯度下降算法、动量随机梯度下降算法、AdaGrad算法、RMSProp算法、Adam算法详细介绍及其原理详解
  2. 反向传播算法和计算图详细介绍及其原理详解

文章目录

  • 相关文章
  • 前言
  • 一、回归拟合问题
  • 二、损失函数
  • 三、梯度下降算法
  • 四、随机梯度下降算法
  • 五、动量随机梯度下降算法
  • 六、AdaGrad算法
  • 七、RMSProp算法
  • 八、Adam算法
  • 总结


前言

  本篇博文详细介绍了关于梯度下降算法的所有相关知识,具体包括:回归拟合问题、损失函数、梯度下降算法、随机梯度下降算法、动量随机梯度下降算法、AdaGrad算法、RMSProp算法、Adam算法。相信各位读者详读本篇博文后一定能学习到很多知识。关于梯度下降算法的相关知识点也是深度学习中的重要内容,所以本篇博文针对这些算法的原理进行了详细解释,并辅以一定量的图片进行说明。当然,由于我本人能力有限,可能有些地方写的不是特别准确,还请读者批评指正,谢谢!下面就开始本篇博文的全部内容!


一、回归拟合问题

  如图1所示,若我们使用直线 y = w ^ x + b y=\widehat{w} x+b y=w x+b来拟合这三个点(假设斜率 w ^ \widehat{w} w 已知),该如何处理呢?

请添加图片描述

图1:直线拟合定点示意图

  很明显,我们应该寻找一个最好的截距 b b b,使得直线与三个点的平均距离最短,如图2所示:

请添加图片描述

图2:定点到直线的距离示意图

二、损失函数

  由图2可知,三个定点到直线(0的距离分别为 e 1 、 e 2 、 e 3 e_1、e_2、e_3 e1e2e3 e i ( 1 ≤ i ≤ 3 ) e_i(1≤i≤3) ei(1i3)也被称为定点到直线的距离误差,很明显,距离误差应该越小越好。我们可以把此距离误差写为最小二乘的形式:
L = 1 2 ∑ i = 1 3 ∣ e i ∣ 2 L=\frac{1}{2} \sum_{i=1}^{3}\left|e_{i}\right|^{2} L=21i=13ei2
  此时,函数 L L L就是我们俗称的“损失函数”,我们的目的就是让损失函数最小,这样直线才能距离定点的平均距离最小。那么如何使损失函数最小呢?经过刚才的分析,应该通过调整截距 b b b的值,使损失函数达到最小值。所以,我们可以将直线方程代入,可得损失函数为:
L = 1 2 ∑ i = 1 3 ∣ e i ∣ 2 = 1 2 ∑ i = 1 3 [ y i − ( w ^ x i + b ) ] 2 = L = 1 2 ∑ i = 1 3 b 2 + 2 ( w ^ x i − y i ) b + ( y i − w ^ x i ) 2 \begin{equation} \begin{aligned} L&=\frac{1}{2} \sum_{i=1}^{3}\left|e_{i}\right|^{2}\\ &=\frac{1}{2} \sum_{i=1}^{3}\left[y_{i}-\left(\widehat{w} x_{i}+b\right)\right]^{2}\\ &=L=\frac{1}{2} \sum_{i=1}^{3} b^{2}+2\left(\widehat{w} x_{i}-y_{i}\right) b+\left(y_{i}-\widehat{w} x_{i}\right)^{2} \end{aligned} \end{equation} L=21i=13ei2=21i=13[yi(w xi+b)]2=L=21i=13b2+2(w xiyi)b+(yiw xi)2

三、梯度下降算法

  可以发现,损失函数 L L L就是一个关于 b b b的二次函数,其他参数都是已知的,假设此时损失函数 L L L的图像如下所示:

请添加图片描述

图3:损失函数L图示

  那么计算机如何通过迭代优化 b b b的值使 L L L最小呢?在深度学习中,我们可以随机初始化 b b b的值,然后令:
b = b − ε d L d b b=b-\varepsilon \frac{dL}{db} b=bεdbdL
  其中, ε \varepsilon ε就是我们常说的学习率,我们可以通过调整学习率去调整 b b b的更新程度(梯度下降的步长),而 d L d b \frac{dL}{db} dbdL,是损失函数 L L L在初始化 b b b的位置的斜率。此时, b b b就更新为如下所示,看起来随着 b b b的更新,损失函数 L L L变小了。

请添加图片描述

图4:通过更新参数b使得损失值降低

  当 b b b更新后,直线 y = w ^ x + b y=\widehat{w} x+b y=w x+b也随之更新,因为 b b b影响直线的截距。可以发现,此时直线距离三个定点的平均距离变小了,说明上面的方法起作用了。

请添加图片描述

图5:更新参数后,直线的拟合效果变好

  我们可以继续的进行这个过程,通过迭代优化去调整 b b b的值,从而找到损失函数 L L L最小的点。

请添加图片描述

图6:不断计算直到损失值最小

  当优化到最低点的时候,斜率等于0,说明 d L d b \frac{dL}{db} dbdL也是0,那么 b b b不会再被更新,说明已经找到了最优的 b b b值,使得损失函数 L L L最小,那么整个优化过程结束。然后将 b b b代入到直线 y = w ^ x + b y=\widehat{w} x+b y=w x+b中,可以发现,此时直线距离三个定点的平均距离最小。这就是梯度下降算法(Gradient Descent,GD),其中 d L d b \frac{dL}{db} dbdL就称为梯度值。

请添加图片描述

图7:经过梯度下降算法后,得到最佳拟合效果

四、随机梯度下降算法

  在更一般的情况下,我们的数据点可能有很多,且分布无规律,那么此时就不能使用直线去拟合这些数据点了,我们可以考虑使用曲线拟合这些数据点,如下图所示。

请添加图片描述

图8:使用非线性函数拟合多个数据点

  此时,我们需要使用非线性函数 y = f ( x , θ ) y=f(x,\theta) y=f(x,θ)来拟合这些数据,其中要优化的参数为 θ \theta θ,与上面所讲述的梯度下降算法一样,我们需要计算每个样本点的损失,所以定义第 i i i个样本点的损失函数为:
L ( f ( x i , θ ) , y i ) L\left(f\left(x_{i}, \theta\right), y_{i}\right) L(f(xi,θ),yi)
  然后需要计算此样本点在 x i x_i xi处关于 θ \theta θ的梯度:
∇ θ L ( f ( x i , θ ) , y i ) \nabla_{\theta} L\left(f\left(x_{i}, \theta\right), y_{i}\right) θL(f(xi,θ),yi)
  因为样本点较多,所以还需要对所有样本点计算平均梯度:
g = 1 N ∇ θ ∑ i = 1 N L ( f ( x i , θ ) , y i ) g=\frac{1}{N} \nabla_{\theta} \sum_{i=1}^{N} L\left(f\left(x_{i}, \theta\right), y_{i}\right) g=N1θi=1NL(f(xi,θ),yi)
  当计算好 θ \theta θ关于所有样本点的平均梯度 g g g后,就可以更新 θ \theta θ的值,使损失函数更小,其中 ε \varepsilon ε为学习率:
θ = θ − ε g \theta=\theta-\varepsilon g θ=θεg
  虽然上面的方法确实可以帮助我们降低损失值,更好的拟合数据点,但是在整个计算过程中,我们需要计算每个样本点关于 θ \theta θ的梯度 ∇ θ L ( x i ) ( 1 ≤ i ≤ 8 ) \nabla_{\theta} L(x_{i})(1≤i≤8) θL(xi)(1i8),这显然会带来两个问题:

  • 需要计算全部的计算结果,导致内存开销大
  • 需要将所有数据计算完毕才更新一次参数,导致更新速度慢

  现实情况通常会有非常多的数据需要我们去拟合,那该如何解决上面的问题呢?解决方法也很简单:每次从 n n n个样本里不重复地随机选择 m m m个样本,用这 m m m个样本去计算梯度:
g = 1 m ∇ θ ∑ i = 1 m L ( f ( x i , θ ) , y i ) g=\frac{1}{m} \nabla_{\theta} \sum_{i=1}^{m} L\left(f\left(x_{i}, \theta\right), y_{i}\right) g=m1θi=1mL(f(xi,θ),yi)
  然后使用计算好的梯度更新参数:
θ = θ − ε g \theta=\theta-\varepsilon g θ=θεg
  此种方法也被形象地称为随机梯度下降算法(Stochastic Gradient Descent,SGD),此算法可以有效解决上面提到的内存开销和迭代速度的问题。

五、动量随机梯度下降算法

  看似随机梯度下降算法已经解决了所有问题,但是深度学习网络训练往往是一个非凸的优化过程,在损失函数的参数空间中通常分布各种的山脊和山谷,以一个山谷形状的损失函数的参数空间为例:

请添加图片描述

图9:损失函数的参数空间

  使用随机梯度下降的移动轨迹会在山谷两侧来回震荡,难以收敛到最低点(损失函数最小值)。那么该如何让运动轨迹变得更“平滑”一些呢?我们可以考虑利用上一次梯度来改变本次梯度下降的方向,如下图所示:

请添加图片描述

图10:考虑到动量的损失函数的参数空间

  很明显,参数的运动来自上一次梯度力的作用,这个力也被称为动量(Moment),动量结合此次梯度的方向,并利用向量的加法规则,使参数的运动轨迹更加“平滑”,这就是动量随机梯度下降算法。那么如何使用数学公式表达此算法呢?梯度的计算方法仍与之前一致:
g = 1 m ∇ θ ∑ i = 1 m L ( f ( x i , θ ) , y i ) g=\frac{1}{m} \nabla_{\theta} \sum_{i=1}^{m} L\left(f\left(x_{i}, \theta\right), y_{i}\right) g=m1θi=1mL(f(xi,θ),yi)
  引入的动量使用 v v v来表示:
v = α v − ε g v = \alpha v-\varepsilon g v=αvεg
  其中 α × v \alpha×v α×v就表示对原始梯度方向的保留量, α \alpha α的作用就是通过控制原始梯度(动量)对新梯度的影响程度。我们需要优化的参数仍是 θ \theta θ,此时的 θ \theta θ更新为:
θ = θ + v \theta=\theta+v θ=θ+v
  通过此算法,我们就可以在复杂的损失函数的参数空间中找到最优的参数运动轨迹方向,从而使损失值达到最小,最终到达最优化参数的目的,这就是动量随机梯度下降算法的作用。

六、AdaGrad算法

  目前基本已经将所有情况都讨论了,但是还有一点我们忽略了,就是学习率 ε \varepsilon ε的设置对模型结果好坏的影响。我们清楚,学习率的作用是为了:

  • 快速找到收敛方向
  • 细致优化防止震荡

  所以,我们通常手动设置一个学习率,随着模型的训练,学习率逐渐被调整的越来越小:

请添加图片描述

图11:学习率随模型训练在时间上的变化

  但是总是靠人工去调整学习率,不仅有一定的主观影响,而且还十分困难,导致最后的模型训练往往达不到想要的效果。如果可以每次结合梯度值,让神经网络在训练的过程中自适应的调整学习率,不仅可以解放人工操作,还可以提高模型训练精度。损失函数我们仍定义为:
g = 1 m ∇ θ ∑ i = 1 m L ( f ( x i , θ ) , y i ) g=\frac{1}{m} \nabla_{\theta} \sum_{i=1}^{m} L\left(f\left(x_{i}, \theta\right), y_{i}\right) g=m1θi=1mL(f(xi,θ),yi)
  此时,我们引入参数 r r r
r = r + g 2 r = r + g^{2} r=r+g2
   r r r的含义就是梯度大小随时间的积累量。这样,我们在进行参数更新时,就可以利用每次梯度的影响,去自适应的调整学习率大小,从而让 θ \theta θ最优化。此时 θ \theta θ的更新公式为:
θ = θ − ε r + δ g \theta = \theta-\frac{\varepsilon}{\sqrt{r}+\delta} g θ=θr +δεg
  其中, δ \delta δ是一个不为零的小量,作用是防止分母为零来稳定数值计算,可以手动初始化其参数大小。由以上公式可以发现:

  • 当梯度波动很大时,学习率就会下降
  • 当梯度波动很小时,学习率就会上升

  这种可以自适应调整学习率的算法被称为AdaGrad算法。

七、RMSProp算法

  虽然AdaGrad算法可以更好的调节学习率,但是这样学习率只和梯度有关,可能让学习率过早的变小而不好控制,最终导致模型训练效果不佳。所以应该让参数 r r r的变化不仅仅依赖于参数 g g g(梯度)。那么可以引入可以手动调节的参数$\rho $来控制优化过程。损失函数定义仍为:
g = 1 m ∇ θ ∑ i = 1 m L ( f ( x i , θ ) , y i ) g=\frac{1}{m} \nabla_{\theta} \sum_{i=1}^{m} L\left(f\left(x_{i}, \theta\right), y_{i}\right) g=m1θi=1mL(f(xi,θ),yi)
  而此时的 r r r由于引入可以手动调节的参数 ρ \rho ρ,那么 r r r定义为:
r = ρ r + ( 1 − ρ ) g 2 r = \rho r+(1-\rho) g^{2} r=ρr+(1ρ)g2
  此时更新 θ \theta θ的公式如下,其余参数含义仍不变:
θ = θ − ε r + δ g \theta = \theta-\frac{\varepsilon}{\sqrt{r+\delta}} g θ=θr+δ εg
  这种算法中的 r r r不仅仅依赖参数 g g g(梯度),还依赖于可以手动调节的参数 ρ \rho ρ,这样得到的学习率对于参数优化过程更有效。这种自适应调整学习率的算法被称为RMSProp。

八、Adam算法

  那么如果在参数更新时既考虑动量又考虑到参数对学习率的影响呢?假设损失函数仍定义为:
g = 1 m ∇ θ ∑ i = 1 m L ( f ( x i , θ ) , y i ) g=\frac{1}{m} \nabla_{\theta} \sum_{i=1}^{m} L\left(f\left(x_{i}, \theta\right), y_{i}\right) g=m1θi=1mL(f(xi,θ),yi)
  首先考虑动量,为了更好的考虑到动量对参数更新的影响,我们也将其改造为自适应动量,也就是引入新的参数 ρ 1 \rho_{1} ρ1来控制动量对梯度的优化过程:
s = ρ 1 s + ( 1 − ρ 1 ) g s = \rho_{1} s+\left(1-\rho_{1}\right) g s=ρ1s+(1ρ1)g
  然后修正此参数,使之在训练之初比较大,帮助算法快速收敛。所以将 s s s修正为 s ^ \hat{s} s^
s ^ = s 1 − ρ 1 t \hat{s} = \frac{s}{1-\rho_{1}^{t}} s^=1ρ1ts
  其次还要考虑学习率对参数更新的影响,此时仍需要通过自适应来调整学习率,所以参数 r r r的定义仍与RMSProp算法中的参数 r r r的定义一致:
r = ρ 2 r + ( 1 − ρ 2 ) g 2 r = \rho_{2} r+(1-\rho_{2}) g^{2} r=ρ2r+(1ρ2)g2
  对于参数 r r r来说,也需要修正,修正的目的与参数 s s s修正的目的一致,修正后的参数 r r r定义为 r ^ \hat{r} r^
r ^ = r 1 − ρ 2 t \hat{r} = \frac{r}{1-\rho_{2}^{t}} r^=1ρ2tr
  由于此时既考虑动量又考虑到参数对学习率的影响,所以更新 θ \theta θ的公式此时为:
θ = θ − ε s ^ r ^ + δ g \theta = \theta-\frac{\varepsilon \hat{s}}{\sqrt{\hat{r}}+\delta} g θ=θr^ +δεs^g
  此时更新后的参数 θ \theta θ由于集各家之所长,所以此参数效果更好,损失值也非常低,从而最终模型的训练准确率也会有所提高。此种既考虑了动量又考虑到了自适应学习率的算法被称为Adam算法。


总结

  以上就是本篇博客的全部内容了,可以看到我对每个算法以及其原理都进行了详细的介绍与解释,希望读者可以学习到自己想要的内容。后面还会针对深度学习这方面的算法做更深入的研究,还请读者期待!

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

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

相关文章

国际山岳日,周大福百年承诺续写永恒美好

纵横古今,俯瞰万里 每一寸绿野都孕育万物生机 每一座山林都彰示生命之本 百周年承诺 守护自然生态 周大福珠宝集团坚守“用真诚让幸福永恒“的企业理念 我们的百周年承诺包括对地球真诚且有效的付出服务 致力守护珍贵的大自然环境,为人类和星球幸福…

吉林优美姿文化:抖音怎么做爆款输出?

要知道,现在自媒体发展的越来越好了,其中发展的最好的就是抖音平台,大家如果要利用抖音平台达到引流的目的的话,也要去学习一下抖音相关的技巧,那么抖音怎么去买号呢?跟着吉林优美姿小编来一起看看吧&#…

亚马逊---人工智能入门---学习笔记

🚀write in front🚀 📝个人主页:认真写博客的夏目浅石. 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝​ 📣系列专栏:蓝桥杯算法笔记 💬总结:希望你看完之…

SpringBoot 的配置

目录 配置文件到底有什么作用呢 ? SpringBoot的配置文件的格式有哪些呢? properties配置文件 yml配置文件 properties乱码问题 多平台的配置文件设置 配置文件到底有什么作用呢 ? 配置文件主要是配置项目的一些重要的数据.. 比如配置数据库的连接信息 数据库是非常重…

虚拟机中如何安装Liunx环境

安装步骤 首先 准备一个Linux系统镜像 这是下载地址:https://cn.ubuntu.com/download/server/step1 然后打开虚拟机软件,点击新建 配置虚拟机名称 配置内存【建议4GB,内存小就少弄一顿】【再点击下一步】 硬盘配置 点击下一步 到这一步&am…

MVP、原型、概念验证,傻傻分不清楚?

MVP、原型以及概念验证这三者的概念虽然没有密切的联系,但也有不少人会分不清这三者的区别,在这篇文章中,我们会帮大家区分一下这三个概念。 首先是MVP,MVP是Minimum Viable Product的缩写,即最小可行性产品。MVP通过…

计算机网络---DHCP和自动配置

什么是DHCP HCP(动态主机配置协议)是一个局域网的网络协议,客户机 / 服务器协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。默认情况下,DHCP作为Windows Se…

在SPDK中体验一下E810网卡ADQ直通车

早在2019年,Intel发布第二代Xeon Scalable系列处理器的同时,也推出了E800系列网卡。该网卡的亮点除了支持100Gb,便是新增了ADQ功能。1. 了解ADQADQ 全称Application Device Queues,是一种队列和控制技术,可提高应用程序…

44. 含并行连结的网络(GoogLeNet)

GoogLeNet吸收了NiN中串联网络的思想,并在此基础上做了改进。 这篇论文的一个重点是解决了什么样大小的卷积核最合适的问题。 毕竟,以前流行的网络使用小到1 * 1,大到11 * 11的卷积核。 本文的一个观点是,有时使用不同大小的卷积…

unreal engine 增强输入的使用分析

由于ue5以前的输入 系统已经提示被弃用了,因此建议使用新版本 首先 分别新建输入操作 新建映射情景 image.png打开新建的输入操作 根据下图可以得出结论,此东西用于描述 是何种类型映射,以及是否消耗事件 不传递 image.pngimage.png打开情景上…

用Python绘制一朵玫瑰花,送给特别的她

前言 哈喽哈喽,跨年倒计时三天九小时 上次发了烟花的文章,看来还是蛮多人需要代码的 今天就来搞一朵唯一的花吧~(送给你喜欢的那个她) 效果 话不多说 咱先直接看看效果,毕竟搞的不好看我也拿不出手 提前先说 我尽…

CANopen3.0-数据格式

一、CAN消息 一帧CAN消息的通信协议如下: 其中, id: CAN消息的标识符,通常是11bits rtr: 0–消息帧,普通消息;1–远程帧,远程传输请求消息,这种类型的消息不能包含数据帧; dn: 数据帧,一帧普通CAN消息包括0~8bytes数据 在CANOpen中需要自己实现CAN发送消息接口,类似…

小型水库水雨情监测预警自动测报平台 辅助水利在线监测水库水位+雨量

平升电子小型水库水雨情监测预警自动测报平台辅助水利管理部门实现水库雨水情信息“全要素、全量程、全覆盖”自动测报。系统具备水库水位、雨量、现场图像/视频等水文信息采集、传输、处理及预警广播等功能,有效提升了雨水情信息的时效性和准确度,为保障…

网络常见配置及Nmcli配置使用

1.查看网络配置 /etc/services 可以查看协议的tcp/udp端口 IP common ip addr show #查看设备或IP信息也可以通过ifconfig查询。 ip -s link show eno16777734 #可以发送或接收包的状态ip route #查看路由信息ping 测试通讯连接,用ctrlc结束 Meth : ping [opting]…

中间件:SpringBoot-JAVA整合MQTT通信

1、环境Win10; 2、JDK 1.8; 3、SpringBoot 2.7.5; 4、MQTTV3 1.2.5 5、EMQX服务器本地安装使用参考:MQTT学习记录(一、Windows)_我也不清楚的博客-CSDN博客_mqtt默认密码 6、MQTTX 官方客户端可视化工具安装参考&#…

Ae:段落面板

◆ ◆ ◆段落面板Ae菜单:窗口/段落Window/Paragraph快捷键:Ctrl 7对于点文本,默认一行为一个段落。每按一次回车键,就多出一个段落。对于段落文本,一段可能有多行,具体取决于定界框的尺寸。末尾有回车符…

路由基础:

1、路由中包含以下信息: 目的网络 掩码 出接口 下一跳 对路由条目的管理实际上就是路由器管理、维护路由信息的具体实现,路由表中只会保存“最优”路由。 2、路由获取方式: 直连 静态 动态 * 直连&a…

RHCSA 第四天笔记

文本内容在命令行的操作 文本过滤:grep 文本三剑客: gerp sed awk grep 选项 关键的字符串 文件 grep root /etc/passwd 查找root(交集查找) ^ 以……为开头 $ 以……为结尾 Grep ^root /etc/passwd …

MATLAB | MATLAB不会画图?官方团队来教你

让我看看是哪个小傻瓜还没用过MATLAB官方gallery,常见的图直接MATHWORKS搜索一下就能找到,一些有意思的组合图,以及一些特殊属性的设置MATHWORKS官方是有专门去整理的,虽然一些很特殊的图还是没有(哈哈哈弦图小提琴图啥的官方没有…

第004课 - 项目微服务架构图

文章目录 项目架构图项目架构图 外网部署就是面向公众访问的,部署前端项目。 可以有手机app,也可以有web网站。 内网部署后端系统。 客户端发送请求,请求是先来到我们的nginx集群。 nginx将请求转交给我们的后台服务。 nginx是先将请求转交给api网关。 api网关我们使用…