【深度学习】BatchSize设置_batch size_littlemichelle的博客-程序员秘密

技术标签: 深度学习  

  • Batch_size的使用意义及大小的选择

    Batch_size不宜选的太小,太小了容易不收敛,或者需要经过很大的epoch才能收敛;也没必要选的太大,太大的话首先显存受不了,其次可能会因为迭代次数的减少而造成参数修正变的缓慢。

  • Batch_size有时候明明已经很小了,可显存还是很紧张,还有就是同样的图片大小,同样的Batch_size,为啥有时候显存够用有时候就不够用呢,目前我所知道的可能是如下四个问题:

(1)模型的复杂度,复杂的模型占的内存比简单的模型要大很多,这一点容易被忽略;

(2)电脑可能还在运行其他占显存的任务,使用nvida-smi命令来查看,并关闭它们;

(3)不光train阶段的Batch_size要改,test阶段的Batch_size也要调小,我以前一直以为只改动train的就可以了,too naive;

(4)图片大小

  • 我的一个盲区

 

遇到了一个问题,虽然还没解决,也不知道错误在哪?运行中间说batch_size出现错误。。。

137   self.n_batch_size = int(config.get("train", "batch_size"))

-_-||原因是因为公司及其内存不够了。。。137


训练batch size和测试的batch size无关,随便设一个数,显卡放得下的话,越大越好,越大越快。

这个句话有问题20190829,并不是越多越好。

网易面试官问了一个问题学习率和batchsize的关系是?

【AI不惑境】学习率和batchsize如何影响模型的性能? - 龙鹏-言有三的文章 - 知乎

1 为什么说学习率和batchsize

目前深度学习模型多采用批量随机梯度下降算法进行优化,随机梯度下降算法的原理如下,

n是批量大小(batchsize),η是学习率(learning rate)。可知道除了梯度本身,这两个因子直接决定了模型的权重更新,从优化本身来看它们是影响模型性能收敛最重要的参数。

学习率直接影响模型的收敛状态,batchsize则影响模型的泛化性能,两者又是分子分母的直接关系,相互也可影响,因此这一次来详述它们对模型性能的影响。

2 学习率如何影响模型性能?

通常我们都需要合适的学习率才能进行学习,要达到一个强的凸函数的最小值,学习率的调整应该满足下面的条件,i代表第i次更新。

第一个式子决定了不管初始状态离最优状态多远,总是可以收敛。第二个式子约束了学习率随着训练进行有效地降低,保证收敛稳定性,各种自适应学习率算法本质上就是不断在调整各个时刻的学习率。

学习率决定了权重迭代的步长,因此是一个非常敏感的参数,它对模型性能的影响体现在两个方面,第一个是初始学习率的大小,第二个是学习率的变换方案。

2.1、初始学习率大小对模型性能的影响

初始的学习率肯定是有一个最优值的,过大则导致模型不收敛,过小则导致模型收敛特别慢或者无法学习,下图展示了不同大小的学习率下模型收敛情况的可能性,图来自于cs231n。

那么在不考虑具体的优化方法的差异的情况下,怎样确定最佳的初始学习率呢?

通常可以采用最简单的搜索法,即从小到大开始训练模型,然后记录损失的变化,通常会记录到这样的曲线。

随着学习率的增加,损失会慢慢变小,而后增加,而最佳的学习率就可以从其中损失最小的区域选择。

有经验的工程人员常常根据自己的经验进行选择,比如0.1,0.01等。

随着学习率的增加,模型也可能会从欠拟合过度到过拟合状态,在大型数据集上的表现尤其明显,笔者之前在Place365上使用DPN92层的模型进行过实验。随着学习率的增强,模型的训练精度增加,直到超过验证集。

2.2、学习率变换策略对模型性能的影响

学习率在模型的训练过程中很少有不变的,通常会有两种方式对学习率进行更改,一种是预设规则学习率变化法,一种是自适应学习率变换方法

2.2.1 预设规则学习率变化法

常见的策略包括fixed,step,exp,inv,multistep,poly,sigmoid等,集中展示如下:

笔者之前做过一个实验来观察在SGD算法下,各种学习率变更策略对模型性能的影响,具体的结果如下:

3 Batchsize如何影响模型性能?

模型性能对batchsize虽然没有学习率那么敏感,但是在进一步提升模型性能时,batchsize就会成为一个非常关键的参数。

3.1 大的batchsize减少训练时间,提高稳定性

这是肯定的,同样的epoch数目,大的batchsize需要的batch数目减少了,所以可以减少训练时间,目前已经有多篇公开论文在1小时内训练完ImageNet数据集。另一方面,大的batch size梯度的计算更加稳定,因为模型训练曲线会更加平滑。在微调的时候,大的batch size可能会取得更好的结果。

3.2 大的batchsize导致模型泛化能力下降

在一定范围内,增加batchsize有助于收敛的稳定性,但是随着batchsize的增加,模型的性能会下降,如下图,来自于文[5]。

这是研究者们普遍观测到的规律,虽然可以通过一些技术缓解。这个导致性能下降的batch size在上图就是8000左右。

那么这是为什么呢?

研究[6]表明大的batchsize收敛到sharp minimum,而小的batchsize收敛到flat minimum,后者具有更好的泛化能力。两者的区别就在于变化的趋势,一个快一个慢,如下图,造成这个现象的主要原因是小的batchsize带来的噪声有助于逃离sharp minimum。

Hoffer[7]等人的研究表明,大的batchsize性能下降是因为训练时间不够长,本质上并不少batchsize的问题,在同样的epochs下的参数更新变少了,因此需要更长的迭代次数。

3.3 小结

batchsize在变得很大(超过一个临界点)时,会降低模型的泛化能力。在此临界点之下,模型的性能变换随batch size通常没有学习率敏感。

4 学习率和batch size的关系(成正比)

 

结论:batchsize变大,学习率也要相应变大;本质是为了梯度的方差保持不变。

通常当我们增加batchsize为原来的N倍时,要保证经过同样的样本后更新的权重相等,按照线性缩放规则,学习率应该增加为原来的N倍[5]。但是如果要保证权重的方差不变,则学习率应该增加为原来的sqrt(N)倍[7],目前这两种策略都被研究过,使用前者的明显居多。

从两种常见的调整策略来看,学习率和batchsize都是同时增加的。学习率是一个非常敏感的因子,不可能太大,否则模型会不收敛。同样batchsize也会影响模型性能,那实际使用中都如何调整这两个参数呢?

研究[8]表明,衰减学习率可以通过增加batchsize来实现类似的效果,这实际上从SGD的权重更新式子就可以看出来两者确实是等价的,文中通过充分的实验验证了这一点。

研究[9]表明,对于一个固定的学习率,存在一个最优的batchsize能够最大化测试精度,这个batchsize和学习率以及训练集的大小正相关。

对此实际上是有两个建议:

  • 如果增加了学习率,那么batch size最好也跟着增加,这样收敛更稳定。
  • 尽量使用大的学习率,因为很多研究都表明更大的学习率有利于提高泛化能力。如果真的要衰减,可以尝试其他办法,比如增加batch size,学习率对模型的收敛影响真的很大,慎重调整。
  • 在合理范围内,增大 Batch_Size 有何好处?

内存利用率提高了,大矩阵乘法的并行化效率提高。
跑完一次 epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。
在一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小。

  • 盲目增大 Batch_Size 有何坏处?

内存利用率提高了,但是内存容量可能撑不住了。
跑完一次 epoch(全数据集)所需的迭代次数减少,要想达到相同的精度,其所花费的时间大大增加了,从而对参数的修正也就显得更加缓慢。
Batch_Size 增大到一定程度,其确定的下降方向已经基本不再变化。

另外,太大的batch size 容易陷入 sharp minima, 泛化性不好。

  • 补充:

epoch和batchsize和iteration的关系?

同样的epoch数目,大的batchsize需要的batch数目减少了,所以可以减少训练时间。

具体:

 

  • 随着 batch_size 增大,处理相同数据量的速度越快。
  • 随着 batch_size 增大,达到相同精度所需要的 epoch 数量越来越多。

参考:

stack Overflow

谈谈深度学习中的 Batch_Size

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_31866177/article/details/96445370

智能推荐

女孩学医好还是学计算机好,女生选择学医好吗 学医有多累_weixin_39530288的博客-程序员秘密

医学类专业凭借其在就业上的优势,成了很多考生在选择大学专业时的热门选择。那么,女生选择学医好不好呢?学医累不累呢?下面和小编一起来看看吧!女生学医好不好医生救死扶伤,是很多人心中的天使,而且因为这个专业的特殊性,医学行业的工资待遇让很多人眼红,甚至后悔当初上学的时候怎么没有去学医,而且医生这个行业,是很好就业的,只要学得好,不管走到哪里,都可以谋得一份不错的工作。但是,毕业的学姐都说,女孩子千万不...

语言之争_mcai4gl2的博客-程序员秘密

Java和.Net选哪个?这是每一个菜鸟都必须要面对的问题。Java 可能是大多数程序员学习的第一个面向对象的编程语言。它最大的优势就是跨平台性。其实,在国内小型机当道的时代,Java 是唯一可以选择的开发语言,因为.net 根本不能在AIX 上运行。那么为什么国内以前会流行小机呢?这主要是中国人多,所以国内的网站对并发要求很高,所以很难用X86架构来支持高并发。其实,真正的原因是在国内以前软件开

verilog prbs_prbs verilog_weixin_42598864的博客-程序员秘密

赛灵思的prbs模块//------------------------------------------------------------------------------// File Name: PRBS_ANY.v// Version: 1.0 // Date: 6-jul-10//------------------------------------------------------------------------------///

计算器逆波兰式图解_扇贝壳儿的博客-程序员秘密

波兰式转逆波兰式首先是总体步骤首先需要分配2个栈,一个作为临时存储运算符的栈S1(含一个结束符号),一个作为输入逆波兰式的栈S2(空栈),S1栈可先放入优先级最低的运算符#,注意,中缀式应以此最低优先级的运算符结束。可指定其他字符,不一定非#不可。从中缀式的左端开始取字符,逐序进行如下步骤:1.若取出的字符是操作数,则分析出完整的运算数,该操作数直接送入S2栈2.若取出的字符是运算符,则将...

Java RSA 1024位加密 私钥加密公钥解密、公钥加密私钥解密8_蝈蝈噶蝈蝈噶的博客-程序员秘密

import org.slf4j.Logger;import org.slf4j.LoggerFactory;import javax.crypto.Cipher;import java.security.*;import java.security.interfaces.RSAPrivateKey;import java.security.interfaces.RSAPublicKey;import java.security.spec.PKCS8EncodedKeySpec;impo..

随便推点

html高度等于设备高度,HTML5:获取设备高度(HTML5: get device altitude)_weixin_31092081的博客-程序员秘密

HTML5:获取设备高度(HTML5: get device altitude)在我的HTML5页面中,我想检索设备的高度(我正在使用Chrome移动设备测试我的Nexus 5)。我读过一些原生的Android应用程序使用不同的方法,如压力传感器(如果可用)。 在HTML5中它是否可行? 你有其他建议吗?In my HTML5 page I would like to retrieve the a...

jQuery实现的简单分页功能的详细解析_lyuharvey的博客-程序员秘密

分页功能在项目开发中不可或缺,老司机操作起来就和呼吸一样简单,新手恐怕就会吃力一些。今天我回顾了一下具体的操作步骤,决定详细的分析一下每一步的实现目的及原理。我们会创建一个简单的json文件来模拟要从数据库请求的数据。分页应注意下面几点问题:1) 每页的条目数量,以下用show_per_page变量来表示2) 页数的统计,总页数/show_per_page就是...

丹佛斯变频器通过MODBUS转PROFINET网关与S7-1200PLC进行通信的步骤_西门子plc与丹佛斯变频器通讯实例_AAA_自动化工程师的博客-程序员秘密

丹佛斯变频器通过MODBUS转PROFINET网关与S7-1200PLC进行通信的步骤本案例是无锡耐特森Modbus转Profinet网关将丹佛斯变频器接入西门子1200PLC用到的设备为:西门子1200PLC一台,Modbus转Profinet网关一个,丹佛斯变频器一台。Modbus转Profinet网关配置方法:打开博图,新建项目并添加GSD文件。建立Profinet连接,设定Modbus转Profinet网关的IP地址和设备名称,IP要和Modbus转Profinet网关保持在同一网段。

opengl 2.0 相关知识_jiangdewei2012的博客-程序员秘密

windows本身自带的opengl不支持opengl2.0.  而且opengl网站也没有发布相关opengl2.0的库。opengl2.0的库是别的组织实现的,比如有glew、glee等都是实现了opengl2.0的。只需要使用这些库就可以使用opengl2.0. 下面以glew举例:http://glew.sourceforge.net/glew的下载有 source和bin

蓝牙技术的八大特点_蓝牙技术的特点_EVERSPIN的博客-程序员秘密

蓝牙是一种短距无线通信的技术规范,它最初的目标是取代现有的掌上电脑和移动电话等各种数字设备上的有线电缆连接。从目前的应用来看,由于蓝牙体积小和功率低等特点,其应用已不局限于计算机外设,几乎可以被集成到任何数字设备之中,特别是那些对数据传输速率要求不高的移动设备和便携设备。蓝牙技术的特点可归纳为如下几点.蓝牙技术特点(1) 蓝牙模块体积很小、便于集成:由于个人移动设备的体积较小,嵌入其内部的蓝牙芯片体积就应该更小。(2) 低功耗:蓝牙设备在通信连接状态下,有四种工作模式——激活模式、呼吸模式、保持模式和

推荐文章

热门文章

相关标签