先说结论:持续学习(continual learning)里最头疼的灾难性遗忘(catastrophic forgetting),主流解法都建在同一个假设上------新旧任务在梯度上"打架"。但这个假设可能从一开始就偏了:忘掉的旧知识,往往不是被新知识"挤掉"的,是它自己从来没长成过"环",只是一条"线"。
主流在治什么
给不熟的同学快速对齐一下。灾难性遗忘是这么个事:你拿一个已经训练好的模型去学新任务,学着学着,它把旧任务忘得一干二净。
学术界的标准解法,大致三路:
- EWC(弹性权重巩固):给"对旧任务重要"的权重加一个二次惩罚,让它们在新训练里别动太多。
- 经验回放(replay buffer):留一小撮旧样本,新训练时混进去一起喂。
- 梯度约束:硬性限制新任务的梯度方向,别跟旧任务的梯度方向对着干。
三路都有效,但都盯着同一件事------新旧之间的"冲突"。它们的潜台词是:旧知识是被新知识"顶掉"的。
可这解释不了一个现象:同样是"旧知识",有些模型忘得飞快,有些却能扛住十几个任务的连续训练。如果只是"冲突",为什么有的扛得住、有的扛不住?
忘和忘不掉,差在结构
换个角度看,记忆这东西,有两种形态:
一条线。 知识点 A 串着 B,B 串着 C,一个接一个,排成一串。整条线的稳定性,全靠最前面那个头撑着。新任务一来,从 A 那里一推,整串就散了。为什么?因为每个知识点只有一个"上家",上家一乱,下游全塌。
一个环。 A、B、C 互相记得对方,绕成一圈。A 忘了点什么,B 提醒它;B 断了,C 补上。这个结构不靠某一个点撑着,靠的是点与点之间互相兜底。缺一块,别的地方能补回来。
学新忘旧的那部分知识,多半是"线";能扛住十几年不动的,多半是"环"。
映射回模型:什么是"环"
把"线 vs 环"翻成模型的语言,成环的记忆有三个特征,缺一不可:
一,互相记得,不是单向惩罚。 EWC 给重要权重加惩罚,是"单方面按住它别动"。但真正的稳固,来自权重之间的相互约束------这个参数约束那个参数,那个参数回头又兜住这个参数。单向的惩罚是"线",双向的约束才是"环"。
二,绕一圈回到自己。 一条链从 A 走到 C 就断了,那是线。环的终点要接回起点,形成闭环。落到模型上,就是一组参数之间要存在回路式的依赖,而不是纯前馈的一路到底。
三,在同一段经历里一起记住。 一起被训练、一起被更新的参数,比孤零零各自更新的参数牢得多。因为它们是在"同一时间"刻进权重的,天然互相咬合。这对应到持续学习里,就是那些联合编码、共享表征的部分,比独立参数抗遗忘。
三样齐了,这段知识就成了个环。环越深(套的层数越多),新任务冲进来越冲不散它。成环的记忆,不用你天天护着它;成线的记忆,你一松手就散。
这跟你的工作有什么关系
如果你在干这几件事,这个视角值得你停下来想想:
- fine-tune 一个基座模型:别只想着"加正则防遗忘",先想想你的旧能力是不是本来就"一条线"------孤立的知识点,没跟别的能力长成环。线你补多少正则都是线。
- RAG / 知识注入:你把一段知识塞进系统,它跟系统里已有的知识之间,有没有形成"互相记得"的关系?还是只是堆了一堆孤立的事实?
- 多任务 / 持续学习:与其绞尽脑汁让新旧"别打架",不如想想怎么让旧知识"成环"------让参数之间互相约束、共享表征、形成回路。
主流方法在"冲突"层面打了几十年补丁,方向可能一开始就偏了:真正的问题不是"新旧打架",是"旧知识没长成环"。 成环,才是抗遗忘的根本。
把"泛化""耦合""自我""记忆"这些说不清的东西说清楚,是结构认知 一直在做的事。第一发现者:林小黑,完整推导见 gitee.com/samforce/st...。