随机梯度下降算法SGD(Stochastic gradient descent)

这篇具有很好参考价值的文章主要介绍了随机梯度下降算法SGD(Stochastic gradient descent)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  1. SGD是什么
    SGD是Stochastic Gradient Descent(随机梯度下降)的缩写,是深度学习中常用的优化算法之一。SGD是一种基于梯度的优化算法,用于更新深度神经网络的参数。它的基本思想是,在每一次迭代中,随机选择一个小批量的样本来计算损失函数的梯度,并用梯度来更新参数。这种随机性使得算法更具鲁棒性,能够避免陷入局部极小值,并且训练速度也会更快。

怎么理解梯度?
假设你在爬一座山,山顶是你的目标。你知道自己的位置和海拔高度,但是不知道山顶的具体位置和高度。你可以通过观察周围的地形来判断自己应该往哪个方向前进,并且你可以根据海拔高度的变化来判断自己是否接近山顶。

在这个例子中,你就可以把自己看作是一个模型,而目标就是最小化海拔高度(损失函数)。你可以根据周围的地形(梯度)来判断自己应该往哪个方向前进,这就相当于使用梯度下降法来更新模型的参数(你的位置和海拔高度)。

每次你前进一步,就相当于模型更新一次参数,然后重新计算海拔高度。如果你发现海拔高度变小了,就说明你走对了方向,可以继续往这个方向前进;如果海拔高度变大了,就说明你走错了方向,需要回到上一个位置重新计算梯度并选择一个新的方向前进。通过不断重复这个过程,最终你会到达山顶,也就是找到了最小化损失函数的参数。

  1. 为什么引入SGD
    深度神经网络通常有大量的参数需要学习,因此优化算法的效率和精度非常重要。传统的梯度下降算法需要计算全部样本的梯度,非常耗时,并且容易受到噪声的影响。随机梯度下降算法则可以使用一小部分样本来计算梯度,从而大大提高了训练速度和鲁棒性。此外,SGD还可以避免陷入局部极小值,使得训练结果更加准确。

  2. 怎么用SGD

import torch
from torch import nn
from torch import optim

data = torch.tensor([[0,0],[0,1],[1,0],[1,1.]], requires_grad=True)
target = torch.tensor([[0],[0],[1],[1.]], requires_grad=True)

model = nn.Linear(2, 1)

def train():
    opt = optim.SGD(params=model.parameters(), lr=0.1)
    for iter in range(20):
        # 1) 消除之前的梯度(如果存在)
        opt.zero_grad()

        # 2) 预测
        pred = model(data)

        # 3) 计算损失
        loss = ((pred - target)**2).sum()

        # 4) 指出那些导致损失的参数(损失回传)
        loss.backward()
		for name, param in model.named_parameters():
            print(name, param.data, param.grad)
        # 5) 更新参数
        opt.step()

        # 6) 打印进程
        print(loss.data)

if __name__ == "__main__":
    train()
————————————————
版权声明:本文为CSDN博主「Yohuna」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Yohuna/article/details/123789715
param.data是参数的当前值,而param.grad是参数的梯度值。在进行反向传播计算时,每个参数都会被记录其梯度信息,以便在更新参数时使用。通过访问param.data和param.grad,可以查看参数当前的值和梯度信息。值得注意的是,param.grad在每次调用backward()后都会自动清空,因此如果需要保存梯度信息,应该在计算完梯度之后及时将其提取并保存到其他地方。

计算结果:文章来源地址https://www.toymoban.com/news/detail-504329.html

weight tensor([[0.4456, 0.3017]]) tensor([[-2.4574, -0.7452]])
bias tensor([-0.2108]) tensor([-2.6971])
tensor(0.8531)
weight tensor([[0.6913, 0.3762]]) tensor([[-0.2466,  1.1232]])
bias tensor([0.0589]) tensor([0.7416])
tensor(0.2712)
weight tensor([[0.7160, 0.2639]]) tensor([[-0.6692,  0.4266]])
bias tensor([-0.0152]) tensor([-0.2023])
tensor(0.1529)
weight tensor([[0.7829, 0.2212]]) tensor([[-0.4059,  0.4707]])
bias tensor([0.0050]) tensor([0.0566])
tensor(0.0963)
weight tensor([[0.8235, 0.1741]]) tensor([[-0.3603,  0.3410]])
bias tensor([-0.0006]) tensor([-0.0146])
tensor(0.0615)
weight tensor([[0.8595, 0.1400]]) tensor([[-0.2786,  0.2825]])
bias tensor([0.0008]) tensor([0.0048])
tensor(0.0394)
weight tensor([[0.8874, 0.1118]]) tensor([[-0.2256,  0.2233]])
bias tensor([0.0003]) tensor([-0.0006])
tensor(0.0252)
weight tensor([[0.9099, 0.0895]]) tensor([[-0.1797,  0.1793]])
bias tensor([0.0004]) tensor([0.0008])
tensor(0.0161)
weight tensor([[0.9279, 0.0715]]) tensor([[-0.1440,  0.1432]])
bias tensor([0.0003]) tensor([0.0003])
tensor(0.0103)
weight tensor([[0.9423, 0.0572]]) tensor([[-0.1152,  0.1146]])
bias tensor([0.0003]) tensor([0.0004])
tensor(0.0066)
weight tensor([[0.9538, 0.0458]]) tensor([[-0.0922,  0.0917]])
bias tensor([0.0003]) tensor([0.0003])
tensor(0.0042)
weight tensor([[0.9630, 0.0366]]) tensor([[-0.0738,  0.0733]])
bias tensor([0.0002]) tensor([0.0003])
tensor(0.0027)
weight tensor([[0.9704, 0.0293]]) tensor([[-0.0590,  0.0586]])
bias tensor([0.0002]) tensor([0.0002])
tensor(0.0017)
weight tensor([[0.9763, 0.0234]]) tensor([[-0.0472,  0.0469]])
bias tensor([0.0002]) tensor([0.0002])
tensor(0.0011)
weight tensor([[0.9811, 0.0187]]) tensor([[-0.0378,  0.0375]])
bias tensor([0.0001]) tensor([0.0002])
tensor(0.0007)
weight tensor([[0.9848, 0.0150]]) tensor([[-0.0303,  0.0300]])
bias tensor([0.0001]) tensor([0.0002])
tensor(0.0005)
weight tensor([[0.9879, 0.0120]]) tensor([[-0.0242,  0.0240]])
bias tensor([0.0001]) tensor([0.0001])
tensor(0.0003)
weight tensor([[0.9903, 0.0096]]) tensor([[-0.0194,  0.0192]])
bias tensor([9.7973e-05]) tensor([0.0001])
tensor(0.0002)
weight tensor([[0.9922, 0.0076]]) tensor([[-0.0155,  0.0153]])
bias tensor([8.5674e-05]) tensor([0.0001])
tensor(0.0001)
weight tensor([[0.9938, 0.0061]]) tensor([[-0.0124,  0.0123]])
bias tensor([7.4933e-05]) tensor([9.4233e-05])
tensor(7.6120e-05)

到了这里,关于随机梯度下降算法SGD(Stochastic gradient descent)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Matlab算法】梯度下降法(Gradient Descent)(附MATLAB完整代码)

    梯度下降法 是一种用于最小化函数的迭代优化算法。其基本思想是通过计算函数的梯度 (导数),找到函数的最小值点。在梯度下降法中,参数(或变量)沿着负梯度的方向进行更新,以降低函数值。 以下是梯度下降法的基本描述: 选择初始点: 选择一个初始点作为优化的起

    2024年01月19日
    浏览(44)
  • 机器学习与深度学习——使用paddle实现随机梯度下降算法SGD对波士顿房价数据进行线性回归和预测

    随机梯度下降(SGD)也称为增量梯度下降,是一种迭代方法,用于优化可微分目标函数。该方法通过在小批量数据上计算损失函数的梯度而迭代地更新权重与偏置项。SGD在高度非凸的损失表面上远远超越了朴素梯度下降法,这种简单的爬山法技术已经主导了现代的非凸优化。

    2024年02月03日
    浏览(57)
  • 机器学习&&深度学习——随机梯度下降算法(及其优化)

    在我们没有办法得到解析解的时候,我们可以用过梯度下降来进行优化,这种方法几乎可以所有深度学习模型。 关于优化的东西,我自己曾经研究过智能排班算法和优化,所以关于如何找局部最小值,以及如何跳出局部最小值的一些基本思想是有感触的,随机梯度算法和其优

    2024年02月15日
    浏览(45)
  • 【Sklearn】基于随机梯度下降算法的数据分类预测(Excel可直接替换数据)

    随机梯度下降(Stochastic Gradient Descent,SGD)是一种优化算法,用于训练模型的参数以最小化损失函数。在分类任务中,SGD也可以用于训练分类模型。下面是SGD分类预测的模型原理和数学公式的概述。 模型原理 SGD分类器是基于线性模型的分类器,它使用随机梯度下降优化算法

    2024年02月12日
    浏览(37)
  • PGD(projected gradient descent)算法源码解析

    论文链接:https://arxiv.org/abs/1706.06083 源码出处:https://github.com/Harry24k/adversarial-attacks-pytorch/tree/master PGD算法(projected gradient descent)是在BIM算法的基础上的小改进,二者非常相近,BIM算法的源码解析在上一篇博客中,建议先看上一篇博客理解BIM算法的原理。 具体来说,在BIM算

    2024年01月24日
    浏览(49)
  • 龙曲良 Tensorflow —— 随机梯度下降(自用)-4

    一、梯度下降 二、激活函数及其梯度 2.1 最简单的阶梯激活函数 2.2 sigmoid / logistic(tf.sigmoid) 2.3 tanh(tf.tanh) 2.4 ReLU(tf.nn.relu) 三、损失函数及其梯度 四、单、多输出感知机梯度 4.1 单层感知机 4.2 多层感知机 4.3  链式法则 4.4 多层感知机梯度  4.5 Himmelblau函数优化 4.6 Fa

    2024年02月16日
    浏览(30)
  • 机器学习--决策树、线性模型、随机梯度下降

    🤵‍♂️ 个人主页:@Lingxw_w的个人主页 ✍🏻作者简介:计算机科学与技术研究生在读 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+    目录  一、决策树 二、线性模型 三、随机梯度下降 决策树(decision

    2024年02月03日
    浏览(44)
  • 优化算法之梯度下降|Matlab实现梯度下降算法

    题目要求: 使用Matab实现梯度下降法 对于函数: min ⁡ f ( x ) = 2 x 1 2 + 4 x 2 2 − 6 x 1 − 2 x 1 x 2 min f(x)=2 x_{1}^{2}+4 x_{2}^{2}-6 x_{1}-2 x_{1} x_{2} min f ( x ) = 2 x 1 2 ​ + 4 x 2 2 ​ − 6 x 1 ​ − 2 x 1 ​ x 2 ​ 试采用 MATLAB实现最速下降法求解该问题, 给出具体的迭代过程、 最终优化结果、

    2024年02月16日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包