BatchSize是非常重要的超参数,它不仅影响训练速度,也影响模型精度。本篇来讨论如何选择BatchSize。

BatchSize是否越大越好?

BatchSize一般指同时代入训练模型的实例个数,最直接的经验是如果GPU显存不大,又设置较大的BatchSize时直接报错“cuda runtime error(2): out of memory”。

是不是只要机器性能允许,就要设置尽可能大的Batch size呢?同时训练多个实例比逐个代入单个实例训练速度又能提高多少?

下图为使用不同的batchSize,在LeNet上训练mnist数据的效果,使用的框架为Theano。

可以看到,使用较大的batchSize的确可以提速,但是batchSize大到一定程度后,效果并不十分明显。

从图中可以看到如果将所有数据全部代入一次迭代(左图),则在训练集上的代价函数下降比较平滑,如果切分成多个Batch,代价函数不一定是下降的。这是由于每一个Batch中数据的难度不同,造成了代价函数忽大忽小。

如何选择batch大小?

两种极端的情况是BatchSize大小为1,每次只训练一个实例,或者BatchSize大小等于所有训练集数据大小,即每次训练所有数据。但更多的时候BatchSize设置在二者之间。

batchSize较小时,抖动大,训练过程有很大运气的成份,可能某个实例将模型带偏了,防止被模型被带偏的方法是使用较小的学习率,这样即非并行处理,又使用较小的学习率,使得收敛变慢。

batchSize较大时,任务并行执行,训练速度快, 且大Batch正负样本更均衡可以有效更新BN层参数精度更高。代价函数也能相对比较稳定,平滑地下降。但是如果代入了所有数据后再调参,可能会使很多梯度相互抵消,调参也比较粗糙。如果不进行特殊处理,过大的BatchSize一将会损失模型精度。另外,较大的batchSize会使模型的泛化能力下降(generalization gap)。

如果遇到较大的数据集,一般需要切分成batch分批训练,对于较少的数据,也可以使用全部数据训练。当有足够算力时,选取BatchSize为32,64,128或更小一些的batch_size。算力不够时,在效率和泛化性之间做权衡,选择更小的batchSize。

在训练过程中,可以将batch_size作为超参数做多次尝试。另一方面,也可以在前期使用较大的学习率和较越BatchSize粗调,后期(比如论文实验/比赛最后)将BatchSize变小精调,并使用SGD优化方法,慢慢把Error磨低。

BatchSize是否只与速度有关?

BatchSize不仅与速度相关,如果模型中使用了Batch Normalization(BN)归一化方法,那么太小的BatchSize会影响模型效果,如果受算法或性能限制只能使用小的BatchSize,则建议在fine-tune时锁住BN归一化层,或者使用其它归一化方法(如Group Normalization)。

另外,BN归一化时的统计值针对每一Batch计算,而非对整个训练集计算,从而引入了噪声,当噪声在合理范围以内时,它能实现类似Dropout的效果,使模型更加健壮;BatchSize太小噪声太大,则使模型效果变差;如果BatchSize太大,统计值能有效地表示整体训练数据的统计数据,则无法产生类似Dropout的正则化效果。

BatchSize与Learning rate的关系

Krizhevsky提出,如果BatchSize加大,可以加大学习率,当BatchSize加大k倍,则学习也加大k的开根号位数,后来发现使用线性变换调节二者关系效果更好。用这种方法将AlexNet的BatchSize从128加大到1024精度只损失1%。但是太大的学习率又会在一开始使模型训练不稳定,解决该问题的方法是学习率warm-up。

batchsize和数据量设置比例_设置BatchSize相关推荐

  1. batchsize和数据量设置比例_1. 项目涉及技术

    1.1 Linux&Shell相关总结 1.1.1 Linux常用命令 序号命令命令解释 1top查看内存 2df -h查看磁盘存储情况 3iotop查看磁盘IO读写(yum install ...

  2. for循环数据量太大_中文文本分类roberta大力出奇迹之数据量大的问题

    问题描述: 笔者在文本分类场景中使用了roberta+pool+dense的三分类模型.采用预训练模型做项目的时候经常苦于数据太少,模型泛化性差,因此收集了1300W数据.在我尝试暴力出奇迹的时候,遇 ...

  3. batchsize和数据量设置比例_Keras - GPU ID 和显存占用设定步骤

    初步尝试 Keras (基于 Tensorflow 后端)深度框架时, 发现其对于 GPU 的使用比较神奇, 默认竟然是全部占满显存, 1080Ti 跑个小分类问题, 就一下子满了. 而且是服务器上的 ...

  4. java calendar 设置时区_设置calendar时区

    iOS - Swift NSTimeZone时区 前言 public class NSTimeZone : NSObject, NSCopying, NSSecureCoding NSTimeZone ...

  5. 设置网格_设置一个自动运行网格条件单

    如何设置一个能够自动运行策略的网格条件单呢? 首先我们可以选择一个标的(哪些是适合的,这个做相信在手动网格的朋友一定再清楚不过,咱们这里先跳过,下次再讲) 1. 选择好标的以后,输入代码 2. 设置好 ...

  6. cisco服务器设置步骤_设置您自己的邮件服务器的10个步骤

    cisco服务器设置步骤 A simple guide to setup your own mail server using MailCow, DigitalOcean and Docker 使用M ...

  7. sql 计算单行数据字段空值比例_如何利用工具,迅猛定位低效SQL? | 1分钟系列...

    <两个工具分析SQL死锁> <SQL空值带来的大坑> 两个案例分析,展现了MySQL性能分析工具explain的强大. <同一个SQL语句,为啥性能差异咋就这么大呢?&g ...

  8. python读取大数据量xml_[C#]_[使用微软OpenXmlSDK (OpenXmlReader)读取xlsx表格] 读取大数据量100万条数据Excel文件解决方案...

    1.OpenXmlSDK是个很好的类库,可惜只能通过C#调用,C#的童鞋又福气了. 2.服务端程序由于没法安装office,所以这个对asp.net网站来说是最理想的库了.需要.net 4.0版本以上 ...

  9. Mybatis-plus 大数据量数据流式查询通用接口

    文章目录 一.案例需求 二.使用案例: 2.1. 自定义查询接口 2.2. 逻辑处理类 2.3. 调用案例 2.4. 具体逻辑处理案例 三.企业案例 3.1. key名称获取 3.2. 逻辑类测试 3 ...

  10. Java操作百万数据量Excel导入导出工具类(程序代码教程)

    Java操作百万数据量Excel导入导出工具类(程序代码教程): # 功能实现1.自定义导入数据格式,支持配置时间.小数点类型(支持单/多sheet)(2种方式:本地文件路径导入(只支持xls.xls ...

最新文章

  1. 虚拟化 - 每天5分钟玩转 OpenStack(2)
  2. LeetCode-175. 组合两个表(SQL语句中的LEFT JOIN)
  3. 目标检测--Spatial pyramid pooling in deep convolutional networks for visual recognition(PAMI, 2015)
  4. 极路由2 root及校园802.1x拨号经验帖(西南校园)
  5. 目标检测——从RCNN到Faster RCNN 串烧
  6. 九度OJ 1437 To Fill or Not to Fill -- 贪心算法
  7. c#简单类的继承【C#】
  8. Java检查字符串是否包含中文字符
  9. hutool 读取扩展名文件_如何快速的搜索文件,Everything使用技巧
  10. session超时以及销毁
  11. Python学习日记-第十四天-面向对象练习
  12. cid unmatched [object Object] at view.umd.min.js:1 TypeError: Invalid attempt to destructure non-ite
  13. rails rjs select method help
  14. java验证字符是否为字母_Java程序检查字符是否为字母
  15. HTML学习之块级元素和行内元素的特征和区别(一)
  16. Labelme标注的json数据转化为coco格式的数据
  17. 【算法分析】Lucas–Kanade光流算法
  18. 超级攻略!Pandas\NumPy\Matrix用于金融数据准备
  19. TinyRTC DS1307 的使用
  20. 输电线路杆塔倾斜在线监测系统

热门文章

  1. python 飞机大战爆炸效果_Pygame飞机大战为什么飞机与敌机碰撞后不再有图片动态切换效果...
  2. 2019-2-14SQLserver中拼音查询数据
  3. 一枚前端UI组件库 KUI for React
  4. 美国可视化人体公开数据集下载
  5. %几.几//C语言(闲的没事,记录下)
  6. 什么是友情链接?友情链接的好处及写法(图文)
  7. 庄懂着色器_L13_特效篇
  8. teeth mirror牙小护牙膏让你唇红齿白,亮白笑容不是梦
  9. ubantu18-ROS环境下配置IMU(STIM300),含驱动下载安装与硬件配置。
  10. 微信小程序滑动验证拼图(有效果图)