最近在跑一些网络时发现,训练完的网络在测试集上的效果总是会受Batch_Size 大小的影响。这种现象跟以往自己所想象的有些出入,于是出于好奇,各种搜博客,大致得出了自己想要的答案,现写一篇博客记录一下。
在训练过程中,一般有三种方式来从数据集中抽取数据,更新参数。一种是取所有的样本算出梯度(Full Batch Learning),另一种是每次迭代只取一个样本进行更新,也即在线学习(Online Learning),取Batch_Size = 1,还有一种是批梯度下降法(Mini-batches Learning)。对于取全数据集的方式来说,其确定的梯度下降方式代表样本总体,因此能最准确地朝着极值方向更新。但由于深度学习常用的数据集往往是海量的,所以采用全数据集下降的方式通常难以实现。而在线学习的方式则是每次训练只取一个样本,这样的训练方式往往会导致梯度更新的方向不那么准确。而批梯度下降就是前面所述两种方法的折中的方式,即每次迭代取一部分样本进行更新。我们下面讨论的就是使用批梯度下降方法设置Batch_size的情况。
那么Batch_Size究竟取多少最好呢?首先来说说Batch_Size对收敛速度的影响。一般来说,增大Batch_Size,所带来的训练时的标准差并不是线性增长的,比如训练一个样本的标准差为σ,那么取Batch_Size=n所带来的标准差为σ/√n,而非σ/n。因此,如果采用多个训练样本来算梯度的话,其计算量是线性增长的,但标准差并不能线性降低。所以Batch_Size越大,其收敛所需的迭代次数会减少,但每次迭代的计算时间也会增多,总体来看的话,耗费的总时间反而比使用少量样本来训练要多。但是,由于我们跑网络的时候可以用GPU并行计算,所以在一定范围内增大Batch_size,跑一次iteration的时间其实是差不多的,因此适当增加Batch_size大小,能让网络更快收敛。
但是也不是说Batch_size越大越好,我们知道网络最终收敛的时候并不总是在绝对最小值区域,很多时候是陷入了局部最小值,特别是我们常说的“鞍部”。这时候,如果Batch_size调得较小的话,其每次迭代下降的方向并不是最准确的,loss是在小范围内震荡下降的,这反而有利于跳出局部最小值,从而寻找下一个loss更低的区域。还有一种说法,何凯明大神的论文Rethinking ImageNet pre-training也提到过,如果你的网络中使用了BN层的话,而BN层的计算在batch size较小时受batch size参数影响较大,batch size越小,参数的统计信息越不可靠,也会影响最终的效果。因此调小Batch_size可以有效防止陷入局部最小值,但是由于BN层的存在也会影响最终的效果,同时Batch_size调得过小也容易导致网络不收敛。所以在实际跑代码的过程中你就会发现,对于某些任务比如图像分割,调Batch_size是个很玄学的过程。。。
参考博客:
Batch_Size对网络训练结果的影响的更多相关文章
-
图像分割实验:FCN数据集制作,网络模型定义,网络训练(提供数据集和模型文件,以供参考)
论文:<Fully Convolutional Networks for Semantic Segmentation> 代码:FCN的Caffe 实现 数据集:PascalVOC 一 数据 ...
-
Pytorch半精度浮点型网络训练问题
用Pytorch1.0进行半精度浮点型网络训练需要注意下问题: 1.网络要在GPU上跑,模型和输入样本数据都要cuda().half() 2.模型参数转换为half型,不必索引到每层,直接model. ...
-
卷积网络训练太慢?Yann LeCun:已解决CIFAR-10,目标 ImageNet
原文连接:http://blog.kaggle.com/2014/12/22/convolutional-nets-and-cifar-10-an-interview-with-yan-lecun/ ...
-
如何绘制caffe网络训练曲线
本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/51774966 当我们设计好网络结构后, ...
-
Caffe-python interface 学习|网络训练、部署、測试
继续python接口的学习.剩下还有solver.deploy文件的生成和模型的測试. 网络训练 solver文件生成 事实上我认为用python生成solver并不如直接写个配置文件,它不像net配 ...
-
Pytorch 分割模型构建和训练【直播】2019 年县域农业大脑AI挑战赛---(四)模型构建和网络训练
对于分割网络,如果当成一个黑箱就是:输入一个3x1024x1024 输出4x1024x1024. 我没有使用二分类,直接使用了四分类. 分类网络使用了SegNet,没有加载预训练模型,参数也是默认初始 ...
-
Wide &; Deep的OneFlow网络训练
Wide & Deep的OneFlow网络训练 HugeCTR是英伟达提供的一种高效的GPU框架,专为点击率(CTR)估计训练而设计. OneFlow对标HugeCTR搭建了Wide & ...
-
MINIST深度学习识别:python全连接神经网络和pytorch LeNet CNN网络训练实现及比较(三)
版权声明:本文为博主原创文章,欢迎转载,并请注明出处.联系方式:460356155@qq.com 在前两篇文章MINIST深度学习识别:python全连接神经网络和pytorch LeNet CNN网 ...
-
小白也能弄得懂的目标检测YOLO系列之YOLOv1网络训练
上期给大家介绍了YOLO模型的检测系统和具体实现,YOLO是如何进行目标定位和目标分类的,这期主要给大家介绍YOLO是如何进行网络训练的,话不多说,马上开始! 前言: 输入图片首先被分成S*S个网格c ...
随机推荐
-
VR可以用做除游戏外的哪些地方
虚拟现实可以将你传送到平时不敢去的地方, 例如喜马拉雅山顶. 也可以将你带到人类几乎不可能到达的地方, 例如世界上最深处, 马里亚纳海沟.马里亚纳海沟最深处的水压可是达到惊人的110Mpa, 这个高压 ...
-
第二十四课:jQuery.event.remove,dispatch的源码解读
本课还是来讲解一下jQuery是如何实现它的事件系统的.这一课我们先来讲一下jQuery.event.remove的源码解读. remove方法的目的是,根据用户传参,找到事件队列,从里面把匹配的ha ...
-
前端开发中的一些chrome插件推荐
这篇博客推荐的都是谷歌chrome浏览器插件,理论上,与之相同内核的浏览器都能使用.由于是谷歌插件,所以在天朝的网络,你懂的! 红杏 专为 学者 .程序员.外贸工作者 打造的上网加速器.我们相信,上网 ...
-
The Twelve-Factor App 实践
The Twelve-Factor App <The Twelve-Factor App>定义了一个优雅的互联网应用在设计过程中,尤其是在设计SAAS服务时,需要遵循的一些基本原则.本文为 ...
-
5.4 TLP中与数据负载相关的参数
在PCIe总线中,有些TLP含有Data Payload,如存储器写请求.存储器读完成TLP等.在PCIe总线中,TLP含有的Data Payload大小与Max_Payload_Size.Max_R ...
-
keras-VGG16 猫狗分类器
keras 原理: keras系列︱图像多分类训练与利用bottleneck features进行微调(三)https://blog.csdn.net/sinat_26917383/article/d ...
-
【SQL】from a,b。表a 和b之间是什么关系?
1.select a.id from a,b……——>这里a和b用逗号隔开,a,b之间默认是inner join的关系.
-
android开发心得之知识的量变到质变
随着身边越来越多的人开始了尝试android开发,看着他们一点点学期 从nodepad++写代码 cmd 执行,到安装eclipse 和android SDK,仿佛看到了昨天的我一样,一样勤勤恳恳的学 ...
-
localhost,127.0.0.1 和 本机IP 三者的区别
localhost.127.0.0.1和本机IP的区别如下: 1.首先 localhost 是一个域名,在过去它指向 127.0.0.1 这个IP地址.在操作系统支持 ipv6 后,它同时还指向ipv ...
-
CDN的基本原理和基础架构
CDN基本原理 最简单的CDN网络由一个DNS服务器和几台缓存服务器组成: ①当用户点击网站页面上的内容URL,经过本地DNS系统解析,DNS系统会最终将域名的解析权交给CNAME指向的CDN专用DN ...