梯度下降算法原理及其计算过程

梯度下降算法原理及其计算过程1 写在前面还记得以前刚开始学习 AI 的时候 遇到了梯度下降算法 一直对很多概念搞不清楚 包括后来很长的一段时间也不是很明白梯度下降的实现原理 看了很多博客文章都是一知半解 总是有很多疑惑不能搞清楚 而且绝大多数的文章都是生涩的数学公式推理 对于像我这样的数学渣渣来说 理解梯度下降的确有难度 所以前段时间又重新回顾了一下梯度下降算法 结合网上不同来源的资料的学习总结 写了这篇博客 希望对同样刚刚接

1、写在前面

还记得以前刚开始学习AI的时候,遇到了梯度下降算法,一直对很多概念搞不清楚,包括后来很长的一段时间也不是很明白梯度下降的实现原理,看了很多博客文章都是一知半解,总是有很多疑惑不能搞清楚,而且绝大多数的文章都是生涩的数学公式推理,对于像我这样的数学渣渣来说,理解梯度下降的确有难度,所以前段时间又重新回顾了一下梯度下降算法,结合网上不同来源的资料的学习总结,写了这篇博客,希望对同样刚刚接触梯度下降算法的朋友有所帮助,当然这里只是为了更好的理解梯度下降算法,所以基本上没有书面用语,也希望看到这篇文章的朋友能够指出我理解错误的地方。

2、什么是梯度

3、梯度下降算法的作用

4、梯度下降的计算过程

第一步:随机初始化 θ θ θ

θ 0 = ( 0 , 0 , 0 ) \boldsymbol\theta^0=(0,0,0) θ0=(0,0,0),则损失函数值: J ( 0 , 0 , 0 ) = 1 2 ( 0 + 0 + 0 − 10 ) 2 = 50 J(0,0,0)=\dfrac 12(0+0+0-10)^2=50 J(0,0,0)=21(0+0+010)2=50
梯度: Δ 0 = < 0 + 0 + 0 − 10 , ( 0 + 0 + 0 − 10 ) ∗ 2 , ( 0 + 0 + 0 − 10 ) ∗ 2 > = < − 10 , − 20 , − 20 > \Delta^0=<0+0+0-10,(0+0+0-10)*2,(0+0+0-10)*2>=<-10,-20,-20> Δ0=<0+0+010,(0+0+010)2,(0+0+010)2>=<10,20,20>

第二步:进行梯度下降

设置步长 α = 0.2 \alpha=0.2 α=0.2,当然了实际当中不可能取这么大的值。
θ 0 = ( 0 , 0 , 0 ) , Δ 0 = < − 10 , − 20 , − 20 > \theta^0=(0,0,0),\Delta^0=<-10,-20,-20> θ0=(0,0,0),Δ0=<10,20,20>
J ( θ 0 ) = 1 2 ( 0 + 0 + 0 − 10 ) 2 = 50 J(\theta^0)=\dfrac 12(0+0+0-10)^2=50 J(θ0=21(0+0+010)2=50
θ 1 = θ 0 − α ∗ Δ 0 = ( 0 , 0 , 0 ) − 0.2 ∗ ( − 10 , − 20 , − 20 ) = ( 2 , 4 , 4 ) , Δ 1 = < 8 , 16 , 16 > \theta^1=\theta^0-\alpha*\Delta^0=(0,0,0)-0.2*(-10,-20,-20)=(2,4,4),\Delta^1=<8,16,16> θ1=θ0αΔ0=(0,0,0)0.2(10,20,20)=(2,4,4),Δ1=<8,16,16>
J ( θ 1 ) = 1 2 ( 2 + 8 + 8 − 10 ) 2 = 32 J(\theta^1)=\dfrac 12(2+8+8-10)^2=32 J(θ1)=21(2+8+810)2=32
θ 2 = θ 1 − α ∗ Δ 1 = ( 1 , 2 , 2 ) − 0.2 ∗ ( 8 , 16 , 16 ) = ( − 0.6 , − 1.2 , − 1.2 ) , Δ 2 = < 8.8 , 17.6 , 17.6 > \theta^2=\theta^1-\alpha*\Delta^1=(1,2,2)-0.2*(8,16,16)=(-0.6,-1.2,-1.2),\Delta^2=<8.8,17.6,17.6> θ2=θ1αΔ1=(1,2,2)0.2(8,16,16)=(0.6,1.2,1.2),Δ2=<8.8,17.6,17.6>
J ( θ 2 ) = 1 2 ( − 0.6 − 2.4 − 2.4 − 10 ) 2 = 38.72 J(\theta^2)=\dfrac 12(-0.6-2.4-2.4-10)^2=38.72 J(θ2)=21(0.62.42.410)2=38.72
到了这一步,我们发现损失值变大了,说明我们的已经过了极小值点,所以我们把 α \alpha α值设置小一点。令 α \alpha α=0.01。






第三步:再次进行梯度下降

θ 0 = ( 0 , 0 , 0 ) , Δ 0 = < − 10 , − 20 , − 20 > \theta^0=(0,0,0),\Delta^0=<-10,-20,-20> θ0=(0,0,0),Δ0=<10,20,20>
J ( θ 0 ) = 1 2 ( 0 + 0 + 0 − 10 ) 2 = 50 J(\theta^0)=\dfrac 12(0+0+0-10)^2=50 J(θ0=21(0+0+010)2=50
θ 1 = θ 0 − α ∗ Δ 0 = ( 0 , 0 , 0 ) − 0.05 ∗ ( − 10 , − 20 , − 20 ) = ( 0.5 , 1 , 1 ) , Δ 1 = < − 5.5 , − 11 , − 11 > \theta^1=\theta^0-\alpha*\Delta^0=(0,0,0)-0.05*(-10,-20,-20)=(0.5,1,1),\Delta^1=<-5.5,-11,-11 > θ1=θ0αΔ0=(0,0,0)0.05(10,20,20)=(0.5,1,1),Δ1=<5.5,11,11>
J ( θ 1 ) = 1 2 ( 0.5 + 2 + 2 − 10 ) 2 = 15.13 J(\theta^1)=\dfrac 12(0.5+2+2-10)^2=15.13 J(θ1)=21(0.5+2+210)2=15.13
θ 2 = θ 1 − α ∗ Δ 1 = ( 0.5 , 1 , 1 ) − 0.05 ∗ ( − 5.5 , − 11 , − 11 ) = ( 0.075 , 1.55 , 1.55 ) , Δ 2 = < − 3.725 , − 7.45 , − 7.45 > \theta^2=\theta^1-\alpha*\Delta^1=(0.5,1,1)-0.05*(-5.5,-11,-11)=(0.075,1.55,1.55),\Delta^2=<-3.725,-7.45,-7.45> θ2=θ1αΔ1=(0.5,1,1)0.05(5.5,11,11)=(0.075,1.55,1.55),Δ2=<3.725,7.45,7.45>
J ( θ 2 ) = 1 2 ( 0.075 + 2 + 2 − 10 ) 2 = 6.94 J(\theta^2)=\dfrac 12(0.075+2+2-10)^2=6.94 J(θ2)=21(0.075+2+210)2=6.94
如此反复迭代下去,那什么时候停止呢?我们可以设置一个超参数 ξ = 0.5 \xi=0.5 ξ=0.5(当然实际中 ξ \xi ξ值很小,例如 1e-5),也就是说当前步骤的梯度值与前一步骤的梯度值的距离小于 ξ \xi ξ的时候,停止计算。例如上面的 Δ 0 = < − 10 , − 20 , − 20 > \Delta^0=<-10,-20,-20> Δ0=<10,20,20> Δ 1 = < − 5.5 , − 11 , − 11 > \Delta^1=<-5.5,-11,-11 > Δ1=<5.5,11,11> ∣ Δ 0 − Δ 1 ∣ = < 4.5 , 9 , 9 > |\Delta^0-\Delta^1|=<4.5,9,9> Δ0Δ1=<4.5,9,9>,所以要继续进行迭代,知道梯度值都小于 ξ \xi ξ时停止迭代。





总结(更新)

通过上述的计算过程,我们可以发现,越到后面,下降的就越慢,由于上述计算过程只是我举的例子,所以可能只需要迭代几次就可以到达停止条件,但是在实际当中,梯度下降需要迭代很多次,才能够到达损失函数的极小值点,当然这是基于一条数据进行梯度下降的,这种方式就叫随机梯度下降(SGD),如果我们用所有数据,就叫批量梯度下降(BGD),如果我们取小部分数据,就叫小批量梯度下降(MBGD)。一般来说在机器学习当中优先考虑SGD,在某些情况下(全局存在多个相对最优解),SGD有可能跳出某些小的最优解,虽然速度会慢点,当然所说的慢是指在相同数量的样本数据下,跑完所有样本所花费的时间,参数的更新速度肯定是SGD快的,因为每跑一条样本数据都会更新一次。BGD是一定能够得到局部最优解的,而在回归中是一定能够得到全局最优解。由于SGD每次都是一条样本对参数进行更新,从而导致模型对异常样本非常敏感,直接的表现就是参数会异常波动,而如果使用BGD参数更新又非常的慢,所以才有了MBGD,既保证了训练速度,也保证了模型准确率。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/231465.html原文链接:https://javaforall.net

(0)
上一篇 2025年12月11日 上午11:01
下一篇 2025年12月11日 上午11:22


相关推荐

  • flyio「建议收藏」

    flyio「建议收藏」支持多平台、所有js环境的网络请求方式node使用实例:letFly=require(“flyio/src/node”)letfly=newFly;get请求:fly.get(url).then(function(response){console.log(response);}).catch(function(error){console.log(error);});post请求: fly.p

    2025年10月9日
    8
  • SQL临时表和表变量 Declare @Tablename Table

    SQL临时表和表变量 Declare @Tablename Table在SQLServer的性能调优中,有一个不可比面的问题:那就是如何在一段需要长时间的代码或被频繁调用的代码中处理临时数据集?表变量和临时表是两种选择。记得在给一家国内首屈一指的海运公司作SQLServer应用性能评估和调优的时候就看到过大量的临时数据集处理需求,而他们的开发人员就无法确定什么时候用临时表,什么时候用表变量,因此他们就简单的使用了临时表。实际上临时表和表变量都有特定的适用环境。

    2022年8月21日
    10
  • java pfx_如何在Java中读取.pfx文件的内容?

    java pfx_如何在Java中读取.pfx文件的内容?我有file.pfx文件,还有一个私钥.如何在Java中读取file.pfx中的证书?我用过这段代码:importjava.security.*;importjava.security.cert.Certificate;importjava.security.cert.X509Certificate;importjava.security.cert.CertificateException…

    2022年6月7日
    78
  • 关于包围神经猫的想法实现

    关于包围神经猫的想法实现

    2022年1月5日
    48
  • 汇川plc编程实例梯形图_plc梯形图100实例详解

    汇川plc编程实例梯形图_plc梯形图100实例详解原文链接:汇川技术小型PLC梯形图编程系列教程(一):小型PLC型号H123U简介&nbsp;&nbsp;&nbsp;&nbsp;本人目前一直玩的都是汇川技术自己的PLC、伺服、变频器等等。所以本系列小型PLC梯形图编程教程,就以汇川技术的小型PLC作为平台,汇川的3种小型PLC-H1U,H2U,H3U。编程指令基本一致,H3U更高级一点,3U程序存储可以达到64k步,1k=1000步…

    2025年10月22日
    6
  • 脑图XMind 8免费激活方法

    脑图XMind 8免费激活方法学习人工智能之路漫漫 先从最接近人工智能的 python 语言入手 在学习过程中会需要很多的工具 xmind 对于程序员来说是一个非常有帮助的学习总结的工具 但免费版却很多功能都用不了 苦苦寻你 终于找到免费的激活教程 实测可用 这里分享给大家 步骤 1 下载 XMind8 百度网盘下载 https pan baidu com s 10b6e7xkPUor JdwFj775tg

    2026年3月18日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号