灾难性遗忘,指的是神经网络在先后学习不同任务时,学会后面的任务,却把前面已经学会的东西大面积忘掉的现象。给一个已经训好的模型继续喂新领域的数据做微调,新任务的分数上去了,原来拿手的问答、分类或某种语言却明显变差,很多团队第一次做增量训练时都会撞上它。它不是模型变笨了,而是训练方式本身带着这个副作用。
新数据为什么会把旧参数冲走
模型的能力并不存放在某个单独的仓库里,而是分散在同一批参数上。继续训练时,优化目标只盯着新数据算误差,梯度会把参数往对新任务有利的方向推,没人替旧任务守住原来的位置。新旧任务用到的参数重叠越多、训练步数越长、学习率越大,旧能力被改写的幅度就越大。用一个比方说:同一张白板反复写新内容,又没有留出旧内容的区域,擦掉的往往不是边角,而是整片。
它和两种相近情况的边界
第一种是普通的泛化不好:模型对没见过的新题答错,那是旧能力本来就没学扎实,不叫遗忘。判断标准很硬:同一个旧任务,继续训练之前能做对,之后做不对,落差来自这轮新训练,才算灾难性遗忘。第二种是人脑的遗忘:人忘掉旧知识通常是渐进的,还会靠复习和联想补回来;神经网络的这种遗忘可以发生得非常突然,一轮训练就把某个任务的准确率打回接近随机的水平,所以才被冠上灾难性三个字。
哪些场景最容易踩中
持续给客服模型补新产品的问答,它可能慢慢答不好老产品;先训中文再猛训英文,中文的细腻表达会退化;机器人或自动驾驶模型换一个城市、换一批传感器数据继续训,旧环境下的判断也可能被冲淡。共同点是:训练是分批到来的,而每一批只按当前数据结算成绩。反过来,一次性把所有数据混在一起联合训练,通常不会出现这么剧烈的遗忘,这也解释了为什么大模型的预训练阶段很少谈这个问题,麻烦多出在后续的增量微调和持续学习阶段。
缓解办法,各管一段路
回放是最朴素也最常用的一招:新数据里掺一部分旧任务的样本一起训,相当于边学新课边复习旧课,代价是要保存旧数据并多花算力。正则约束类方法会给重要参数上锁,估算哪些参数对旧任务关键,训练时对它们的改动额外罚款,代表思路是弹性权重巩固。正交或隔离类做法则给新任务开辟相对独立的空间,比如只训少量新增参数、低秩适配模块或单独的适配器,主体参数少动,旧能力自然保得住。实际工程里往往是组合使用:小学习率、掺旧样本、只训适配层,再加一套旧任务的回归测试,每次更新后先验旧本事还在不在。
别把遗忘当成越少越好
还有一个常被忽略的点:适度的遗忘并不全是坏事。旧数据里有过时口径、错误标注和已经下线的业务规则,模型若一点都不肯放手,新知识反而学不进去。真正要防的是不可控的遗忘:在你不知情、没验收的情况下,重要能力被新训练悄悄冲掉。所以工程上的关键动作不是追求永不遗忘,而是每次增量训练后都用固定的旧任务测试集复测一遍,落差在可接受范围内才上线。