mini-batch Gradient Descent
点击此处返回总目录 前面已经讲过梯度下降法家族中的批量梯度下降法(BGD)和随机梯度下降法(SGD),今天说一下mini-batch Gradient Descent(MBGD)。 批量梯度下降法(Batch Gradient Descent,BGD) //一般说的梯度下降法就是指BGD。 随机梯度下降法(Stochastic Gradient Descent, SGD) 小批量梯度下降法(Mini-batch Gradient Descent, MBGD) ----------------------------------------------------------------------------------------------------------------------- 首先说一个秘密,我们其实在做Gradient descent的时候,我们并不会真的去minimize total loss(即不会用BGD),而是使用mini-batch。 我们是怎么做的呢?我们会把training data分成一个一个的batch。比如说有1万张图片,每次随机选100张进来作为一个batch,一共有100个batch。每个batch要随机的分,如果batch没有随机的分,比如说某一个batch里面统统都是1,另一个batch里面统统都是数字2,这样会对performance会有不小的影响。 接下来再怎么做呢? 首先随机初始化参数。接下来,我们随机选一个batch出来,比如说选了第一个batch 出来。然后我们计算对第一个batch里面的element的total loss。注意不是全部training data(1万张图片)的total loss,而是这个batch的图片(100张)的total loss。L' = l 1+ l31+...。然后我们根据L'去更新参数,也就是计算参数对L'的偏微分,然后更新参数。 接下来,再随机选一个batch,比如选的是第二个batch。然后计算第二个batch里面的examples的total loss L''。L'' = l2 + l16+...。再计算参数对L''的偏微分,更新参数。 反复执行上面的过程,直到把所有的batch通通选过一次。因为共有100个batch,所以要执行100次。参数要更新100次。 把所有的batch都看过一次,叫做一个epoch。我们要重复多个epch。我们在train一个网络的时候,会需要好几十个epoch,而不是只有一个epoch。 在上一节,用keras写手写数字识别的例子中,有以下语句: batch_size = 100,就是告诉Keras我们的一个batch有多大,我们要把100个example放在一个batch里面。Keras会帮你随机的放,所以这里不需要自己写。nb_epoch = 20就是说一共有20个epoch,也就是蓝色框框要重复20次,也就是每一个batch被看过20次。在一个epoch里面,我们会更新很多次参数,每看一个batch就会更新一次参数。假设共有100个batch,那么在一个epoch里面会更新100次参数,20个epoch就会更新20*100次参数。并不是设置20个epoch就更新20次参数。 ----------------------------------------------------------------------------------------------------------------------- 假设我们把batch size设为1的话,就是每一个元素更新一次参数。这就是我们之前讲过随机梯度下降(SGD)。 我们之前讲过随机梯度下降法的好处,它的好处就是相较于批量梯度下降法,它的速度比较快。因为原来的gradient descent(没有说那种梯度下降法,一般是指批量梯度下降)更新一次参数的时候,随机梯度下降法可能已经更新100次参数了(假设有100笔training data的话),虽然说每次更新参数的方向是不稳定的,但是还是比较强的。 那你可能会问,既然随机梯度下降法比较强的话,为什么还要用mini-batch呢?是因为一些实做上的问题,让我们必须要用mini-batch。要用mini-batch的主要理由其实是实做上的需求。 我们知道,batch size 越小,在一个epoch中更新的参数的次数越多。比如,我们有5万个examples。如果我们的batch size设为1,也就是SGD的话,一个epoch中可以更新5万次参数。如果我们的batch size设为10,那在一个epoch中,我们可以更新5000次参数。这样看起来,好像是SGD比较快,因为batch size为10,在一个epoch里面才更新5000次参数;但是SGD可以更新5万次参数,SGD的速度好像是另一个的十倍。 但是,实际上,当你的batch size设的不一样的时候,一个epoch需要的时间是不一样的。大家可能觉得,training data都是5万笔,设batch size为1还是10,运算量都是一个epoch,都是要把5万个example过一遍,不是一样多的么?但是在实际上,在实做上,当batch size设的不一样时,虽然是同样多的example,但是它运算的时间是不一样的。等一下会解释为什么。我们先来实际上的例子。 表格是在GTX980上跑在MNIST数据集5万个training examples上面,当设不同的batch size的时候,一个epoch所需要的时间。如果batch size为1,也就是SGD,一个epoch要166秒,也就是接近3分钟。如果batch size设10的话,一个epoch是17秒。当设为100,1000,10000时,时间越来越小。我们会发现,过了166秒,上面的才算一个epoch;而下面166秒已经差不多算了10个epoch了。所以这样比较起来,batch设1跟设10,在166秒内更新参数的次数几乎是一样的。这种情况下,我们其实会想要选batch size = 10,因为选batch size等于10,会比较稳定。我们之前之所以从gradient descent换成SGD,原因就是SGDtrain得比较快,update次数比较多。可是现在用SGD,也不会更快。那为什么不选一个比较稳定,而且次数也比较多的呢?所以,我们会选择batch size 等于10. 接下来,我们的问题就是,为什么batch size设的比较大的时候,速度会比较快。这个就是因为,我们使用了并行运算,使用了GPU。因为使用了GPU,所以batch size等于10 的这个10个example,是会同时运算的。所以算10个example的时间,跟算1个example的时间,其实几乎是一样的。(这个一会再讲为什么。) 那既然batch size越大会越稳定,而且batch size变大,还是可以并行运算。那为什么不把batch size开的超级大呢?这有两个原因。
----------------------------------------------------------------------------------------------------------------------- 接下我们要解释,当有batch的时候,GPU是如何平行的加速。在深度学习介绍中说,整个网络可以看成是一连串的矩阵运算的结果,不管是Forward pass还是backward pass。forward pass 就是图上这样,backward pass 也相似。 我们可以比较SGD与mini-batch的区别,即batch size=1与batch=10的差别。 如果batch size = 1,即SGD时。会读入一个example x,然后进行一些列矩阵运算,最后更新一次参数。我们只展示第一个Layer,会进行以下运算: (1) 当更新完一次参数后,会读第二个example x,再进行一些列矩阵运算,最后更新第二次参数。同样展示一下,第一个Layer的运算: (2) 但是在mini-batch的时候,会把同一个batch的input统统集合起来,每一个input是一个向量。如下图,会把黄色的x,和绿色的x拼起来,成为一个矩阵。再用这个矩阵乘W1,就可以直接得到z1和z2。 (3) 在理论上,先算(1)再算(2)的总时间跟算(3)的时间理论上,运算量是一样的。但是就实做上,做(3)的速度是比较快的。因为让GPU做(1)运算,和做(3)运算,时间其实是一样的。对GPU来说,矩阵相乘里面的每一个element x都是可以并行运算的。所以(1)+(2)的运算时间反而会变成(3)运算的时间的两倍。 这就是为什么我们用mini-batch,再加上GPU的时候,是可以加速的。但是如果只有GPU,但是没有用mini-batch的话,其实就加速不了太多。所以有的人买来GPU,但是他不知道用mini-batch,导致装了GPU也没变快。 |
mini-batch Gradient Descent相关推荐
- 三种梯度下降法对比(Batch gradient descent、Mini-batch gradient descent 和 stochastic gradient descent)
梯度下降(GD)是最小化风险函数.损失函数的一种常用方法,随机梯度下降(stochastic gradient descent).批量梯度下降(Batch gradient descent)和mini ...
- 几种梯度下降方法简介(Batch gradient descent、Mini-batch gradient descent 和 stochastic gradient descent)
我们在训练神经网络模型时,最常用的就是梯度下降,这篇博客主要介绍下几种梯度下降的变种(mini-batch gradient descent和stochastic gradient descent), ...
- 几种梯度下降方法对比(Batch gradient descent、Mini-batch gradient descent 和 stochastic gradient descent)
几种梯度下降方法对比(Batch gradient descent.Mini-batch gradient descent 和 stochastic gradient descent) 我们在训练神经 ...
- 随机梯度下降(Stochastic gradient descent)和 批量梯度下降(Batch gradient descent )的公式对比、实现对比
随机梯度下降(Stochastic gradient descent)和 批量梯度下降(Batch gradient descent )的公式对比.实现对比 标签: 梯度下降最优化迭代 2013 ...
- 【Machine Learning实验1】batch gradient descent(批量梯度下降) 和 stochastic gradient descent(随机梯度下降)
批量梯度下降是一种对参数的update进行累积,然后批量更新的一种方式.用于在已知整个训练集时的一种训练方式,但对于大规模数据并不合适. 随机梯度下降是一种对参数随着样本训练,一个一个的及时updat ...
- 随机梯度下降(Stochastic gradient descent)和 批量梯度下降(Batch gradient descent )的公式对比...
转自:here 注意下面说的全局最优是特殊的情况,一般还是梯度下降的方法还是很容易变成局部最优. 梯度下降(GD)是最小化风险函数.损失函数的一种常用方法,随机梯度下降和批量梯度下降是两种迭代求解思路 ...
- 机器学习中的梯度下降( Gradient Descent)算法
前言 梯度下降(Gradient Descent,GD)算法主要分为三种:批量梯度下降(Batch Gradient Descent,BGD)算法.随机梯度下降(Stochastic Gradient ...
- 梯度下降算法(Gradient Descent)
一.定义 梯度下降法(Gradient desent) 是一个一阶最优算法,通常也称为最速下降法.要使用梯度下降法找到一个函数的局部极小值,必须向函数上当前点对应梯度(或者是近似梯度)的反方 ...
- 机器学习-mini batch的一些tips
以下内容来自博客理解! 1.参数更新 将 5000 个子集都计算完时,就是进行了一个 epoch 处理 ,一个 epoch 意思是遍历整个数据集,即 5000 个子数据集一次,也就是做了 5000 个 ...
- 吴恩达机器学习(十五)大规模机器学习(Batch、Stochastic、Mini-batch gradient descent、MapReduce)
目录 0. 前言 1. Stochastic Gradient Descent 2. Mini-batch Gradient Descent 3. MapReduce 4. 在线学习(online l ...
最新文章
- JAVA 面向对象
- HTML form 标签的 action 属性
- [课程设计]Scrum 2.5 多鱼点餐系统开发进度(下单一览页面-菜式添加框架设计)
- excel同一单元格怎么换行_Excel工作表中最经典的10个应用,小技巧,大作用
- tkmybatis 子查询_日均20亿流量:携程机票查询系统的架构升级
- 用border画三角形
- 信号调制产生边频的原理及希尔伯特解调
- 听说Mutex源码是出名的不好看,我不信,来试一下
- WebLogic 控制台乱码
- #leetcode刷题之路39-组合总和
- 【笔试/面试】数组及其内存结构
- 重启docker容器命令
- 大智慧行情服务器在哪个文件夹,【大智慧】大智慧公式在哪个文件夹?
- SCI顶级牛刊《Nature》合集PDF(2018~2020年度)
- 敏捷团队章程-让团队持续敏捷
- S3C2440-裸机篇-05 | S3C2440时钟体系详解(FCLK、PCLK、HCLK)
- 二极管1N4148w
- layer出现Uncaught ReferenceError: layer is not defined错误
- 手机与存储卡空间大小剩余怎么获取
- Shell循环语句(for、while、until)及echo、IFS