传统机器学习训练动辄几百个 epoch,但大模型预训练几乎默认只跑 1 个 epoch,数据只过一遍,多看几遍反而会学坏。这是一道反直觉的训练常识题。
一、先确认事实:传统的视觉模型、深度学习模型训练几百个 epoch 是家常便饭,但大型语言模型的预训练几乎清一色只跑 1 个 epoch,训练数据只过一遍不重复。为什么模型越大、数据越多,反而不能多训几遍?
二、原因一,数据量够大:预训练用的是万亿级 token,一遍已经够模型学的了。数据量大到一定程度,一遍下去模型就能充分学习语言规律和世界知识。重复训练意味着让模型再看一遍同样的数据,但该学的第一遍已经学了,再看不会增加新知识,只会让它记住而不是泛化。
三、原因二,多 epoch 过拟合:重复训练会让模型在训练数据上过拟合,验证集 loss 先降后升,出现拐点之后泛化能力反而下降。简单说,数据看太多遍模型开始死记硬背,对新数据的适应能力变差。这和传统机器学习的过拟合是一个道理,只是大模型的数据规模让这个拐点来得更早。
四、原因三,知识遗忘:多 epoch 的梯度更新方向,可能与保留已有知识的方向冲突,导致灾难性遗忘。模型每多看一遍数据,参数就被往一个特定方向多推一步,可能覆盖掉之前学到的东西。这也是为什么连续训练和多 epoch 训练都容易遇到知识遗忘问题。
五、但 1 epoch 不是铁律:SFT 监督微调阶段常用 2 到 3 个 epoch,因为 SFT 数据量小,需要多过几遍;甚至有研究把预训练的重复次数拉到远超 4 个 epoch,效果还在涨。这说明 1 epoch 是经验默认值,不是定理,数据质量、模型大小、训练策略都会影响最优 epoch 数。
六、实际怎么定:预训练默认 1 epoch,这是为了规避过拟合的经验选择;SFT 微调常用 2 到 3 epoch。具体多少要看验证集 loss 曲线,一旦开始上升就早停。关键是别盲目多跑——高质量数据过一遍,比低质量数据过十遍都强。
适合准备大模型训练岗面试的同学。