灾难性遗忘是大模型在顺序学习新任务时,旧任务表现突然大幅下滑的现象。1989 年,McCloskey 与 Cohen 在连接主义网络实验里首次系统描述了它:网络学会新任务,旧任务几乎全忘。这里的"忘"不是记忆慢慢衰减,而是新训练改写了承载旧知识的参数,旧能力被新目标挤掉。
为什么学新的会挤掉旧的
大模型把预训练阶段学到的知识存在同一套参数里,新旧任务共用这些参数。学新任务时,优化器只按新目标调参数,不会特意避开对旧任务重要的参数;新旧目标要求的参数方向不一致,旧任务的解就被推离了。McCloskey 与 Cohen 的实验很直观:先教网络给数字加 1,再教它加 2,学会加 2 之后,加 1 的本事几乎归零。任务越是顺序学、数据越不重叠,遗忘越严重;如果新旧数据混在一起同时学,遗忘就轻得多。问题不在学习本身而在顺序,这也是"灾难"二字的由来。
和过拟合、幻觉不是一回事
灾难性遗忘常和两个概念混淆。过拟合是模型在训练数据上很准、换新数据就出错,问题出在训练集和新数据的落差;灾难性遗忘是旧任务本身变差,问题出在先后两次训练互相覆盖。幻觉则是模型一本正经地编造不存在的内容,根源在训练数据与生成方式,和"学新忘旧"不是同一机制。分清三者才能对症下药:过拟合靠更多样的数据和正则化缓解,幻觉靠检索与核实兜底,遗忘只能靠训练策略本身。
什么办法能让模型少忘一点
实践里最管用的办法是混着学:微调时把一部分旧任务数据掺进新数据里重放,模型就不会只顾新目标,这是工业界最常见的解法。其次是少动参数:LoRA 这类方法冻结原模型、只训练一小部分新增参数,旧知识被改写的幅度自然变小;全参数微调的效果上限更高,但遗忘风险也更大。还有一类是给重要参数加约束,比如 2017 年 Kirkpatrick 等人提出的弹性权重巩固(EWC),用额外损失项惩罚关键参数的大幅变动,把它拉回旧值附近。三种办法各有代价:重放要留旧数据,LoRA 能力上限受限,EWC 要先估计参数重要性。判断标准只有一个:新任务学会之后,旧任务的指标掉了多少。
只有当你要让同一个模型持续学新东西时才需要担心它:给客服模型补新产品知识、给代码助手加新语言、做多轮对齐训练。如果只是用现成模型聊天提问,遗忘与你无关;如果做微调,发布前务必在旧任务上也测一轮分数,掉得太多就加回放数据或换 LoRA。遗忘不是模型变笨,而是训练方式的代价,知道它存在,就能在"学会新的"和"保住旧的"之间做取舍。