概述:
Full-batch 训练方法是一种在训练神经网络时使用的方法,其中每次更新模型参数都是在整个训练数据集上计算损失和梯度之后进行的。简单来说,它使用所有的训练数据来进行一次参数更新。这与其他训练方法如mini-batch或stochastic训练相对,后者只使用数据集的一部分或一个样本来更新参数。
Full-batch,全批量训练的特点包括:
- Inefficiency:
对于大型数据集,全批量训练可能导致梯度下降收敛缓慢,因为参数只在每个周期(epoch)结束时更新一次。每次参数更新都需要在整个数据集上计算损失和梯度,这可能非常耗时。 - Poor Scalability:
全批量方法在每次更新中都需要计算整个图的中间嵌入,这导致了巨大的内存需求,因此难以扩展到大规模图数据。当图数据非常大时,可能会因为内存限制而无法一次加载整个图。
Mini-batch Training: 其中数据集被分割成多个小批量(mini-batches)。每个小批量包含数据集的一部分。在每次迭代中,只有一个小批量的数据被用来计算损失和更新参数。这种方法可以更频繁地更新参数,从而可能加快收敛速度,并且可以更好地扩展到大数据集。
Stochastic Training (SGD): 在随机梯度下降中,每个样本或几个样本被用来立即进行参数更新。这意味着参数在每个数据点后都会更新,而不是在整个数据集处理完后更新。这通常会导致快速但波动的收敛过程。
Mini-batch training 和 Stochastic Gradient Descent (SGD) 确实非常相似,因为它们都是梯度下降的变体,用于训练神经网络。它们的关键区别在于更新参数所用的样本数量大小:
-
Stochastic Gradient Descent (SGD): 在最纯粹的形式中,SGD每次使用一个训练样本来更新模型的参数。这意味着对于训练数据集中的每个样本,你都计算梯度并更新模型的权重。这种方法的缺点是它可能导致梯度更新非常嘈杂,因此收敛过程可能非常不稳定。然而,它的一个优点是可以快速收敛,并且由于每次只处理一个样本,因此内存要求较低。
-
Mini-batch Training: 这种方法介于SGD和Full-batch训练之间。在Mini-batch训练中,数据集被划分为多个较小的批次,每个批次包含多个样本(例如,32、64或128个样本)。每次迭代只处理一个批次,然后计算该批次的平均梯度来更新模型的参数。这种方法试图在嘈杂的SGD更新和缓慢的全批量更新之间找到平衡,通常可以提供更稳定的收敛,并且相对于全批量训练,可以更有效地利用内存。
因此,主要区别在于样本数量:SGD理论上每次更新只使用单个样本,而Mini-batch Training每次更新使用多个样本(但不是全部样本,与Full-batch Training相对)。