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的大小对学习效果的影响的更多相关文章

  1. 深度学习中的batch、epoch、iteration的含义

    深度学习的优化算法,说白了就是梯度下降.每次的参数更新有两种方式. 第一种,遍历全部数据集算一次损失函数,然后算函数对各个参数的梯度,更新梯度.这种方法每更新一次参数都要把数据集里的所有样本都看一遍, ...

  2. 深度学习中 Batch Normalization

    深度学习中 Batch Normalization为什么效果好?(知乎) https://www.zhihu.com/question/38102762

  3. 深度学习中的Data Augmentation方法(转)基于keras

    在深度学习中,当数据量不够大时候,常常采用下面4中方法: 1. 人工增加训练集的大小. 通过平移, 翻转, 加噪声等方法从已有数据中创造出一批"新"的数据.也就是Data Augm ...

  4. 深度学习中优化【Normalization】

    深度学习中优化操作: dropout l1, l2正则化 momentum normalization 1.为什么Normalization?     深度神经网络模型的训练为什么会很困难?其中一个重 ...

  5. 关于深度学习中的batch_size

    5.4.1 关于深度学习中的batch_size 举个例子: 例如,假设您有1050个训练样本,并且您希望设置batch_size等于100.该算法从训练数据集中获取前100个样本(从第1到第100个 ...

  6. 深度学习中的Normalization模型

    Batch Normalization(简称 BN)自从提出之后,因为效果特别好,很快被作为深度学习的标准工具应用在了各种场合.BN 大法虽然好,但是也存在一些局限和问题,诸如当 BatchSize ...

  7. [优化]深度学习中的 Normalization 模型

    来源:https://www.chainnews.com/articles/504060702149.htm 机器之心专栏 作者:张俊林 Batch Normalization (简称 BN)自从提出 ...

  8. 深度学习中GPU和显存分析

    刚入门深度学习时,没有显存的概念,后来在实验中才渐渐建立了这个意识. 下面这篇文章很好的对GPU和显存总结了一番,于是我转载了过来. 作者:陈云 链接:https://zhuanlan.zhihu. ...

  9. zz详解深度学习中的Normalization,BN/LN/WN

    详解深度学习中的Normalization,BN/LN/WN 讲得是相当之透彻清晰了 深度神经网络模型训练之难众所周知,其中一个重要的现象就是 Internal Covariate Shift. Ba ...

随机推荐

  1. RDLC 图形报表预览时 “本地报表处理期间错误”

    在RDLC报表中有图形报表的导出和打印都正常,但预览时"本地报表处理期间错误",这是因为你设置的图形太宽已经超过默认的A4 纸的宽度,解决办法:报表页面的报表--->报表属性 ...

  2. 物联网架构成长之路(23)-Docker练习之Elasticsearch服务搭建

    0. 前言 最近基本都是学一些环境配置,和一些中间件的安装与配置.没有实际编写代码.可能看起来有点水,我对自己的学习方式是,先要了解各个中间件的安装配置以及简单使用,理论应用场景,然后我在小项目中,逐 ...

  3. ES6,Array.find()和findIndex()函数的用法

    ES6为Array增加了find(),findIndex函数. find()函数用来查找目标元素,找到就返回该元素,找不到返回undefined. findIndex()函数也是查找目标元素,找到就返 ...

  4. C++ 类占用空间计算方式

    1.一个类占用的空间主要是属性占用空间,而成员函数一般不占用空间,但是虚函数占用空间,需要说明的是,无论多少个虚函数,只要占用4个字节即可,也就是索引指向一个虚拟表的首位置.另外需要说明的是占用空间都 ...

  5. 《Essential C++》读书笔记 之 基于对象编程风格

    <Essential C++>读书笔记 之 基于对象编程风格 2014-07-13 4.1 如何实现一个class 4.2 什么是Constructors(构造函数)和Destructor ...

  6. C#中怎么判断一个数组中是否存在某个数组值

    (1) 第一种方法: ,,}; ); // 这里的1就是你要查找的值 ) // 不存在 else // 存在 (2) 第二种方法: string[] strArr = {"a",& ...

  7. django admin upload 上传图片到oss Django Aliyun OSS2 Storage

    https://github.com/xiewenya/django-aliyun-oss2-storage Install pip install django-aliyun-oss2-storag ...

  8. 【Java】Comparable和Comparator接口的区别

    Java提供了只包含一个compareTo()方法的Comparable接口.这个方法可以个给两个对象排序.具体来说,它返回负数,0,正数来表明已经存在的对象小于,等于,大于输入对象. Java提供了 ...

  9. centos7安装elasticsearch-head

    elasticsearch-head安装前准备 1.操作系统64位CentOS Linux release 7.2.1511 (Core)2.git是必需的elasticsearch-head是一款开 ...

  10. 【webssh】网页上的SSH终端

    [webssh] ——记两天来比较痛苦的历程 广义上来说,webssh泛指一种技术可以在网页上实现一个SSH终端.从而无需Xshell之类的模拟终端工具进行SSH连接,将SSH这一比较低层的操作也从C ...