当前位置: 首页 > news >正文

梯度下降法(SGD)原理

目录

梯度下降法(SGD)原理:求偏导

1. 梯度(在数学上的定义)

2. 梯度下降法迭代步骤

BGD批量梯度下降算法

BGD、SGD在工程选择上的tricks


梯度下降法(SGD)原理:求偏导

1. 梯度(在数学上的定义)

表示某一函数在该点处方向导数沿着该方向取得最大值(即最大方向导数的方向),也就是函数在该点处沿着该方向变化最快,变化率最大(为该梯度的模)。

梯度下降

2. 梯度下降法迭代步骤

梯度下降的一个直观的解释:
比如我们在一座大山上的 某处位置,由于我们不知道怎么下山,于是决定 走一步算一步,也就是在每走到一个位置的时候,求解当前位置的梯度, 沿着梯度的负方向,也就是当前最陡峭的位置向下走一步,然后 继续求解当前位置梯度,向这一步所在位置沿着 最陡峭最易下山的位置走一步。 这样一步步的走下去,一直走到觉得我们已经到了山脚。当然这样走下去,有可能我们不能走到山脚,而是到了 某一个局部的山峰低处

BGD批量梯度下降算法

是一种基于梯度的优化方法,其工作原理是通过多次迭代来寻找误差函数的最小值。在每次迭代中,算法会基于一组训练样本计算误差函数的梯度,并在此基础上更新模型参数。由于BGD算法在每次迭代时都需要计算所有训练样本的梯度,因此它通常会对内存和计算资源产生较大的压力。

相对于其他梯度下降算法,BGD具有以下优点:

  • 能够在较短时间内获得较好的收敛效果。
  • 通常能够避免陷入局部最小值的情况。
  • 具有较强的鲁棒性,能够处理较大的输入数据集。

尽管BGD算法具有上述优势,但仍然存在一些需要注意的问题。其中一个重要的问题是算法收敛速度的慢。由于每次迭代都需要计算所有训练样本的梯度,因此算法的收敛速度往往较慢。此外,BGD算法不容易处理在线学习问题,因为在线学习通常需要对单个样本进行计算,而批量梯度下降算法需要对所有样本进行计算。

为了解决BGD算法的上述问题,研究人员提出了一些变体算法。其中最常见的是随机梯度下降(SGD)算法。与BGD算法不同,SGD算法在每次迭代时只计算单个训练样本的梯度,从而大大提升了算法的计算速度。此外,SGD算法还能够较好地处理在线学习问题,因为它只需要对单个样本进行计算。

总之,BGD算法是一种常用的机器学习算法,适用于大规模数据集的优化。虽然存在一些缺点,但可以通过一些变体算法来加以解决。在实际应用中,我们应该根据数据集大小和问题要求选择最合适的优化算法。

BGD、SGD在工程选择上的tricks

BGD:相对噪声低些,幅度也大一些,你可以继续找最小值。
SGD:大部分时候你向着全局最小值靠近,有时候你会远离最小值,因为那个样本恰好给你指的方向不对,因此SGD是有很多噪声的,平均来看,它最终会靠近最小值,不过有时候也会方向错误,因为SGD永远不会收敛,而是会一直在最小值附近波动。一次性只处理了一个训练样本,这样效率过于低下。
mini-batch:实践中最好选择不大不小的 mini-batch,得到了大量向量化,效率高,收敛快。

调节 Batch_Size 对训练效果影响到底如何?

  1. Batch_Size 太小,模型表现效果极其糟糕(error飙升)。
  2. 随着 Batch_Size 增大,处理相同数据量的速度越快。
  3. 随着 Batch_Size 增大,达到相同精度所需要的 epoch 数量越来越多。
  4. 由于上述两种因素的矛盾, Batch_Size 增大到某个时候,达到时间上的最优。
  5. 由于最终收敛精度会陷入不同的局部极值,因此 Batch_Size 增大到某些时候,达到最终收敛精度上的最优。

如果训练集较小(小于 2000 个样本),直接使用BGD法,一般的 mini-batch 大小为 64 到 512,考虑到电脑内存设置和使用的方式,如果 mini-batch 大小是 2� ,代码会运行地快一些。

 梯度下降法(SGD)原理解析及其改进优化算法 - 知乎

http://www.lryc.cn/news/176921.html

相关文章:

  • QQ表情包存储位置解析
  • 软件架构的演化和维护
  • C语言数组和指针笔试题(四)(一定要看)
  • FragmentManager is already executing transactions
  • Matlab中clear,close all,clc功能详细说明
  • Typora安装无需破解免费使用
  • LuatOS-SOC接口文档(air780E)--errDump - 错误上报
  • 低代码平台如何助力国内企业数字化转型?
  • SI3262—高度集成的低功耗SOC芯片
  • 除静电离子风机在无尘车间的应用
  • Linux上的Pip和Python升级指南
  • 4G工业路由器高效数据传输助力光伏发电站管理
  • 【音视频笔记】Mediacodec+Muxer生成mp4,浏览器无法播放问题处理
  • debug过程中,矩阵左乘右乘相关概念梳理
  • Ubuntu 安装Kafka
  • 洗地机性价比高的是哪款?高性价比洗地机排名
  • 安装konga
  • 算法基础之高精度总结
  • oracle TNS Listener 远程投毒漏洞修复
  • 第二章:最新版零基础学习 PYTHON 教程(第一节 - Python 输入/输出–在 Python 中获取输入)
  • react create-react-app v5 从零搭建项目
  • 2023软件测试八股文,涵盖所有面试题
  • 性能压力测试的定义及步骤是什么
  • Selenium自动化中处理鼠标悬停并操作的方法
  • python socket 编程实现猜数字
  • 20个提升效率的JS简写技巧,告别屎山!
  • Pikachu靶场——SSRF 服务端请求伪造
  • Android file
  • 【计算机网络】计网常见面试题总结
  • SpringMVC 学习(七)JSON