首页 后端开发 Python教程 批量、小批量和随机梯度下降

批量、小批量和随机梯度下降

Nov 24, 2024 am 11:26 AM

请我喝杯咖啡☕

*备忘录:

  • 我的文章解释了 PyTorch 中使用 DataLoader() 进行批量、小批量和随机梯度下降。
  • 我的文章解释了 PyTorch 中不使用 DataLoader() 的批量梯度下降。
  • 我的文章解释了 PyTorch 中的优化器。

有批量梯度下降(BGD)、小批量梯度下降(MBGD)和随机梯度下降(SGD),它们是如何从数据集中获取数据使用梯度下降的方法优化器,例如 Adam()、SGD()、RMSprop()、Adadelta()、Adagrad() 等PyTorch。

*备忘录:

  • PyTorch 中的 SGD() 只是基本的梯度下降,没有特殊功能(经典梯度下降(CGD)),而不是随机梯度下降(SGD)。
  • 例如,使用下面这些方式,您可以灵活地使用 Adam() 执行 BGD、MBGD 或 SGD Adam,使用 SGD() 执行 CGD,使用 RMSprop() 执行 RMSprop,使用 Adadelta() 执行 Adadelta,使用 Adagrad() 执行 Adagrad, PyTorch 中的等。
  • 基本上,BGD、MBGD 或 SGD 是通过 DataLoader() 对数据集进行混洗来完成的: *备注:
    • 改组数据集可以缓解过度拟合。 *基本上,只有训练数据被打乱,因此测试数据不会被打乱。
    • 我的帖子解释了过度拟合和欠拟合。

Batch, Mini-Batch & Stochastic Gradient Descent

(1) 批量梯度下降(BGD):

  • 可以对整个数据集进行梯度下降,在一个时期内只采取一步。例如,整个数据集有 100 个样本(1x100),那么梯度下降在一个 epoch 中只发生一次,这意味着模型的参数在一个 epoch 中只更新一次。
  • 使用整个数据集的平均值,因此每个样本不如 MBGD 和 SGD 那么突出(不太强调)。因此,收敛比 MBGD 和 SGD 更稳定(波动更小),并且比 MBGD 和 SGD 的噪声(噪声数据)更强,导致比 MBGD 和 SGD 更少的超调,并且创建比 MBGD 和 SGD 更准确的模型,如果没有陷入局部最小值,但 BGD 比 MBGD 和 SGD 更不容易逃脱局部最小值或鞍点,因为正如我之前所说,收敛比 MBGD 和 SGD 更稳定(波动更小)正如我之前所说,BGD 比 MBGD 和 SGD 更容易导致过拟合,因为每个样本都比 MBGD 和 SGD 不那么突出(不太强调)。 *备注:
    • 收敛表示初始权重通过梯度下降向函数的全局最小值移动。
    • 噪声(噪声数据) 表示离群值、异常或有时重复的数据。
    • 超调意味着跳过函数的全局最小值。
  • 的优点:
    • 收敛比 MBGD 和 SGD 更稳定(波动更小)。
    • 它的噪声(噪声数据)比 MBGD 和 SGD 强。
    • 它比 MBGD 和 SGD 更少导致过冲。
    • 如果没有陷入局部最小值,它会创建比 MBGD 和 SGD 更准确的模型。
  • 的缺点:
    • 它不擅长在线学习等大型数据集,因为它需要大量内存,减慢收敛速度。 *在线学习是模型从数据集流中实时增量学习的方式。
    • 如果你想更新模型,需要重新准备整个数据集。
    • 与 MBGD 和 SGD 相比,它更不容易逃脱局部最小值或鞍点。
    • 比 MBGD 和 SGD 更容易导致过拟合。

(2)小批量梯度下降(MBGD):

  • 可以用分割的数据集(整个数据集的小批量)一小批一小批地进行梯度下降,在一个时期内采取与整个数据集的小批量相同的步数。例如,将具有 100 个样本(1x100)的整个数据集分为 5 个小批次(5x20),然后梯度下降在一个 epoch 内发生 5 次,这意味着模型的参数在一个 epoch 内更新 5 次。
  • 使用从整个数据集中分割出来的每个小批次的平均值,因此每个样本比 BDG 更突出(更强调)。 *将整个数据集分成更小的批次可以使每个样本越来越突出(越来越强调)。因此,收敛比 BGD 更不稳定(波动更大),并且噪声(噪声数据)也比 BGD 弱,比 BGD 更容易导致过冲,并且即使没有陷入局部极小值,也会创建比 BGD 更不准确的模型,但MBGD 比 BGD 更容易逃脱局部最小值或鞍点,因为正如我之前所说,收敛比 BGD 更不稳定(波动更大),MBGD 比 BGD 更不容易导致过拟合,因为每个样本都更稳定正如我之前所说,out(更强调)比 BGD 更重要。

  • 的优点:

    • 在在线学习等大型数据集上,它比 BGD 更好,因为它比 BGD 占用更少的内存,比 BGD 更不会减慢收敛速度。
    • 如果你想更新模型,不需要重新准备整个数据集。
    • 它比 BGD 更容易逃脱局部最小值或鞍点。
    • 比 BGD 更不容易导致过拟合。
  • 的缺点:

    • 收敛性比 BGD 更不稳定(波动更大)。
    • 它的噪声(噪声数据)不如 BGD 强。
    • 它比 BGD 更容易导致过冲。
    • 即使没有陷入局部最小值,它也会创建一个不如 BGD 准确的模型。

(3) 随机梯度下降(SGD):

  • 可以对整个数据集的每个样本进行梯度下降,一个样本一个样本,在一个时期内采取与整个数据集的样本相同的步数。例如,整个数据集有 100 个样本(1x100),那么梯度下降在一个 epoch 内发生 100 次,这意味着模型的参数在一个 epoch 内更新 100 次。
  • 使用整个数据集的每一个样本逐个样本而不是平均值,因此每个样本比 MBGD 更突出(更强调)。因此,收敛比 MBGD 更不稳定(更波动),并且噪声(噪声数据)也比 MBGD 弱,比 MBGD 更容易导致过冲,并且即使没有陷入局部极小值,也会创建比 MBGD 更不准确的模型,但SGD 比 MBGD 更容易逃脱局部极小值或鞍点,因为正如我之前所说,收敛比 MBGD 更不稳定(波动更大),而且 SGD 比 MBGD 更不容易导致过拟合,因为每个样本都更稳定正如我之前所说,out(更强调)比MBGD。

  • 的优点:

    • 在大型数据集(例如在线学习)上它比 MBGD 更好,因为它比 MBGD 需要更小的内存,比 MBGD 更不会减慢收敛速度。
    • 如果你想更新模型,不需要重新准备整个数据集。
    • 它比 MBGD 更容易逃脱局部最小值或鞍点。
    • 比 MBGD 更不容易导致过拟合。
  • 的缺点:

    • 收敛性比 MBGD 更不稳定(波动更大)。
    • 它的噪声(噪声数据)不如 MBGD 强。
    • 它比 MBGD 更容易导致过冲。
    • 如果没有陷入局部最小值,它会创建一个不如 MBGD 准确的模型。

以上是批量、小批量和随机梯度下降的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Python类中的多态性 Python类中的多态性 Jul 05, 2025 am 02:58 AM

多态是Python面向对象编程中的核心概念,指“一种接口,多种实现”,允许统一处理不同类型的对象。1.多态通过方法重写实现,子类可重新定义父类方法,如Animal类的speak()方法在Dog和Cat子类中有不同实现。2.多态的实际用途包括简化代码结构、增强可扩展性,例如图形绘制程序中统一调用draw()方法,或游戏开发中处理不同角色的共同行为。3.Python实现多态需满足:父类定义方法,子类重写该方法,但不要求继承同一父类,只要对象实现相同方法即可,这称为“鸭子类型”。4.注意事项包括保持方

Python函数参数和参数 Python函数参数和参数 Jul 04, 2025 am 03:26 AM

参数(parameters)是定义函数时的占位符,而传参(arguments)是调用时传入的具体值。1.位置参数需按顺序传递,顺序错误会导致结果错误;2.关键字参数通过参数名指定,可改变顺序且提高可读性;3.默认参数值在定义时赋值,避免重复代码,但应避免使用可变对象作为默认值;4.args和*kwargs可处理不定数量的参数,适用于通用接口或装饰器,但应谨慎使用以保持可读性。

解释Python发电机和迭代器。 解释Python发电机和迭代器。 Jul 05, 2025 am 02:55 AM

迭代器是实现__iter__()和__next__()方法的对象,生成器是简化版的迭代器,通过yield关键字自动实现这些方法。1.迭代器每次调用next()返回一个元素,无更多元素时抛出StopIteration异常。2.生成器通过函数定义,使用yield按需生成数据,节省内存且支持无限序列。3.处理已有集合时用迭代器,动态生成大数据或需惰性求值时用生成器,如读取大文件时逐行加载。注意:列表等可迭代对象不是迭代器,迭代器到尽头后需重新创建,生成器只能遍历一次。

python`@classmethod'装饰师解释了 python`@classmethod'装饰师解释了 Jul 04, 2025 am 03:26 AM

类方法是Python中通过@classmethod装饰器定义的方法,其第一个参数为类本身(cls),用于访问或修改类状态。它可通过类或实例调用,影响的是整个类而非特定实例;例如在Person类中,show_count()方法统计创建的对象数量;定义类方法时需使用@classmethod装饰器并将首参命名为cls,如change_var(new_value)方法可修改类变量;类方法与实例方法(self参数)、静态方法(无自动参数)不同,适用于工厂方法、替代构造函数及管理类变量等场景;常见用途包括从

如何处理Python中的API身份验证 如何处理Python中的API身份验证 Jul 13, 2025 am 02:22 AM

处理API认证的关键在于理解并正确使用认证方式。1.APIKey是最简单的认证方式,通常放在请求头或URL参数中;2.BasicAuth使用用户名和密码进行Base64编码传输,适合内部系统;3.OAuth2需先通过client_id和client_secret获取Token,再在请求头中带上BearerToken;4.为应对Token过期,可封装Token管理类自动刷新Token;总之,根据文档选择合适方式,并安全存储密钥信息是关键。

什么是python魔法方法或dunder方法? 什么是python魔法方法或dunder方法? Jul 04, 2025 am 03:20 AM

Python的magicmethods(或称dunder方法)是用于定义对象行为的特殊方法,它们以双下划线开头和结尾。1.它们使对象能够响应内置操作,如加法、比较、字符串表示等;2.常见用例包括对象初始化与表示(__init__、__repr__、__str__)、算术运算(__add__、__sub__、__mul__)及比较运算(__eq__、__lt__);3.使用时应确保其行为符合预期,例如__repr__应返回可重构对象的表达式,算术方法应返回新实例;4.应避免过度使用或以令人困惑的方

Python内存管理如何工作? Python内存管理如何工作? Jul 04, 2025 am 03:26 AM

Pythonmanagesmemoryautomaticallyusingreferencecountingandagarbagecollector.Referencecountingtrackshowmanyvariablesrefertoanobject,andwhenthecountreacheszero,thememoryisfreed.However,itcannothandlecircularreferences,wheretwoobjectsrefertoeachotherbuta

描述Python中的Python垃圾收集。 描述Python中的Python垃圾收集。 Jul 03, 2025 am 02:07 AM

Python的垃圾回收机制通过引用计数和周期性垃圾收集来自动管理内存。其核心方法是引用计数,当对象的引用数为零时立即释放内存;但无法处理循环引用,因此引入了垃圾收集模块(gc)来检测并清理循环。垃圾回收通常在程序运行中引用计数减少、分配与释放差值超过阈值或手动调用gc.collect()时触发。用户可通过gc.disable()关闭自动回收、gc.collect()手动执行、gc.set_threshold()调整阈值以实现控制。并非所有对象都参与循环回收,如不包含引用的对象由引用计数处理,内置

See all articles