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

梯度下降算法原理及其计算过程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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 世界地图行政区划图_世界行政区划图册

    世界地图行政区划图_世界行政区划图册序号 国家 省 城市 4007 法国 上法兰西大区   4008 法国 上法兰西大区 万格勒 4009 法国 上法兰西大区 乌普利讷 4010 法国 上法兰西大区 于吕什 4011 法国 上法兰西大区 代兰库尔 4012 法国 上法兰西大区 代夫勒 4013 法国 上法兰西大区 伊夫里莱唐普尔 4014 法国 上法兰西大区

    2022年9月1日
    4
  • Spring Boot:jar中没有主清单属性[通俗易懂]

    Spring Boot:jar中没有主清单属性[通俗易懂]使用SpringBoot微服务搭建框架,在eclipse和Idea下能正常运行,但是在打成jar包部署或者直接使用java-jar命令的时候,提示了xxxxxx.jar中没有主清单属性:D:\hu-git\spring-xxx-xxx\target>java-jarspring-cloud-eureka-0.0.1-SNAPSHOT.jarspring-xxx-xxx-0.

    2025年9月15日
    8
  • SSM 项目 ——— 小米商城后台管理系统

    SSM 项目 ——— 小米商城后台管理系统目录一、项目名称二、使用技术三、开发步骤四、具体实现1、创建数据库表2、项目结构3、配置文件一、项目名称名称:小米商城后台管理系统本项目主要目的是使学员更深层的了解IT企业的文化和岗位需求、模拟企业的工作场景,分享研制成果,增加学员对今后工作岗位及计算机应用开发对客观世界影响的感性认识,使学员对技术有更深入的理解,在今后工作中能有更明确的目标和方向。并能为日后职业规划提供很好的指导作用。二、使用技术服务端:Spring+SpringMVC+MyBatis框架整合数据库:MySql8.0

    2022年6月27日
    62
  • java毕业设计_校园二手交易平台

    java毕业设计_校园二手交易平台校园二手交易平台mysql数据库创建语句校园二手交易平台oracle数据库创建语句校园二手交易平台sqlserver数据库创建语句校园二手交易平台spring+springMVC+hibernate框架对象(javaBean,pojo)设计校园二手交易平台spring+springMVC+mybatis框架对象(javaBean,pojo)设计校园二手交易平台登录注册界面校园二手交易平…

    2022年6月16日
    21
  • 【原创】纯干货,Spring-data-jpa详解,全方位介绍。

    【原创】纯干货,Spring-data-jpa详解,全方位介绍。本篇进行Spring-data-jpa的介绍,几乎涵盖该框架的所有方面,在日常的开发当中,基本上能满足所有需求。这里不讲解JPA和Spring-data-jpa单独使用,所有的内容都是在和Spring整合的环境中实现。如果需要了解该框架的入门,百度一下,很多入门的介绍。在这篇文章的接下来一篇,会有一个系列来讲解mybatis,这个系列从mybatis的入门开始,到基本使用,和spring整合,和第…

    2022年6月10日
    28
  • Aria2安装(aria2安卓版手机配置教程)

    1安装sudopacman-Saria22创建配置文件cd~mkdir.aria2cd.aria2toucharia2.confaria2.logaria2.session3修改配置文件aria2.conf需要自己配置rpc-secret和bt-trackerbt-tracker可以去trackerslist网站获取#文件的保存路径(可使用绝对路径或相对路径),默认:当前启动位置dir=${HOME}/Downloads#启用磁盘缓存,0为

    2022年4月14日
    1.1K

发表回复

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

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