shartoo +

深度学习:batch_size的设置与影响

本文总阅读量
欢迎star我的博客

注意:本文根据知乎程引回答整理

为何需要batch_size参数

Batch的选择,首先决定的是下降的方向。如果数据集比较小,完全可以采用 全数据集(Full Batch Learning) 的形式。这样做有如下好处:

Full Batch Learning可以使用Rprop只基于梯度符号并且针对性单独更新各权值。 但是对于非常大的数据集,上述两个好处变成了两个坏处:

Full Batch Learning的另一个极端 Online Learning

既然 Full Batch Learning 并不适用大数据集,那么走向另一个极端怎么样?所谓另一个极端,就是每次只训练一个样本,即 Batch_Size = 1。这就是在线学习(Online Learning) 。线性神经元在均方误差代价函数的错误面是一个抛物面,横截面是椭圆。对于多层神经元、非线性网络,在局部依然近似是抛物面。使用在线学习,每次修正方向以各自样本的梯度方向修正,横冲直撞各自为政,难以达到收敛

batch_size

选取适中的batch_size

可不可以选择一个适中的 Batch_Size 值呢?当然可以,这就是批梯度下降法(Mini-batches Learning)。因为如果数据集足够充分,那么用一半(甚至少得多)的数据训练算出来的梯度与用全部数据训练出来的梯度是几乎一样的。 在合理范围内,增大 Batch_Size 有何好处?

盲目增大 Batch_Size 有何坏处

调节 Batch_Size 对训练效果影响到底如何?

这里跑一个 LeNet 在 MNIST 数据集上的效果。MNIST 是一个手写体标准库

batch_size

运行结果如上图所示,其中绝对时间做了标准化处理。运行结果与上文分析相印证:

caffe中batch size影响

caffe的代码实现上选取一个batch的时候似乎是按着数据库的图片顺序选取输入图片的,所以在生成数据库的时候切记要shuffle一下图片顺序。caffe中完成这一步的代码为

 $caffe_root/build/tools/convert_imageset -shuffle -resize_height=256 -resize_width=256

我的博客

观点

源码