神经网络中batch_size参数的含义及设置方法
本文作者Key,博客园主页:https://home.cnblogs.com/u/key1994/
本内容为个人原创作品,转载请注明出处或联系:zhengzha16@163.com
在进行神经网络训练时,batch_size是一个必须进行设置的参数。以前在用BP神经网络进行预测时,由于模型结构很简单,所以对的batch_size值的设置没太在意。最近在做YOLO这样的深度网络,模型结构本身比较复杂,且训练样本量较大,在训练时损失函数降得较慢。看网上有些文章说可以改变batch_size的值来提升训练效果,我尝试改变bz值之后发现确实有用,但对其中的原理依然不太懂,所以特地查了一些资料来搞明白这个问题,并在这里简单进行整理。
Batch一般被翻译为批量,设置batch_size的目的让模型在训练过程中每次选择批量的数据来进行处理。一般机器学习或者深度学习训练过程中的目标函数可以简单理解为在每个训练集样本上得到的目标函数值的求和,然后根据目标函数的值进行权重值的调整,大部分时候是根据梯度下降法来进行参数更新的。
为什么要引入batch_size:
如果没有引入batch_size这一参数,那么在训练过程中所有的训练数据直接输入到网络,经过计算之后得到网络输出值及目标函数值,并以此来调整网络参数使目标函数取极小值。批量梯度下降算法(Batch Gradient Descent)正是这样的原理,注意这里的batch和batch_size中的batch并无直接联系,当然此时也可以理解为batch_size的值恰好等于训练集样本数量。
那么这样做的缺点是什么呢?
首先,当训练集样本非常多时,直接将这些数据输入到神经网络的话会导致计算量非常大,同时对极端集的内存要求也比较高。
其次,当所有样本同时输入到网络中时,往往很难确定一个全局最优学习率使得训练效果最佳。
另外一种极端情况是:每次只读取一个样本作为输入,这种方法称为随机梯度下降算法(Stochastic Gradient Descent, SGD)。这种情况下,可以充分考虑每一个样本的特殊性。但是其缺点同样非常明显:
在每个训练样本上得到的目标函数值差别可能较大,因此最后通过求和或者求平均值的方法而得到的目标函数值不足以代表每个样本。也就是说,这种方法得到的模型对样本的泛化能力差。
为了对两种极端情况进行折衷处理,就有了mini batches这一概念。也就是说每次只输入一定数量的训练样本对模型进行训练,这个数量就是batch_size的大小。
这样做的优点主要有:
- 可以充分利用计算机的并行运算结构,提高数据处理速度;
- 考虑了一定数量的样本数据,可以比较准确得代表梯度下降方向
- 跑完一次 epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。
但是,batch_size的大小不能无限增大,如果取过大的batch_size,会导致每个epoch迭代的次数减小,要想取得更好的训练效果,需要更多的epoch,会增大总体运算量和运算时间;此外,每次处理多张图片时,虽然可以发挥计算机并行计算的优势,但是也要充分考虑计算机内存大小的限制。
另外,在对样本数据进行批量处理时还会产生另外一个问题:当我们采用样本增强技术或者训练样本中重复样本过多时,如果按顺序对输入样本进行批量,可能导致同一批数据相关性较高,即使采取了设置了batch_size值也只能代表某一小部分的数据,因此获取batch_size的数据时需要随机抽取。在实际中,可以通过对训练集样本进行shuffle来实现这一操作。
当然这里还有一个问题我还没搞明白,就是一般我们在选取batch_size的值时往往采取2的幂数,常见的如16,32,64,128等。取这些值是为了充分发挥计算机的数据处理能力,哪位大神能给讲一下其中的原因?或者给推荐一些相关资料来搞明白这个问题?
参考文献:
1. 深度学习训练过程中BatchSize的设置
3. 伊恩·古德费洛等,《深度学习》
神经网络中batch_size参数的含义及设置方法的更多相关文章
- [转载]linux下编译php中configure参数具体含义
编译N次了 原来这么回事 原文地址:linux下编译php中configure参数具体含义作者:捷心特 php编译参数的含义 ./configure –prefix=/usr/local/php ...
- ajax 方法的使用以及方法中各参数的含义
由于近来经常在项目中使用 ajax 这个函数,在工作之余自己查找了相关的资料,并总结了 ajax 方法的使用,以及方法中各个参数的含义,供大家学习参考使用 type: 要求为String类型的参数,请 ...
- Atitit 软件开发中 瓦哈比派的核心含义以及修行方法以及对我们生活与工作中的指导意义
Atitit 软件开发中 瓦哈比派的核心含义以及修行方法以及对我们生活与工作中的指导意义 首先我们指明,任何一种行动以及教派修行方法都有他的多元化,只看到某一方面,就不能很好的评估利弊,适不适合自己使 ...
- tcp/ip协议listen函数中backlog参数的含义与php-fpm的502 Bad Gateway
To understand the backlog argument, we must realize that for a given listening socket, the kernel ma ...
- 远程桌面Default.rdp 中各个参数的含义
存储在 Default.rdp 文件中的设置 默认情况下,将在“我的文档”文件夹中创建 Default.rdp 文件.以下 RDP 设置存储在 Desktop.rdp 文件中: desktopwidt ...
- 远程桌面Default.rdp 中各个参数的含义(转)
存储在 Default.rdp 文件中的设置 默认情况下,将在“我的文档”文件夹中创建 Default.rdp 文件.以下 RDP 设置存储在 Desktop.rdp 文件中: desktopwidt ...
- HTML Meta标签中的viewport属性含义及设置
两篇文章 第1篇文章 第2篇文章 http://blog.hexu.org/archives/1947.shtml 随着高端手机(Andriod,Iphone,Ipod,WinPhone等)的盛行,移 ...
- php与js中函数参数的默认值设置
php函数参数默认值设置: <?phpfunction test($val=3){ echo $val."<br/>";}test(11);test();?& ...
- redis info命令中各个参数的含义
Redis 性能调优相关笔记 2016年09月25日 15:42:04 WenCoding 阅读数:4844更多 个人分类: Redis数据库 info可以使用info [类别]输出指定类别内容i ...
随机推荐
- HTTP协议几个版本的理解
HTTP (HyperText transfer protocol) 超文本传输协议 Http是一个应用层协议,基于TCP协议(传输层)之上,规定WWW服务器 浏览器之间信息传递规范.使用的默认端口号 ...
- jenkins发送jemter邮件附件格式配置
原文:https://www.cnblogs.com/chenchen-tester/p/6930200.html build.xml <?xml version="1.0" ...
- IT行业常见职位英文缩写
1.PG Programer 程序员 2.AA ...
- 导出excel 各 cvs 的方法
public function orderExcelExport($data,$filename='simple.xls'){ ini_set('max_execution_time', '0'); ...
- MessagePack Java 0.6.X 可选字段
你可添加一个新的字段来保持可用性.在新字段中使用 @Optional 注解. @Message public static class MyMessage { public String na ...
- noi.ac NOI挑战营模拟赛1-5
注:因为博主是个每次考试都爆零垫底的菜鸡,所以此篇博客很有可能咕咕咕 (指只贴AC代码不写题解的......如果我真的不会做的话,就不能怪我了qwqwq) Day1 T1 swap 23pts 从一个 ...
- 灰度图像--图像分割 霍夫变换(Hough Transform)--直线
学习DIP第50天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan ,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发:https://gi ...
- Redis 4.x 5.x 未授权访问
环境搭建 5.0版本下载 wget http://download.redis.io/releases/redis-5.0.5.tar.gz tar xzf redis-5.0.0.tar.gz cd ...
- su: Authentication failure 的解决方法
su命令不能切换root,提示su: Authentication failure 原因是 没有设置过 root密码 sudo passwd root 会提示输入密码 重新输入密码 下次再su的时候只 ...
- Nginx-rtmp直播之业务流程分析
1. 综述 1.1 直播原理 使用 obs 向 nginx 推送一个直播流,该直播流经 nginx-rtmp 的 ngx_rtmp_live_module 模块转发给 application live ...