跳到主内容

灾难性遗忘怎么防?回放与正则两条路

2026-10-18 发布 来源:我告诉你AI导航 阅读

大模型在旧数据上练出的能力,微调之后突然不好使了——问它原本会答的常识,开始胡说;让它写原本擅长的格式,写得不伦不类。这叫灾难性遗忘,根子是参数更新只优化了新任务的 loss,旧能力赖以生存的那些参数连接被悄悄改掉了。本文按机制层思...

大模型在旧数据上练出的能力,微调之后突然不好使了——问它原本会答的常识,开始胡说;让它写原本擅长的格式,写得不伦不类。这叫灾难性遗忘,根子是参数更新只优化了新任务的 loss,旧能力赖以生存的那些参数连接被悄悄改掉了。本文按机制层思路,讲两条主流应对路线。

遗忘是怎么发生的

先看遗忘的来路。模型的各项能力并不住在各自的「抽屉」里,而是共用同一套参数:语言流畅度、知识记忆、格式遵循,全搅在同一张网络里。微调的梯度只朝着新任务的方向推,旧能力依赖的连接被顺手改写,表现出来就是新能力涨一分、旧能力掉三分。任务跨度越大、学习率越高,这种改写越狠。

回放:把旧数据掺回来

第一条路是回放,也叫混合重放。思路很直白:微调时别只喂新数据,把一部分旧数据掺进来一起训。进来的是新旧混合的 batch,新样本教新任务,旧样本把模型往原来的行为上拉,出去的模型两边都不至于太差。掺多少旧数据是关键,掺多了新任务学不动,掺少了旧能力照样掉,实践中常用反复试验的方式定比例,思路和语料配比是怎么调出来的一致。好比复习不能只刷新题,也得回顾旧题;我们平时用 DeepSeek 和 Kimi 问同类问题时,也会刻意换着问法,防止自己只会一种问法。

生成式回放:拿不到旧料时

回放有个更讲究的版本叫生成式回放:旧原始数据拿不到或不便保存时,让基座模型生成一批「旧风格」的样本掺进去。进来的是一个提示模板和基座模型,出去的是一批近似旧分布的合成样本。这条路的好处是不依赖原始语料,坏处是生成样本本身带基座的分布,防遗忘的精度打折,筛选标准可以参考合成数据是怎么筛的里的循环设计。

正则化:拉住参数别乱动

第二条路是正则化。既然遗忘来自参数被改得太多,就在 loss 里加一项惩罚,拉住参数别偏离原位。进来的是新任务梯度和一个「距离基准」的度量,惩罚项按参数与微调前的差异计分,出去的更新量在「学新」和「别乱动」之间折中。常见做法是按参数重要性加权,重要连接动得少、次要连接动得多。好处是不用存旧数据,坏处是基准定得死,任务差异大时会被旧参数拖住,新能力上限受限。

三条路的取舍集中在旧数据、效果和代价上:

做法要不要旧数据效果代价与边界
回放要,旧样本得能保存新旧混训,两边都不至于太差,效果最稳掺多了新任务学不动,掺少了旧能力照样掉
生成式回放不用原始语料,要有基座和提示模板不依赖旧料,但防遗忘精度打折合成样本自带基座分布,只是近似旧分布
正则化不用改动小、无额外数据成本基准定得死,任务差异大时拖住新能力

两条路不是二选一。轻量微调用正则化就够,改动小、无额外数据成本;能力跨度大的微调靠回放打底,正则做辅助。参数高效微调方法本身也是防遗忘的一类间接手段——只训一小部分参数,天然破坏面小,这在微调的显存是怎么省的里也有提及。

还有一个常被忽视的因素:学习率。力度过大本身就是遗忘的加速器,预训练级的学习率跑微调,几百步就能把旧能力冲掉一大块。微调时学习率为什么比预训练小讲的就是这个力度账。要验证遗忘有没有发生,得靠覆盖新旧任务的评估集,看两头的成绩单;数据喂入顺序对收敛稳定性的影响,则可以看训练数据的顺序有影响吗。

  • 回放:新旧数据混训,掺多少靠反复试验,效果最稳
  • 生成式回放:拿不到旧语料时让基座造,精度打折
  • 正则化:loss 加惩罚拉住参数,不用存旧数据
  • 折中:回放打底、正则辅助,参数高效微调天然减损
  • 前提:学习率别超档,评估集要覆盖新旧任务

灾难性遗忘快问快答三则

  • 掺多少旧数据算合适?:没有通用比例,从一比一起步按评估集反馈调,新任务掉就减旧、旧能力掉就加。
  • 冻结大部分参数能防遗忘吗?:能减轻,冻得越多旧能力越稳,但可学的新东西也越少,是同一个天平的两头。
  • 正则化为什么有时不灵?:任务跨度大时,旧参数的基准会拖住新能力,这时候还得靠回放补真实旧分布。

反馈页面信息

请描述需要更正的地方,页面标题和网址会自动附上。

也可以发邮件至 [email protected]