深度学习和神经网络中的 Batch Size2025年6月25日 | 阅读 5 分钟 批量大小是深度学习和神经网络中的一个基本概念,它表示在训练过程中一次性完成的训练样本数量。具体来说,在神经网络训练过程中,模型在每次迭代都会执行两个主要过程:前向传播——即输入数据通过网络进行预测;以及反向传播,即预测与真实标签之间的差异被应用于梯度下降来修改模型的权重。 通常,数据集会被分成多个批次,而不是在处理完每个数据点(这很慢且噪声大)或处理完整个数据集(这很慢且占用内存大)后更新模型。批量大小是指在模型内部设置(如权重和偏差)被更改之前,运行的样本数量,这个数量可以根据每个批次的变化而变化。 批量大小的类型选择合适的批量大小是构建神经网络初期一项关键的优化工作。神经网络使用一系列的“训练轮次”(epochs)进行训练。每个训练轮次包括对所有给定训练样本的一次前向传播和一次反向传播。批量大小有多种类型。
在了解了批量学习的广泛特征后,让我们通过一个具体实例来分析决策对收敛速度的影响。 以下是合成数据集,其中包含三个目标类别和三个预测变量。目标类别与三个预测变量的最大值匹配且互斥。例如,观察值 [0.1, 0.2, 0.5] 将被分配为类别 3。类别 1 为 [0.9, 0.12, 0.5],以此类推。 Keras 库中的一个回调参数在 `fit` 时可用,可以在模型学习过程的特定阶段使用。通过使用此回调,可以保存模型训练过程中的历史数据。在我们的例子中,我通过使用 `LambdaCallback` 来保存第一层的历史权重信息。 模型本身具有一个输出 softmax 层和两个具有 9 个节点的 ReLU 激活层,是一个相当基础的分类器模型。 代码 现在,让我们来训练一个全批量模型,这将是我们的初始模型。在这种情况下,我们将 `batch_size` 设置为 1000,因为有 1000 个训练样本。训练 100 个训练轮次。 代码 输出 ![]() ![]() 我们发现,模型在训练过程中准确率从约 33% 提高到约 36%。 为了观察权重的行为,我们选择一个代表性权重;第一个节点上的第一个权重即可。这是该权重在训练过程中的表现。 代码 输出 ![]() 正如你所见,这条曲线是平滑的。如果我们只使用一个小批量呢?比如批量大小为 10? 代码 输出 ![]() ![]() 请注意,最终模型的准确率比我们最初的模型要高得多。使用批量大小为 10,该模型可以比每轮次只有一个梯度更新(全批量)时更频繁地(每轮次有 100 个梯度步进)改变其梯度。因此,即使我们进行了相同数量的往返(尽管这显然几乎可以肯定我们已经过拟合了),我们的权重最终也会更接近正确值。总的来说,我们学到了更多。 现在观察我们代表性权重的这个训练周期的轨迹。 代码 输出 ![]() 与全批量学习器相比,这条路径更加不规则、混乱且崎岖。但它仍然是合理的。我们可以预期,即使在我们选择的小的 10 个样本批次中,由于我们玩具数据集的简单性,大部分模型信息都会得到表达。我们可以预期,如果我们的数据集联系更复杂和混乱,这个小批量的性能将会下降,“权重图像”将变得更加分散。 结论小批量学习是大多数从业者的首选方法。在线学习主要是高级生产数据系统的领域,而全批量学习通常用于非常小的数据集。由于它在很大程度上依赖于数据,因此找出最佳批量大小的过程留给实验。 批量大小的选择对模型架构的差异影响很小,事实上,与你应该首先关注的许多其他模型优化相比,它的影响微乎其微。构建一个玩具模型,尝试不同的批量大小,选择一个似乎收敛最快的,然后继续前进,这是确定批量大小的公平方法。即使你决定更改模型,你最初选择的批量大小仍然是一个明智的选择。 下一主题机器学习中的基尼指数 |
我们请求您订阅我们的新闻通讯以获取最新更新。