深度学习中的batch的大小对学习效果的影响
Batch_size参数的作用:决定了下降的方向
极端一:
batch_size为全数据集(Full Batch Learning):
好处:
1.由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。
2.由于不同权重的梯度值差别巨大,因此选择一个全局的学习率很困难。Full Batch Learning可以使用Rprop只基于梯度符号并且针对性单独更新各权值。
坏处:
1.随着数据集的海量增长和内存限制,一次性载入所有的数据进来变得越来越不可行。
2.以Rprop的方式迭代,会由于各个Batch之间的采样差异性,各次梯度修正值相互抵消,无法修正。
极端二:
Batch_size=1:
Batch_size=1,也就是每次只训练一个样本。这就是在线学习(Online Learning)。线性神经元在均方误差代价函数的错误面是一个抛物面,横截面是椭圆。对于多层神经元,非线性网络,在局部依然近似是抛物面。使用在线学习,每次修正方向以各自样本的梯度方向修正,难以达到收敛。
选择适中的Batch_size值:
也就是批梯度下降法。因为如果数据集足够充分,那么用一半,甚至少得多的数据训练算出来的梯度与用全部数据训练出来的梯度几乎是一样的。
在合理范围内,增大Batch_size的好处:
1.提高了内存利用率以及大矩阵乘法的并行化效率。
2.减少了跑完一次epoch(全数据集)所需要的迭代次数,加快了对于相同数据量的处理速度。
盲目增大Batch_size的坏处:
1.提高了内存利用率,但是内存容量可能不足。
2.跑完一次epoch(全数据集)所需的迭代次数减少,要想达到相同的精度,其所花费的时间大大增加,从而对参数的修正也就显得更加缓慢。
3.Batch_size增大到一定程度,其确定的下降方向已经基本不再变化。
调节Batch_size会如何影响训练效果?
实验:使用不同的batch_size,在LeNet上训练Mnist数据集的效果。使用的框架为Theano。

运行结果表明:
1.Batch_Size太小,算法在200 epochs内不收敛。
2.随着Batch_Size增大,处理相同数据量的速度加快。
3.随着Batch_Size增大,达到相同精度所需要的epoch的数量增多。
4.由于上述两种因素的矛盾,Batch_Size增大到某个时候,达到时间上的最优。
5.由于最终收敛精度会陷入不同的局部极值,因此Batch_Size增大到某些时候,达到最终收敛精度上的最优。
在实际过程中,该如何选择呢?
一般而言,根据GPU显存,设置为最大,而且一般要求是8的倍数(比如32,128),这样,GPU内部的并行计算效率最高。
或者,选择一部分数据,设置几个8的倍数的Batch_Size,看看loss的下降情况即可。
其他经验之谈
知乎用户:理论上说batch_size=1是最好的,不过实际上调的时候,会出现batch_size太小导致网络收敛不稳定,最后结果比较差。而batch_size太大会影响随机性的引入。
江河:
1.batch_size设的大一些,收敛得块,也就是需要训练的次数少,准确率上升的也很稳定,但是实际使用起来精度不高。
2.batch_size设的小一些,收敛得慢,可能准确率来回震荡,因此需要把基础学习速率降低一些,但是实际使用起来精度较高。
一般尝试batch_size=64或者batch_size=1两种情况。
总结:对于新手而言,在GPU内存足够的情况下,结合样本大小,可以尝试batch_size为8,16,32,64等.
深度学习中的batch的大小对学习效果的影响的更多相关文章
- 深度学习中的batch、epoch、iteration的含义
深度学习的优化算法,说白了就是梯度下降.每次的参数更新有两种方式. 第一种,遍历全部数据集算一次损失函数,然后算函数对各个参数的梯度,更新梯度.这种方法每更新一次参数都要把数据集里的所有样本都看一遍, ...
- 深度学习中 Batch Normalization
深度学习中 Batch Normalization为什么效果好?(知乎) https://www.zhihu.com/question/38102762
- 深度学习中的Data Augmentation方法(转)基于keras
在深度学习中,当数据量不够大时候,常常采用下面4中方法: 1. 人工增加训练集的大小. 通过平移, 翻转, 加噪声等方法从已有数据中创造出一批"新"的数据.也就是Data Augm ...
- 深度学习中优化【Normalization】
深度学习中优化操作: dropout l1, l2正则化 momentum normalization 1.为什么Normalization? 深度神经网络模型的训练为什么会很困难?其中一个重 ...
- 关于深度学习中的batch_size
5.4.1 关于深度学习中的batch_size 举个例子: 例如,假设您有1050个训练样本,并且您希望设置batch_size等于100.该算法从训练数据集中获取前100个样本(从第1到第100个 ...
- 深度学习中的Normalization模型
Batch Normalization(简称 BN)自从提出之后,因为效果特别好,很快被作为深度学习的标准工具应用在了各种场合.BN 大法虽然好,但是也存在一些局限和问题,诸如当 BatchSize ...
- [优化]深度学习中的 Normalization 模型
来源:https://www.chainnews.com/articles/504060702149.htm 机器之心专栏 作者:张俊林 Batch Normalization (简称 BN)自从提出 ...
- 深度学习中GPU和显存分析
刚入门深度学习时,没有显存的概念,后来在实验中才渐渐建立了这个意识. 下面这篇文章很好的对GPU和显存总结了一番,于是我转载了过来. 作者:陈云 链接:https://zhuanlan.zhihu. ...
- zz详解深度学习中的Normalization,BN/LN/WN
详解深度学习中的Normalization,BN/LN/WN 讲得是相当之透彻清晰了 深度神经网络模型训练之难众所周知,其中一个重要的现象就是 Internal Covariate Shift. Ba ...
随机推荐
- Tumblr 架构设计
英文原文:The Tumblr Architecture Yahoo Bought For A Cool Billion Dollars 最近的新闻中我们得知雅虎11亿美元收购了Tumblr: Yah ...
- 一起SQL引发OOM的解决思路与过程(转载)
在TOMCAT WEB程序的运行过程中,突然触发了内存溢出错误,检查Tomcat的localhost日志,找到如下信息: java.lang.OutOfMemoryError: Java heap s ...
- ASP.NET MVC 自定义处理JSON ActionResult类
1.统一JSON格式处理方式,同时指定ContentType类型,解决低版本浏览器获取json时ContentType为application/json提示下载的问题. public abstract ...
- PureFTP被动端口设置
修改Pureftp的配置文件把 # PassivePortRange 30000 50000 把前面的#删除 重启pureftpd 注意把被动端口防火墙例外 如果是阿里云主机 安全规 ...
- [APM] 2个实例+5个维度解读APM技术
为了加深EGO会员之间的相互了解,同时也为大家提供更多线上相互学习交流的机会,EGO正式启动会员群线上分享活动.本文是根据陈靖华分享主题“APM的价值”的内容整理而成. 第二期分享嘉宾:陈靖华,EGO ...
- C++11 右值引用和转移语义
新特性的目的 右值引用 (Rvalue Referene) 是 C++ 新标准 (C++11, 11 代表 2011 年 ) 中引入的新特性 , 它实现了转移语义 (Move Sementics) 和 ...
- 模仿jQuery的ajax的封装
/* * 我们使用了ajax 的xmlHttpRequest 跟服务器进行交互. * * 交互了有四个基本步骤 * 1:创建对象 * 2:建立连接 * 3:发送请求 * 4:接收数据 * * 这些操作 ...
- pom.xml文件详解
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- 【原】使用Tkinter绘制GUI并结合Matplotlib实现交互式绘图
在数据分析的过程中,往往需要对所建立的模型进行可视化,并调整其中的某些参数. 通常情况下,在Python中可以通过Matplotlib来进行绘制图像.然而该绘制过程是静态的,也就是每次调整完参数需要重 ...
- 用panels 制作drupal首页
1.下载zen主题 路径:https://www.drupal.org/project/zen2.“启用并设为默认”3.基于zen制作子主题 把zen目录下STARTERKIT文件夹,复制到sites ...