Batch详解
Batch_Size(批尺寸)是机器学习中一个重要参数,下文详细讲解Batch的意义以及相关概念的区别
1. 定义
- Iteration:表示1次迭代(也叫training step),每次迭代更新1次网络结构的参数
- Batch_size:1次迭代所使用的样本量,每跑完一个batch都要更新参数,这个过程叫一个iteration
- Epoch:1个epoch表示模型过了1遍训练集中的所有样本
相关衍生概念
- Full Batch Learning:将整个数据集作为1个batch输入到神经网络中进行训练被称为全数据集
- Online Learning:每次只训练一个样本,即batch_Size = 1,被称为在线学习
当Batch_size = n时,模型状态如下:
2. 基于Batch训练的优势
Batch的选择,首先决定的是梯度下降的方向,如果数据集比较小,完全可以采用全数据集(Full Batch Learning)的形式,这样做有 2 个好处
-
由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向
-
由于不同权重的梯度值差别巨大,因此选取一个全局的学习率很困难。 Full Batch Learning 可以使用Rprop只基于梯度符号并且针对性单独更新各权值。
然后实际的生产工作中,面对的数据量都较大,面对超大规模数据集,Full Batch Learning变得难以为继,主要有以下两个原因
-
耗费硬件设备,CPU与GPU容量难以加载超大规模数据
-
每更新一次参数都要把数据集里的所有样本都训练一遍,计算速度慢
在这种情况下,模型不得不需要选取一个固定的数据样本数量作为一次学习的输入,数量的大小即为Batch_size,其优点为
-
使得CPU或GPU满载运行,提高了训练的速度,大矩阵乘法的并行化效率提高
-
跑完一次 epoch所需的迭代次数减少,对于相同数据量的处理速度进一步加快
-
使得梯度下降的方向更加准确,引起训练震荡更小,梯度的方差表示为:
\[Var(g) = Var(\frac{1}{batch\_size}\displaystyle \sum^{m}_{i=1}g(x_i, y_i))= \frac{1}{batch\_size^2}Var(g(x_1, y_1)+g(x_2, y_2)+...+g(x_{batch\_size}, y_{batch\_size})) \]增大batch_size的大小可以使得梯度方差的大小减小,直接使梯度更加准确
3. Batch_size大小的选取
Batch_size选取过大或过小都会降低模型的性能,只当选择合适的区间才能得到较好的结果
在一定范围内,增加batch_size有助于收敛的稳定性,但是随着batch_size的增加,模型的性能会下降
ICLR 2017
1 表明大的batchsize会收敛到sharp minimum,而小的batchsize会收敛到flat minimum,后者具有更好的泛化能力。两者的区别就在于变化的趋势,一个快一个慢,如下图,造成这个现象的主要原因是小的batchsize带来的噪声有助于逃离sharp minimum。
个人建议
- NLP任务中从batch_size以128为分界线,向上(x2)和向下(x0.5)训练后进行比较测试,若向上更好则继续x2,反之亦然,直到结果不再提升
- 如果增加了学习率,那么batch size最好也跟着增加,这样收敛更稳定。
- 尽量使用大的学习率,因为很多研究都表明更大的学习率有利于提高泛化能力。如果真的要衰减,可以尝试其他办法,比如增加batch size,学习率对模型的收敛影响真的很大,慎重调整。
本文来自博客园,作者:晓柒NLP,转载请注明原文链接:https://www.cnblogs.com/happyNLP/p/16880664.html