过拟合发生在模型具备足够的容量去记忆训练数据中的特定模式——包括噪声、异常值和偶然的相关性——而不是学习底层可推广的模式。从机械角度来看,你可以通过跟踪训练过程中的两条损失曲线来检测过拟合:训练损失和验证损失(在模型从未训练过的保留数据集上计算)。在健康的训练过程中,两条曲线会同时下降。过拟合表现为发散:训练损失持续下降,而验证损失趋于平稳甚至开始上升。这种差距意味着模型正在将容量用于记忆而非泛化。
几十年来,针对过拟合的经典防御手段已被不断优化,其中大部分仍适用于现代大型语言模型(LLM)的训练。Dropout 在训练过程中随机将一部分神经元激活值置零,迫使模型构建冗余表示而非依赖单一路径。权重衰减(L2 正则化)惩罚较大的权重值,阻止模型拟合狭窄且幅度高的模式。早停法意味着监控验证损失并在其停止改善时停止训练,即使训练损失仍在下降。数据增强——通过创建训练数据的合成变体——在不收集新数据的情况下有效扩展了数据集。对于语言模型,这可能意味着改写、反向翻译或上下文窗口策略,这些策略通过用不同的上下文呈现相同文本。
在大语言模型时代,过拟合表现出一些非显而易见的特征。在非常大的数据集上训练的非常大的模型,通常在预训练阶段处于“欠拟合”状态——它们可能需要更多数据或更多训练步骤,而不是更少。Chinchilla 缩放定律对此进行了形式化:在给定计算预算下,模型大小和训练 token 数之间存在最佳平衡,而大多数早期 LLM 相对于其参数数量在训练 token 数上过度训练了。在前沿规模的预训练中,过拟合非常罕见,因为数据集非常庞大。但在微调阶段,过拟合成为一个严重的问题,因为数据集通常小几个数量级。在几千个样本上对 7B 模型进行超过 2-3 个 epoch 的微调几乎总是会导致过拟合,症状也很明显:模型开始逐字重复训练示例,失去处理与训练格式不同的提示的能力,甚至可能在之前表现良好的通用任务上退化。
现代 AI 中最隐蔽的过拟合形式之一是基准测试过拟合,即训练数据偶然包含(或被刻意选择包含)与评估基准相似的问题。模型在基准测试中得分很高,但实际上并未真正获得底层能力。这与经典过拟合不同,因为模型对与训练集相似的数据泛化良好——问题在于基准测试衡量的是训练集附近的表现,而非真正的能力。这就是为什么该领域转向了保留评估集、污染检测和基于人类偏好的评估(如 Chatbot Arena),在这些评估中,测试问题事先未知,无法通过数据选择进行作弊。
对于从业者来说,最有用的思维模型是过拟合不是二元状态,而是一个连续光谱。一定程度的记忆是不可避免的,甚至是可取的——你希望模型知道巴黎是法国的首都,这是一个需要记忆的事实。问题出现在记忆挤占泛化时:模型回忆训练中的确切措辞,而不是充分理解概念以回答新问题。观察训练-验证损失差距、使用参数高效方法(如 LoRA,限制模型过拟合的容量)以及在真正分布外的示例上测试,是最佳的实际防御手段。