浅谈小批量梯度下降及批量配置
随机梯度下降是训练深度学习模型的主要方法。
梯度下降有三种主要的变体,使用哪一种可能会让人感到困惑。
在这篇文章中,你会发现你通常应该使用的一种渐变下降,以及如何配置它。
完成这篇文章后,你将知道:
- 什么是梯度下降,以及它是如何从高水平上发挥作用的。
- 什么是批次、随机和小批次梯度下降,以及每种方法的优点和局限性。
- 小批量梯度下降是首选方法,以及如何在你的应用程序上配置它。
我们开始吧。
教程概述
本教程分为3个部分,它们是:
- 什么是梯度下降?
- 三种梯度下降法的对比。
- 如何配置小批量梯度下降。
什么是梯度下降?
梯度下降是一种优化算法,通常用于寻找机器学习算法的权重或系数,如人工神经网络和Logistic回归。
它的工作原理是让模型对训练数据进行预测,并使用预测上的误差以减少误差的方式更新模型。
该算法的目标是找到使模型在训练数据集上的误差最小的模型参数(例如,系数或权重)。它通过对模型进行更改来实现这一点,这些更改将模型沿着向下移动的梯度或误差斜率向下移动到最小误差值。这就给该算法起了“梯度下降”的名字。
下面的伪代码草图总结了梯度下降算法:
model = initialization(...) n_epochs = ... train_data = ... for i in n_epochs: train_data = shuffle(train_data) X, y = split(train_data) predictions = predict(X, model) error = calculate_error(y, predictions) model = update_model(model, error)
有关更多信息,请参阅帖子:
三种梯度下降法的对比
梯度下降可以根据用于计算误差的训练模式的数量而变化;这反过来又用于更新模型。
用于计算误差的图案数量包括用于更新模型的梯度的稳定程度。我们将看到,在计算效率和误差梯度保真度的梯度下降配置中存在张力。
梯度下降的三种主要形式是批量、随机和小批量。
让我们仔细看看每一个。
什么是随机梯度下降?
随机梯度下降(通常缩写为SGD)是梯度下降算法的变体,该算法计算误差并更新训练数据集中每个示例的模型。
对于每个训练样本模型的更新意味着随机梯度下降通常被称为在线机器学习算法。
上行空间
- 频繁的更新可以立即洞察模型的性能和改进速度。
- 这种梯度下降的变体可能是最容易理解和实现的,特别是对于初学者。
- 增加模型更新频率可以更快地学习某些问题。
- 噪声更新过程可以允许模型避免局部极小值(例如早熟收敛)。
不利之处
- 与其他梯度下降配置相比,如此频繁地更新模型的计算成本更高,在大数据集上训练模型所需的时间要长得多。
- 频繁的更新可能导致噪声梯度信号,这可能导致模型参数并进而使模型误差跳跃(在训练时段上具有较高的方差)。
- 沿着误差梯度向下的噪声学习过程也会使算法很难确定模型的误差最小值。
什么是批次梯度下降?
批量梯度下降是梯度下降算法的一种变体,该算法计算训练数据集中每个样本的误差,但是仅在评估了所有训练样本之后才更新模型。
整个训练数据集的一个循环称为训练时段。因此,人们常说批量梯度下降在每个训练周期结束时执行模型更新。
上行空间
- 对模型的更新较少意味着这种梯度下降的变体比随机梯度下降的计算效率更高。
- 更新频率的降低会导致更稳定的误差梯度,并且在某些问题上可能会导致更稳定的收敛。
- 预测误差的计算和模型更新的分离使得该算法适合于基于并行处理的实现。
不利之处
- 较稳定的误差梯度可能导致模型过早收敛到较不理想的参数集。
- 训练时段结束时的更新需要在所有训练样本上累积预测误差的额外复杂性。
- 通常,批量梯度下降是以这样的方式实现的,即它需要存储器中的整个训练数据集并且对算法可用。
- 对于大型数据集,模型更新以及相应的训练速度可能会变得非常慢。
什么是小批量梯度下降?
小批量梯度下降是梯度下降算法的一种变体,它将训练数据集分成小批量,用于计算模型误差和更新模型系数。
实施方式可以选择对小批量上的梯度求和,这进一步降低了梯度的方差。
小批量梯度下降算法试图在随机梯度下降的稳健性和批量梯度下降的效率之间找到平衡点。它是深度学习领域中最常用的梯度下降算法。
上行空间
- 模型更新频率高于批量梯度下降法,具有更强的收敛性,避免了局部极小值。
- 批量更新提供了比随机梯度下降更有效的计算过程。
- 批处理既允许在存储器中不具有所有训练数据的效率,也允许算法实现的效率。
不利之处
- 迷你批次需要为学习算法配置额外的“迷你批次大小”超参数。
- 错误信息必须跨小批次的训练示例(如批量梯度下降)进行累积。
如何配置小批量梯度下降
对于大多数应用,特别是在深度学习中,小批量梯度下降是推荐的梯度下降的变体。
小型批处理大小(通常称为“批处理大小”,简称为“批处理大小”)通常根据执行实现的计算体系结构的一个方面进行调整。例如适合GPU或CPU硬件(如32、64、128、256等)的存储器要求的2的幂。
批量大小是学习过程中的一个滑块。
- 较小的值提供了一个学习过程,该过程以训练过程中的噪声为代价快速收敛。
- 较大的值给出了一个缓慢收敛的学习过程,并精确估计了误差梯度。
提示1:批处理大小的较佳缺省值可能是32
…[批次大小]通常在1到几百之间选择,例如[批次大小]=32是较好的默认值,大于10的值利用矩阵-矩阵乘积相对于矩阵-矢量乘积的加速比。
所给出的结果证实,在给定的计算成本下,在广泛的实验中,使用小批量可以获得最好的训练稳定性和泛化性能。在所有情况下,批次大小m=32或更小(通常小到m=2或m=4)都获得了最佳结果。
提示2:在调整批大小时,最好用不同的批大小查看模型验证误差与训练时间的学习曲线。
…在选择了其他超参数(学习率除外)后,通过比较训练曲线(训练和验证误差与训练时间量),可以将其与其他超参数分开进行优化。
提示3:在调优所有其他超参数之后,调优批处理大小和学习率。
…[批量大小]和[学习率]可能会与其他超参数有轻微的交互作用,所以最终都应该重新优化。一旦选择了[批次大小],通常可以固定它,同时可以进一步优化其他超参数(如果使用了动量超参数,则除外)。
进一步阅读
如果你想深入了解,本节提供了更多有关该主题的资源。
相关文章
附加阅读。
- 维基百科上的随机梯度下降。
- 维基百科上的在线机器学习。
- 梯度下降优化算法综述。
- 基于梯度的深层建筑培训的实用建议,2012。
- 用于随机优化的高效小批量训练,2014。
- 在深度学习中,为什么不使用整个训练集来计算梯度呢?论Quora。
- 大规模机器学习的优化方法,2016。
摘要
在这篇文章中,你发现了梯度下降算法和你应该在实践中使用的版本。
具体地说,你了解到:
- 什么是梯度下降,以及它是如何从高水平上发挥作用的。
- 什么是批次、随机和小批次梯度下降,以及每种方法的优点和局限性。
- 小批量梯度下降是首选方法,以及如何在你的应用程序上配置它。