首页 > 其他分享 >Batch详解

Batch详解

时间:2022-11-11 15:59:39浏览次数:69  
标签:训练 梯度 batch Batch 详解 Learning size

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_size128为分界线,向上(x2)向下(x0.5)训练后进行比较测试,若向上更好则继续x2,反之亦然,直到结果不再提升
  • 如果增加了学习率,那么batch size最好也跟着增加,这样收敛更稳定。
  • 尽量使用大的学习率,因为很多研究都表明更大的学习率有利于提高泛化能力。如果真的要衰减,可以尝试其他办法,比如增加batch size,学习率对模型的收敛影响真的很大,慎重调整。

标签:训练,梯度,batch,Batch,详解,Learning,size
From: https://www.cnblogs.com/happyNLP/p/16880664.html

相关文章