随机梯度下降SGD算法实现_什么是梯度下降法

随机梯度下降SGD算法实现_什么是梯度下降法随机梯度下降算法(Stochasticgradientdescent,SGD)在神经网络模型训练中,是一种很常见的优化算法。这种算法是基于梯度下降算法产生的,所以要理解随机梯度下降算法,必须要对梯度下降算法有一个全面的理解。梯度下降:这个算法我在之前的博文LogisticRegression的数学推导过程以及Python实现中有详细的说明介绍,这里我们再来简单回顾一下梯度下降算法:假设…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

随机梯度下降算法(Stochastic gradient descent,SGD)在神经网络模型训练中,是一种很常见的优化算法。这种算法是基于梯度下降算法产生的,所以要理解随机梯度下降算法,必须要对梯度下降算法有一个全面的理解。

梯度下降:

这个算法我在之前的博文Logistic Regression的数学推导过程以及Python实现 中有详细的说明介绍,这里我们再来简单回顾一下梯度下降算法:假设在逻辑斯蒂回归中,预测函数为 h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n {h_\theta }(x) = {\theta _0} + {\theta _1}{x_1} + {\theta _2}{x_2} + … + {\theta _n}{x_n} hθ(x)=θ0+θ1x1+θ2x2+...+θnxn,我们用平方损失函数可以得到这个函数的损失函数: J ( θ ) = 1 2 ∑ i = 1 m ( h θ ( x ) − y ) 2 J(\theta ) = \frac{1}{2}\sum\limits_{i = 1}^m {
{
{({h_\theta }(x) – y)}^2}}
J(θ)=21i=1m(hθ(x)y)2

我们的目标就是最小化函数的损失函数,我们就对每一个 θ i {\theta _i} θi 超参数求偏导,就可以得到当前这一轮的梯度,然后损失函数向梯度的反方向进行更新,不断这样进行迭代更新,就可以得到超参数的全局最优解。运用链式求导方法,数学过程可以表示成:
∂ ∂ θ j J ( θ ) = ∂ ∂ θ j 1 2 ( h θ ( x ) − y ) 2 = ( h θ ( x ) − y ) ⋅ ∂ ∂ θ j ( h θ ( x ) − y ) = ( h θ ( x ) − y ) ⋅ ∂ ∂ θ j ( ∑ i = 0 n θ i x i − y ) = ( h θ ( x ) − y ) x j \frac{\partial }{
{\partial {\theta _j}}}J(\theta ) = \frac{\partial }{
{\partial {\theta _j}}}\frac{1}{2}{({h_\theta }(x) – y)^2} = ({h_\theta }(x) – y) \cdot \frac{\partial }{
{\partial {\theta _j}}}({h_\theta }(x) – y) \\= ({h_\theta }(x) – y) \cdot \frac{\partial }{
{\partial {\theta _j}}}(\sum\limits_{i = 0}^n {
{\theta _i}{x_i}} – y) = ({h_\theta }(x) – y){x_j}
θjJ(θ)=θj21(hθ(x)y)2=(hθ(x)y)θj(hθ(x)y)=(hθ(x)y)θj(i=0nθixiy)=(hθ(x)y)xj

这是每一轮迭代的梯度,我们加上 l e a r n i n g learning learning r a t e rate rate α \alpha α,就可以得到完整的梯度下降的公式:
θ j : = θ j − α ( h θ ( x ) − y ) x j {\theta _j}: = {\theta _j} – \alpha ({h_\theta }(x) – y){x_j} θj:=θjα(hθ(x)y)xj
这个过程就像是在一个山脉中寻找一个最低的山谷,我们用学习率为 α \alpha α 的步长一步步地向山谷的大致方向移动,我们每一步只能向山谷的方向靠近,每一步都在进步,整个过程可以参考下面的动图(图片来自知乎-量子位):
GD
在图中可见,小球从山顶从不同的方向梯度滚下山,这就是梯度下降的过程。但是梯度下降算法每一步的更新都需要计算所有超参数的梯度,迭代速度必然会很慢,我们有没有比较快速的梯度下降算法呢,这里就可以用到我们的随机梯度下降算法
这个算法的流程就是在每次更新的时候使用一个样本进行梯度下降,所谓的随机二字,就是说我们可以随机用一个样本来表示所有的样本,来调整超参数 θ \theta θ ,算法的公式如下所示:
L o o p Loop Loop {

f o r for for i i i i n in in r a n g e ( m ) : range(m): range(m): {

θ j : = θ j  +  α ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) {\theta _j}: = {\theta _j}{\text{ + }}\alpha ({y^{(i)}} – {h_\theta }({x^{(i)}}))x_j^{(i)} θj:=θj + α(y(i)hθ(x(i)))xj(i)
}
}
因为这个样本是随机的,所以每次迭代没有办法得到一个准确的梯度,这样一来虽然每一次迭代得到的损失函数不一定是朝着全局最优方向,但是大体的方向还是朝着全局最优解的方向靠近,直到最后,得到的结果通常就会在全局最优解的附近。这种算法相比普通的梯度下降算法,收敛的速度更快,所以在一般神经网络模型训练中,随机梯度下降算法 SGD 是一种非常常见的优化算法。
这就是大家在训练神经网络模型中常见的随机梯度下降SGD算法,希望可以帮助大家在理解优化算法上有所帮助,谢谢。

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql删除表数据及其关联数据_MYSQL中delete删除多表数据与删除关联数据

    mysql删除表数据及其关联数据_MYSQL中delete删除多表数据与删除关联数据在mysql中删除数据方法有很多种,最常用的是使用delete来删除记录,下面我来介绍delete删除单条记录与删除多表关联数据的一些简单实例。1、deletefromt1where条件2、deletet1fromt1where条件3、deletet1fromt1,t2where条件4、deletet1,t2fromt1,t2where条件前3者是可行的,第…

    2022年7月17日
    20
  • Photoshop快捷键大全_alt快捷键大全常用

    Photoshop快捷键大全_alt快捷键大全常用察看图像类别  说明:: —Shift键  :—空格键       *—在Imageready中不适用  §—只在Imageready中可用动作结果双击工具箱::或Ctrl+0 使图像最大限度在当前窗口中完整显示双击工具箱::或Alt+Ctr

    2022年9月29日
    3
  • word去掉万恶的域代码

    word去掉万恶的域代码背景:写论文使用mathtype插入公式后,有时候会显示域代码更新软件环境:macos10.14.6,word16.45解决过程:刚开始在域代码那里接受修订,然后重新打开word还是现实域代码,去网上找了教程(mac下)先选中,然后command+shift+F9解决了问题。如果是windows应该是ctrl+shift+F9(我没试过哈,猜的)…

    2022年6月6日
    47
  • 软件测试工程师面试自我介绍部分模板

    软件测试工程师面试自我介绍部分模板自我介绍大致格式是 面试官你好 我叫 XX 学校排名比较好的可以提一下毕业院校 计算机专业毕业后 做软件测试工作有 X 年了 首先感谢您能给我这次面试机会 就职过的公司 负责过哪些项目 挑重点的 大型的 你比较熟悉的项目说 的哪些测试工作 后面就是你的简历里面写的关于个人技能的那些东西 感觉内容不够的话就说下你常用的测试工具和缺陷管理工具 最后再礼貌的加上我的自我介绍已完毕 您看我还有什么需要补充的吗 附我个人的自我介绍 话说前头 我菜的一批 我的自我介绍仅供参考 面试官你好 我是 XX 计算机专业

    2025年8月3日
    2
  • 黑盒测试c语言用例,黑盒测试用例设计技术包括_测试用例包括什么_常用黑盒测试用例设计(4)…[通俗易懂]

    黑盒测试c语言用例,黑盒测试用例设计技术包括_测试用例包括什么_常用黑盒测试用例设计(4)…[通俗易懂]因此,可以把全部输入数据合理地划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,这样就可以用少量的代表性测试数据,来取得较好的测试结果。黑盒测试用例设计技术包括*是指对于程序的规格说明来说,是合理的有意义的输入数据构成的集合。利用它可以检验程序是否实现预先规定的功能和性能。在具体问题中,有效等价类可以是一个,也可以是多个。有效等价类*是指对于程序的规格说明…

    2022年4月29日
    44
  • 舆情监控系统python开源_舆情监测系统开源

    舆情监控系统python开源_舆情监测系统开源互联网已成为思想文化信息的集散地和社会舆论的放大器。截至2009年6月30日,我国网民数量达到3.38亿人,网民规模已稳居世界第一位,互联网的影响力也日益提升,网络舆论已成为不可小觑的强大社会力量。近年来,网络热点事件频发,其大背景主要有两方面:一是我国社会处于转型期,涌现出一些新矛盾和新问题,如贫富悬殊、官员腐败、传统价值观受冲击等;二是随着互联网技术的迅速发展,越来越多的人上网获取新闻信息,发…

    2025年11月25日
    2

发表回复

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

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