批量梯度下降(BGD)、随机梯度下降(SGD)以及小批量梯度下降(MBGD)的理解

news/2024/11/24 18:44:51/

批量梯度下降(BGD)、随机梯度下降(SGD)以及小批量梯度下降(MBGD)的理解

        </h1><div class="clear"></div><div class="postBody">

  梯度下降法作为机器学习中较常使用的优化算法,其有着三种不同的形式:批量梯度下降(Batch Gradient Descent)、随机梯度下降(Stochastic Gradient Descent)以及小批量梯度下降(Mini-Batch Gradient Descent)。其中小批量梯度下降法也常用在深度学习中进行模型的训练。接下来,我们将对这三种不同的梯度下降法进行理解。
  为了便于理解,这里我们将使用只含有一个特征的线性回归来展开。此时线性回归的假设函数为:

hθ(x(i))=θ1x(i)+θ0hθ(x(i))=θ1x(i)+θ0

      (for j =0,1)
    }
  }


  优点:
  (1)通过矩阵运算,每次在一个batch上优化神经网络参数并不会比单个数据慢太多。
  (2)每次使用一个batch可以大大减小收敛所需要的迭代次数,同时可以使收敛到的结果更加接近梯度下降的效果。(比如上例中的30W,设置batch_size=100时,需要迭代3000次,远小于SGD的30W次)
  (3)可实现并行化。
  缺点:
  (1)batch_size的不当选择可能会带来一些问题。


  batcha_size的选择带来的影响:
  (1)在合理地范围内,增大batch_size的好处:
    a. 内存利用率提高了,大矩阵乘法的并行化效率提高。
    b. 跑完一次 epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。
    c. 在一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小。
  (2)盲目增大batch_size的坏处:
    a. 内存利用率提高了,但是内存容量可能撑不住了。
    b. 跑完一次 epoch(全数据集)所需的迭代次数减少,要想达到相同的精度,其所花费的时间大大增加了,从而对参数的修正也就显得更加缓慢。
    c. Batch_Size 增大到一定程度,其确定的下降方向已经基本不再变化。


  下图显示了三种梯度下降算法的收敛过程:



引用及参考:
[1] https://www.cnblogs.com/maybe2030/p/5089753.html
[2] https://zhuanlan.zhihu.com/p/37714263
[3] https://zhuanlan.zhihu.com/p/30891055
[4] https://www.zhihu.com/question/40892922/answer/231600231

写在最后:本文参考以上资料进行整合与总结,文章中可能出现理解不当的地方,若有所见解或异议可在下方评论,谢谢!
若需转载请注明:https://www.cnblogs.com/lliuye/p/9451903.html

分类: Machine Learning
<div id="blog_post_info">
好文要顶 关注我 收藏该文
LLLiuye
关注 - 8
粉丝 - 54
+加关注
18
0
<div class="clear"></div>
<div id="post_next_prev"><a href="https://www.cnblogs.com/lliuye/p/9449190.html" class="p_n_p_prefix">« </a> 上一篇:    <a href="https://www.cnblogs.com/lliuye/p/9449190.html" title="发布于 2018-08-09 15:23">Ubuntu下tensorboard的使用</a>
<br>
<a href="https://www.cnblogs.com/lliuye/p/9471231.html" class="p_n_p_prefix">» </a> 下一篇:    <a href="https://www.cnblogs.com/lliuye/p/9471231.html" title="发布于 2018-08-13 21:49">学习率(Learning rate)的理解以及如何调整学习率</a>
posted @ 2018-08-10 11:57  LLLiuye  阅读(41513)  评论(17)  编辑  收藏
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200223171034556.jpg)

http://www.ppmy.cn/news/605366.html

相关文章

LeetCode中等题之乘积小于 K 的子数组

题目 给你一个整数数组 nums 和一个整数 k &#xff0c;请你返回子数组内所有元素的乘积严格小于 k 的连续子数组的数目。 示例 1&#xff1a; 输入&#xff1a;nums [10,5,2,6], k 100 输出&#xff1a;8 解释&#xff1a;8 个乘积小于 100 的子数组分别为&#xff1a;[10]…

路遥知马力——Momentum动量梯度

NAG:在滑板下降过程中 也就是速度加快的时候 增大水平方向的力(累计的动量方向) 而在上升的过程中 也就是速度下降的时候 减少垂直方向的力&#xff08;当前的梯度方向&#xff09; 两种情况下 的最终结果 都是加大了往最优点方向的值 加速了 接近最优点的速度 本文收录在无痛的…

带你十分钟快速入门画图绘图作图神器 Matplotlib_各种画图小结

20220612 excel也可以画图 20220525 U-net架构(例如最低分辨率为32x32像素)。每个蓝框对应一个多通道特征图。通道的数量在方框的顶部表示。x-y尺寸在盒子的左下边缘。白盒代表复制的特征映射。箭头表示不同的操作 神经网络简单清晰的画法 The network architecture is illu…

LeetCode简单题之矩形重叠

题目 矩形以列表 [x1, y1, x2, y2] 的形式表示&#xff0c;其中 (x1, y1) 为左下角的坐标&#xff0c;(x2, y2) 是右上角的坐标。矩形的上下边平行于 x 轴&#xff0c;左右边平行于 y 轴。 如果相交的面积为 正 &#xff0c;则称两矩形重叠。需要明确的是&#xff0c;只在角或…

从入门到精通:Vuex使用教程,让你更好地管理应用程序状态!

目录 前言 1. 安装和配置Vuex 2. State 3. Mutations 4. Getters 5. Actions 6. Modules 7. 总结 前言 Vuex是Vue.js的一个状态管理库&#xff0c;它可以帮助我们更好地管理应用程序的状态。在Vue.js中&#xff0c;组件之间的通信往往需要借助于props和emit来完成&…

LeetCode简单题之统计平方和三元组的数目

题目 一个 平方和三元组 (a,b,c) 指的是满足 a2 b2 c2 的 整数 三元组 a&#xff0c;b 和 c 。 给你一个整数 n &#xff0c;请你返回满足 1 < a, b, c < n 的 平方和三元组 的数目。 示例 1&#xff1a; 输入&#xff1a;n 5 输出&#xff1a;2 解释&#xff1a;平方…

Python中正则表达式用法 重点格式以这个为准_首看_各种问题

20210811 https://www.jb51.net/article/101258.htm 一.惰性模式的概念: 此模式和贪婪模式恰好相反&#xff0c;它尽可能少的匹配字符以满足正则表达式即可&#xff0c;例如: var str"axxyyzbdkb"; console.log(str.match(/a.*b/));以上代码是贪婪模式&#xff0…

LeetCode简单题之判断根结点是否等于子结点之和

题目 给你一个 二叉树 的根结点 root&#xff0c;该二叉树由恰好 3 个结点组成&#xff1a;根结点、左子结点和右子结点。 如果根结点值等于两个子结点值之和&#xff0c;返回 true &#xff0c;否则返回 false 。 示例 1&#xff1a; 输入&#xff1a;root [10,4,6] 输出…