如何选定batch_size
在调参的过程中,batch_size这个参数是很多人最先定下的,而如何选定这个参数,绝对算得上是一门艺术。
1. batch是什么
这是一个最基本的概念,所谓batch即每一次传进模型的样本量。
那么,理所当然的,我们就有三种不同的思路:
- 可以一次将数据集中所有数据喂给网络
- 可以一次喂一个样本
- 每次喂一部分数据,喂多次
那么,哪一种方式比较好呢?
经过实验论证,绝大多数情况下,我们选择思路三来选定batch_size。
2. 选择范围
进一步的,batch_size选定在哪个范围才最好呢?
首先,我么要明白一点:batch_size绝不是越大越好!
盲目增大batch_size,会有很明显的缺陷:
- 尽管内存利用率提高了,但是内存容量很有可能会被撑爆,进而导致进程中短。
- 跑完一次 epoch(全数据集)所需的迭代次数减少,要想达到相同的精度,其所花费的时间大大增加了,从而对参数的修正也就显得更加缓慢。
- batch_size 增大到一定程度,其确定的下降方向已经基本不再变化。
3. 一些技巧
- batch_size 的值越大,训练(收敛)速度越快;batch_size 的值越小,训练(收敛)速度越慢。
- 一般情况下,batch_size 应该设置成2 ^ n。网上有人说是方便内存/显存分配,GPU在这2^n的条件下,速度会更快。
- batch不能太大,也不能太小。
综上所述:batch_size的推荐值是 32,64,128。