随机梯度下降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)
上一篇 2025年10月18日 下午7:22
下一篇 2025年10月18日 下午8:01


相关推荐

  • 构建多智能体(Multi-Agent)架构的八大原则

    构建多智能体(Multi-Agent)架构的八大原则

    2026年3月15日
    3
  • 上海淘财经网要道歉客户的信

    上海淘财经网要道歉客户的信

    2022年1月4日
    41
  • 位运算符之—按位取反运算符(简单易懂)

    位运算符之—按位取反运算符(简单易懂)前言 位运算符是用来对二进制位进行操作的 c 语言中有 6 种位运算符 amp 按位与 链接 https blog csdn net weixin article details 按位或 链接 https blog csdn net weixin article details 按位异或 链接

    2026年3月17日
    2
  • android 模拟器 电脑配置,手游安卓模拟器多开对电脑配置要求与占用浅谈

    android 模拟器 电脑配置,手游安卓模拟器多开对电脑配置要求与占用浅谈手机安卓模拟器多开对电脑配置要求与占用浅谈为大家分享一下模拟器多开对电脑配置硬件要求 现在就以我自己用的模拟器为模板来做参考一 我测试用的配置性能情况 跑分只作参考 我每次跑的分数有时高有时低都不一样 二 开模拟器对配置的要求与占用 1 对硬盘容量我从只有一个增加到四十个原始镜相一共占用 19G 平均一个原始镜相 500M 来算吧 再加上你需要安装游戏的大小 这个很好算我就不多说了 如图 2 对内存的占

    2026年3月26日
    2
  • 字符串常量池详解「建议收藏」

    字符串常量池详解「建议收藏」字符串常量池详解文章所涉及的资料来自互联网整理和个人总结,仅作为个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!概述在JVM中,为了减少字符串对象的重复创建,维护了一块特殊的内存空间,这块内存空间就被称为字符串常量池。在JDK1.6及之前,字符串常量池存放在方法区中。到JDK1.7之后,就从方法区中移除了,而存放在堆中。一下是《深入理解虚Java虚拟机》第二版原文:对于HotSpot虚拟机,根据官方发布的路线图信息,现在也有放弃永久代并逐步改为采用NativeMemory来实

    2022年7月28日
    7
  • 万能乘法速算法大全_玩转扑克牌亲子游戏大全收藏 孩子爱上数学 快速提升计算能力…「建议收藏」

    万能乘法速算法大全_玩转扑克牌亲子游戏大全收藏 孩子爱上数学 快速提升计算能力…「建议收藏」难得有时间陪孩子,莫老师教您几种扑克牌的玩法,给宅家生活提供一点小乐趣,轻松玩游戏的同时,增加乐趣,提升小孩的数感和反应能力,同时可以提高孩子的计算能力!电脑比较卡,花了一天的时间整理的游戏大全,好的东西记得收藏分享。认识扑克牌1、大、小王可以抽掉,或者指定当作数字几,也可以当作万能牌(抽到的人可以任意指定1-13中的任何一个数字)使用。把A、J、Q、K分别看作1点,11点、12点、13点,其余…

    2022年6月3日
    52

发表回复

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

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