深度学习基础之batch_size

背景知识: batch size是批量学习中才能用到的参数。统计学习可以分为在线学习、批量学习两类。也就是深度学习可以按照某种划分方式,分为在线学习和批量学习,我们平时用的比较多的是批量学习。具体可参考《统计学习与方法》第二版,p13.

在线学习:每次接受一个样本,进行预测,并不断重复学习模型;
批量学习:是一种离线学习方法(需要提前获取所有样本进行训练任务),需要对所有样本或者说是部分样本进行学习。

1. 为什么需要batch size?

一种答案是下边图片上这种说法,作为初学者,第一次看,可能会有点懵。

深度学习基础之batch_size_第1张图片

第二种答案如下所示:这种答案是不是还是有点绕?

在监督学习的批量方法中,多层感知器的突出权重的调整,是在训练样本集合的所有N个例子出现后进行的, 这就构成了训练的一个回合。批量学习的代价函数是有平均误差能量定义的。所以需要进行批量训练。

我的总结:

  为什么需要batch size,核心就是内存不够用。如果内存够用,就用采用全部样本的误差,进而可以计算出待优化参数的最优梯度方向,也就是全局最优的梯度方向。但,实际情况中,数据量都非常大,显存不够用,所以需要batch的训练方式来进行训练。如果batch太小,梯度下降方向的随机性较大,模型难以稳定收敛(收敛速度慢),需要迭代很多次。所以batch size的选取一般都是选择一个合适的就可以了,既保证内存利用率高,也能保证模型快速收敛,达到一个平衡就可以了。
  另外,batch normal也需要批量的数据来求均方差,如果batch size为1,BN基本就不起做用了。

2. 增大batch size的好处(三点)

  1. 内存利用率提高了,大矩阵乘法的并行化效率提高。
  2. 跑完一个epoch所需迭代次数减少了,相对相同数据量的处理速度加快了
  3. 在一定范围内,一般增大batch size,其梯度下降方向就比较准,稳定收敛

3. 增大batch size的坏处(三点)

  1. 内存利用率提高,但是内存容量可能不够用(买大内存)
  2. 跑完一个epoch所需迭代次数减少,要想达到相同的精度,是不是要多训练几个迭代次数,那就要增加epoch,训练时间增加。
  3. batch size增加到一定程度,其下降方向难以变化,有可能陷入局部最优。(船大难掉头),除非batch为全部数据。

4. 调节batch size对训练效果的影响?

  1. batch size太小,模型表现效果不好(error飙升)
  2. 随着batch size的增大,处理相同数据量的速度越快。
  3. 随着batch size的增大,达到相同精度所需的epoch数量越来越多。
  4. 由于上述两种因素的矛盾,batch size增大到某个值时候,达到时间上的最优。
  5. 由于最终收敛精度会陷入不同的局部极值,因此batch size增大到某些时候,达到最终收敛精度上的最优。

5. batch_size为什么需要是2的倍数?

内存对齐浮点效率
选择批大小为 2 的幂的主要论据之一是 CPU 和 GPU 内存架构是以 2 的幂进行组织的。或者更准确地说,存在内存页的概念,它本质上是一个连续的内存块。如果你使用的是 macOS 或 Linux,就可以通过在终端中执行 getconf PAGESIZE 来检查页面大小,它应该会返回一个 2 的幂的数字。具体可以参考这篇文章。

参考资料

  • https://www.cnblogs.com/Wanggcong/p/4699932.html
  • https://cloud.tencent.com/developer/article/1358478
  • 《统计学习方法》李航

你可能感兴趣的:(深度学习入门,batch,深度学习,开发语言)