随机梯度下降是训练深度学习模型的主要方法。
梯度下降有三种主要的的方法,具体使用哪一种要视情况而定。
在这篇文章中,你会了解一般情况下你该选择使用何种梯度下降,以及如何配置它。
读完这篇文章后,你会知道:
让我们开始吧。
对于小批量梯度下降以及如何配置批量大小的入门级介绍
照片来自Brian Smithson,保留相关权利。
本教程分为3个部分; 他们是:
梯度下降是在寻找机器学习算法(例如人工神经网络和逻辑回归),的权重或系数时常用的优化算法。
它的工作原理是:让模型对训练数据进行预测并利用预测误差来修改模型,使得训练误差减小。
该算法的目标是找到使得模型在训练数据集上的误差最小的模型参数(例如系数或权重)。它将模型沿误差梯度或斜率下降的方向移动,直到最小误差值,与此同时更新模型。因此,将算法命名为“梯度下降”。
下面的伪代码总结了梯度下降算法:
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等)的内存要求的功率。
批量大小是学习过程中的一个滑块。
技巧1:32可能是一个好的批量大小的默认值。
... 【批量大小】通常选择在1到几百之间,例如:【批量大小】 = 32是一个很好的默认值,大于10的值发挥了矩阵-矩阵积对于矩阵-向量积提速优势。
技巧2:在调整批量大小时,查看不同批量大小的模型验证误差的学习曲线与训练时间是一个好主意。
...通过比较训练曲线(训练和验证误差与训练时间量),在其他超参数(除了学习率)被选定之后,可以与其他超参数分开进行优化。
技巧3:在调整完其他超参数后,调整批量大小和学习速率。
... 批量大小和学习率可能会与其他超参数稍有交互,所以两者都应该在最后重新优化。一旦选择了批量大小,一般可以固定,而其他超参数可以进一步优化(除了动量超参数)。
如果您正在深入研究,本节将提供更多有关该主题的资源。
在这篇文章中,你了解了梯度下降算法和你在实践中应该使用的变体。
具体来说,你了解到:
你有任何问题吗?
在下面的评论中提出您的问题,我会尽我所能来回答。