需要帮助理解Tensorflow线性回归中的批量大小



我目前正在参加谷歌机器学习速成课程。在本课程的特定部分中,我们将介绍线性回归在python代码中的实际应用。以下是相关代码(完整代码可在此处找到):-


my_feature = ([1.0, 2.0,  3.0,  4.0,  5.0,  6.0,  7.0,  8.0,  9.0, 10.0, 11.0, 12.0])
my_label   = ([5.0, 8.8,  9.6, 14.2, 18.8, 19.5, 21.4, 26.8, 28.9, 32.0, 33.8, 38.2])

learning_rate=0.05
epochs=100
my_batch_size= ? # Replace ? with an integer.
my_model = build_model(learning_rate)
trained_weight, trained_bias, epochs, rmse = train_model(my_model, my_feature, 
my_label, epochs,
my_batch_size)
plot_the_model(trained_weight, trained_bias, my_feature, my_label)
plot_the_loss_curve(epochs, rmse)

这里假定所有必需的库都包含在内,并且函数正在定义中(此处不感兴趣)。在上面的代码中,我在理解Hyperparameterbatch_size时遇到问题。它在ML Wiki中被描述为否。一批中的示例数。它与时期(迭代?)有关,因此N/Batch_size给了我们迭代次数(如果batch_size<N,则无法理解)。

在三个超参数中,我了解

  • Learning_rate作为负梯度增量值,指向低损耗区域
  • epochs作为示例(完整数据集)的处理次数
  • batch_size作为示例超集的子集合

请确认:-以上数据集的示例为{1.0, 5.0}

问题:-当批处理大小低于N时,示例究竟是如何处理的?

p.S.:-batch_size显然对结果输出有很大影响,因为在稍后的练习中,我们将对17000个示例执行回归。当batch_size为30时,我们得到的RMS误差为100+,但当batch_size为17000时,RMS误差为1000+!!

Fom machinelearningmastery.com

批量大小是在更新模型之前处理的样本数。时期的数量是通过训练数据集的完整通过次数。

让我解释一下。

正如您可能已经了解到的,梯度下降可以用于更新训练参数。但是,为了获得更新量的准确值(计算梯度),该算法可以查看多个数据样本的误差。此选定样本集的大小称为批次大小。

至于问题:

通常的情况批量大小低于N(我假设N=数据集大小)。通常,从数据集中随机选择一组大小为batch_size的样本。该过程的其余部分与batch_size等于N时相同:找到误差的导数,然后更新训练参数以使误差最小化。

至于大批量与小批量的影响,需要权衡使用GPU进行训练时,较大的批量大小可能很有用。如果CCD_ 16=CCD_。然而,它可能会导致过拟合,因为它将是训练集的最佳解决方案。

另一方面,较小的批处理大小允许模型更好地泛化,这可能解释了您所观察到的情况。测试/验证集可能与训练集大不相同。此外,由于模型在计算整个数据集的误差之前就开始学习,因此较小的批量通常会更快。

我不知道你说的";请确认";,但可以随意问我是否遗漏了什么。

编辑1batch_size < N的解释

  • 我们有一条线路y = m*x + c
  • 如果你有10个样本,而batch_size是5,我们随机选择5个样本,并根据这5个样本获得mc的梯度(我不讨论如何计算梯度的细节。你可以在这里了解更好的想法)
  • 接下来,我们根据学习率和梯度更新m和c。现在,一批已经用于培训
  • 我们还有5个样品。现在,我们从剩下的5个样本中计算梯度。注意,这里我们使用更新的mc来计算梯度
  • 接下来,我们使用该梯度来再次更新mc

这是一个时代。当你继续执行更多的划时代时,这条线就越适合你的数据。

编辑2:解释为什么较低的批量大小似乎可以获得更好的结果。

batch_size = N和你取梯度时,它是同时使用整个数据集计算的。因此,您可以保证,无论发生什么,从数学上讲,mc都会接近其全局最优值,因为它总是可以看到整个数据集。这样做的问题在于,这只是针对训练数据。可能是测试数据与训练数据显著不同的情况。(查找术语"过拟合")。然而,当我们有较小的批量时,模型无法适应整个数据集。因此,它可能永远不会达到全局最优。这可能是有利的,因为它有助于模型更好地推广到它没有训练过的输入

另一个可能的原因可能是,对于较小的批量,模型比较大的批量更快地接近良好的估计。这是因为模型以更高的频率更新自己,因为它不必使用整个数据集来计算梯度。因此,如果你观察训练损失,最初较小的批量会有较低的损失,但最终,较大的批量模型可能会达到更低的损失。

这些可能是你观察到的原因,但事实并非如此。如果训练集是整个数据集的良好表示,则大批量可能工作得更好。或者可能只是模型需要更多的训练。

最新更新