城南有家三十年的老面馆,老板艾师傅的红烧牛肉面是整条街的招牌。最近他时髦了一把,去学日式拉面。学成归来,徒弟一尝牛肉面差点哭出来——汤头咸了、面身软了、连那勺独家辣油都变了味。艾师傅挠头:我明明只是去学新菜,怎么连做了三十年的老味道都丢了?这件事,在 AI 圈有个响当当的名字——灾难性遗忘。大模型就像这位学新菜的老厨师:让它学会一个新任务,它往往顾此失彼,把之前辛苦训练的能力忘得一干二净。好在工程师们琢磨出了三套“护味心法”:给重要配方贴上“不许动”标签(EWC 弹性权重整合)、时不时回锅老菜(经验回放)、给调料变动设上限(正则化约束)。这套心法,就是今天要讲的持续学习。
对 AI 工程团队来说,掌握持续学习意味着模型上线后能边用边学、越用越准,而不是每学一个新技能就推倒重来——这是大模型从“会训练”走向“会成长”的必修课。
可视化演示
动态演示持续学习的核心机制,通过入门/进阶/实战/优化四种模式展示关键概念与交互流程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
持续学习:持续学习 持续学习概念与核心挑战 灾难性遗忘的成因与影响 核心机制可视化 持续学习整体架构与关键组件
1. 遗忘原理剖析
艾师傅学日式拉面为什么会把老配方冲掉?本质在于,他只有一块黑板记配方——所有菜品的盐、糖、火候都写在同一块黑板上。学新菜必须改黑板,一改就把老菜的数字覆盖了。神经网络也是同一块黑板:模型的所有知识都藏在同一组权重里,没有“分抽屉”的自觉。当它学新任务时,新知识硬生生写进旧权重,旧知识自然被冲得七零八落。
深度学习更新参数靠的是梯度下降。训练任务 B 时,梯度会顺着让 B 正确率升高的方向推权重。可这个方向往往和任务 A 需要保持的方向不一致:改动一批对 A 至关重要的参数,A 的损失就会嗖嗖往上涨。这就是灾难性遗忘的直接成因——不是模型“不想记”,而是新旧任务在参数空间里的“势力范围”发生了正面冲突。
数学上可以这样刻画:用 \\(\mathcal{L}_A\\) 表示旧任务 A 的损失。训练 B 之前,模型在旧参数下损失很低;训练 B 之后参数变了,如果旧任务的损失暴涨,就说明旧知识正在瓦解:
艾师傅的问题不是“不能学新菜”,而是“改配方时不知道哪些数字不能动”。要解决它,得先学会分辨参数的重要性——这正好引出我们的第一味解药:EWC 弹性权重整合。
- 旧任务损失函数 \\(\mathcal{L}_A\\)衡量模型在任务 A 上的表现,数值越小说明记得越牢,相当于老菜谱的“味道评分表”。
- 旧参数 \\(\theta_{\text{old}}\\)模型刚学完任务 A 时的那组权重,是“老菜谱”的完整记录。
- 新参数 \\(\theta_{\text{new}}\\)继续训练任务 B 之后被梯度更新得到的权重,相当于改写过的新配方。
- 远大于符号 \\(\gg\\)表示旧任务损失暴增,说明旧知识严重退化,是灾难性遗忘的数学信号。
2. 弹性权重整合
面馆老板请来一位调味顾问。她的方案又简单又聪明:给每味调料贴一张“秘方标签”,写清楚这味料对每道招牌菜有多关键。学新菜时,标签上“关键度”高的调料(比如牛肉面的盐)不许大动;无关紧要的(比如摆盘的葱花)随意调整。这就是 EWC(Elastic Weight Consolidation,弹性权重整合)的直觉——给每个参数打一个“重要度分”,学新任务时,重要参数动得越多,惩罚越重。
重要度分从哪来?答案藏在任务 A 的输出对参数的敏感度里:把一个参数轻轻拨动一点,任务 A 的损失变化越大,说明这个参数对 A 越关键。这个敏感度信息在数学上就是 Fisher 信息矩阵,它的每个对角线元素 \\(F_i\\) 就是第 \\(i\\) 个参数的重要度估计。Fisher 信息大的参数,相当于咸味在牛肉面里的地位——动一克都惊天动地。
EWC 把训练目标改写成“新任务损失 + 防遗忘惩罚”两项:
艾师傅的“秘方标签”贴到位后,盐和糖被稳稳锁住,汤头不跑味,日式拉面也学得成。这就是“弹性”二字的精髓:不是锁死,而是重要参数弹性受限、次要参数自由发挥。
- 新任务损失 \\(\mathcal{L}_B(\theta)\\)保证模型能学好新任务 B,相当于“学新菜的考核分数”。
- 平衡系数 \\(\lambda\\)控制保护强度,\\(\lambda\\) 越大,参数越不敢离开旧位置,新任务越难学。
- Fisher 信息 \\(F_i\\)第 \\(i\\) 个参数对旧任务 A 的重要度估计,相当于“秘方标签”上的关键度数字。
- 参数偏离量 \\(\theta_i - \theta^*_{A,i}\\)当前参数与任务 A 学完时参数之差,差值越大,说明旧知识被改得越厉害。
- 二次惩罚项 \\(\frac{1}{2}(\cdot)^2\\)偏离越远罚得越狠,让参数只能在旧值附近小范围移动,而不是被凭空限制在某个区间。
3. 回放重演策略
艾师傅学了日式拉面后,给自己定了个规矩:每周固定三天做老招牌牛肉面。这叫“回锅老菜”——哪怕没人教,亲手做一遍就是最好的巩固。机器学习把这招叫经验回放(Experience Replay):训练新任务时,把旧任务的样本混进训练数据,让模型“温故而知新”。
回放怎么落地?最朴素的是样本缓冲存储:划一块固定大小的缓冲区(比如几千条旧样本),训练任务 B 时,每次迭代从缓冲区和 B 的数据里各抽一批混合训练。代价是需要额外存储,而且旧样本往往涉及用户隐私,不能随便存。于是有了更高级的生成式回放——训练一个生成模型(如 VAE、扩散模型)来“凭记忆重塑”旧样本的分布,需要时现场生成,避免直接存原始数据。
无论哪种回放,训练时新旧数据混合,损失都由两项加权组成:
面馆的“回锅日”看着笨,却是最稳的保味手段。回放也一样:不依赖花哨数学,只要旧样本以合适比例反复出现,模型就不容易把它清空。它和 EWC 是黄金搭档——一边用弹簧锁住重要参数,一边用老题复习保持手感。
- 新任务损失 \\(\mathcal{L}_B(\theta)\\)学新任务 B 的主目标,保证新知识学得进。
- 回放样本分布 \\(\mathbb{E}_{(x,y)\sim\mathcal{D}_{\text{replay}}}\\)从回放缓冲(旧样本池)中抽样取的“老题”,代表旧任务的知识分布。
- 回放强度 \\(\beta\\)控制老题在训练中的占比,\\(\beta\\) 越大越重视旧知识,但太大也会拖慢新任务学习。
- 交叉熵损失 \\(\mathcal{L}_{\text{CE}}\\)衡量模型在老题上的预测与真实答案的差距,回放老题就是要让这个差距不增大。
4. 正则化约束
艾师傅的调味顾问又给了一条更简单的规矩:每次学新菜,任何调料的用量变化幅度不能超过 2 克。这比 EWC 的“分级锁”更省事——不管哪个调料、重不重要,整体变动都设个上限。对应到模型训练,就是正则化约束方法。
正则化方法的思路是:不单独判断哪个参数重要,而是从整体上约束参数别跑太远。最朴素的形式是 L2 参数范数约束:训练新任务时,把“参数相对旧位置的漂移量”作为惩罚项加进损失。进阶玩法是知识蒸馏:让新模型在旧任务上的输出尽量模仿旧模型(教师模型)的输出,用“软化的概率分布”把旧知识温柔地传递下来——就像老厨师手把手教徒弟“盐要分三次放”,而不是只丢一句“放 3 克”。
L2 参数约束的损失形式如下:
规矩虽粗,胜在省事。如果不知道每道菜的“秘方标签”(没算 Fisher 信息),那就先定个总则:调料变化别超过 2 克。老味道至少不会崩太多——工程上这叫“快速止血方案”,比什么都不做强得多。
- 新任务损失 \\(\mathcal{L}_B(\theta)\\)保证新任务能学会,是所有持续学习目标的共同地基。
- 参数漂移向量 \\(\theta - \theta_A^*\\)当前权重与任务 A 权重快照的差,反映“配方被改了多少”。
- L2 范数的平方 \\(\lVert \cdot \rVert_2^2\\)把漂移量平方求和,让大幅漂移付出远超小幅漂移的代价。
- 正则化强度 \\(\lambda\\)控制“限量”的松紧,\\(\lambda\\) 越大,参数越被钉在旧位置附近。
5. 工程落地要点
艾师傅的后厨管理升级了:每个菜系分灶台——川菜灶台专门做川菜,粤菜灶台专门做粤菜,学新菜时先看清楚这道菜归哪个灶台。模型领域这叫任务边界识别:训练和推理时都要知道“当前是哪一个任务”,才能选择对应的保护策略或输出头。没有任务 ID 的持续学习,就像不看菜就乱开火,新旧知识在同一个灶台里打架。
工程上持续学习要迈过三道坎。第一,任务边界怎么确定:数据是自然分批次到达的(在线学习)还是明确划分的(任务增量学习),决定了用 EWC 还是回放。第二,框架和超参怎么选:EWC 的 \\(\lambda\\)、回放的缓冲大小、正则化强度,都要在验证集上调,不能拍脑袋。第三,怎么量化“有没有遗忘”:常用的评估指标叫 BWT(Backward Transfer,后向迁移),它专门衡量学完新任务后,旧任务的表现相比它刚学完时掉了多少。
BWT 的计算公式如下:
灶台分清楚、火候有监控,艾师傅的后厨才敢同时经营川粤日三种口味。工程落地也一样:任务边界、超参调优、BWT 监控三件套齐了,持续学习才有资格从论文走进生产线。
- 任务总数 \\(T\\)模型依次学习的全部任务个数,比如先学 A 再学 B 再学 C,\\(T=3\\)。
- 最终准确率 \\(R_{T,i}\\)学完全部任务后,第 \\(i\\) 个旧任务重新测试的准确率,代表“老菜现在的味道”。
- 初始准确率 \\(R_{i,i}\\)第 \\(i\\) 个任务刚学完立刻测试的准确率,代表“老菜刚出锅的味道”。
- 对所有旧任务取平均 \\(\frac{1}{T-1}\sum\\)综合衡量所有旧任务的平均遗忘程度,避免只盯一个任务。
6. 前沿演进方向
后来艾师傅的店开进了米其林大饭店,后厨更气派了,可困扰没消失——大模型学新东西照样会忘。好消息是,大模型时代有了更省力的“加菜”方式:不动整本菜谱,只在关键工序上贴一张小纸条。这就是参数高效微调,LoRA(Low-Rank Adaptation,低秩适配)是其中的代表——把原本巨大的权重矩阵 \\(W\\) 冻住,只训练一个低秩增量 \\(\Delta W = BA\\),每个新任务只是多了一张小小的“味型卡”。
LoRA 与持续学习天然契合:每个任务训练一份轻量增量,老任务的增量不删,新任务的增量互不干扰;配合回放或蒸馏,还可以进一步防止增量之间的相互污染。大模型的持续学习正在从“改全部参数”走向“只改一小撮参数 + 记忆库管理”。
LoRA 的前向计算表达式如下:
米其林后厨的“纸条哲学”是:老菜谱不动,新菜法以小博大。持续学习的终极愿景,是让大模型像艾师傅一样——开三十年馆子,学一百道新菜,招牌味道一滴都不丢。这正是终身学习(Lifelong Learning)的方向:模型不是学一次就毕业,而是用一辈子、长一辈子。
- 原始输出 \\(Wx\\)冻结的大模型权重 \\(W\\) 对输入 \\(x\\) 的映射,承载着海量通用知识,训练中一动不动。
- 低秩增量 \\(\Delta W x = BAx\\)新任务专属的小增量,其中 \\(B\\in\\mathbb{R}^{d\\times r}\\)、\\(A\\in\\mathbb{R}^{r\\times d}\\),秩 \\(r\\) 远小于维度 \\(d\\)。
- 秩 \\(r\\)控制增量参数的规模,\\(r\\) 越小参数越省,但表达新任务的能力也越受限。
AI 应用场景
推荐系统持续更新
阶段:在线学习 / 增量部署
解决的问题:传统推荐模型每周全量重训一次,耗时耗钱;只拿新数据增量训练,大促期间的强信号又会覆盖用户平日的品类偏好,导致“学了双十一,忘了日常”。
具体案例:某电商平台在大促结束后,日常场景推荐点击率下降 18%。引入 EWC 锁定用户长期兴趣参数,同时用回放缓冲保留最近 30 天的历史交互样本,新行为数据实时更新后,日常推荐指标回升了 12%,大促知识也没有丢失。
智能客服知识迭代
阶段:模型知识更新(大模型微调阶段)
解决的问题:客服大模型升级时,新旧知识在参数空间打架——学了新产品 FAQ,老产品话术被新参数覆盖,用户问老问题就开始“胡说八道”。
具体案例:某银行客服模型引入新理财产品知识时,采用“回放旧对话语料 + 知识蒸馏”组合策略:旧语料以 3:7 比例混入新数据,同时让新模型在旧问题上的输出逼近旧模型。上线后新产品问答准确率达 90%,旧产品问答准确率从 74% 提升到 91%。
自动驾驶终身学习
阶段:持续数据流训练
解决的问题:自动驾驶车队跨城市部署,新城市的路况数据持续涌入。模型学会新城市的交通标志后,容易忘掉老城市的特殊规则(如潮汐车道、特定路口禁行)。
具体案例:某自动驾驶团队在增量训练中引入分任务 EWC + 生成式回放:旧城市数据不直接存储(保护隐私),而是用生成模型重建关键场景样本参与训练。验证结果显示,新城市驾驶性能提升的同时,老城市交通标志识别准确率保持在 98% 以上。
Python 演示
import torchimport torch.nn as nnimport torch.nn.functional as F class SimpleNet(nn.Module): def __init__(self, in_dim=64, hid_dim=32, out_dim=4): super().__init__() self.fc1 = nn.Linear(in_dim, hid_dim) self.fc2 = nn.Linear(hid_dim, out_dim) def forward(self, x): return self.fc2(F.relu(self.fc1(x))) def make_task(seed, shift): torch.manual_seed(seed) x = torch.randn(200, 64) w = torch.randn(64, 4) y = (x @ w + shift).argmax(dim=1) return x, y def train_model(model, x, y, saved=None, fisher=None, lam=0.0, steps=150): opt = torch.optim.SGD(model.parameters(), lr=0.05) for _ in range(steps): opt.zero_grad() loss = F.cross_entropy(model(x), y) if saved is not None and fisher is not None: reg = 0.0 for name, p in model.named_parameters(): if name in fisher: reg = reg + (fisher[name] * (p - saved[name]) ** 2).sum() loss = loss + lam / 2 * reg loss.backward() opt.step() def compute_fisher(model, x, y, iters=20): fisher = {} opt = torch.optim.SGD(model.parameters(), lr=0.01) for _ in range(iters): opt.zero_grad() loss = F.cross_entropy(model(x), y) loss.backward() for name, p in model.named_parameters(): if p.grad is not None: fisher[name] = fisher.get(name, 0.0) + p.grad.detach() ** 2 for name in fisher: fisher[name] = fisher[name] / iters return fisher def evaluate(model, x, y): pred = model(x).argmax(dim=1) return (pred == y).float().mean().item() if __name__ == "__main__": x_a, y_a = make_task(0, 0.0) x_b, y_b = make_task(1, 3.0) model_naive = SimpleNet() train_model(model_naive, x_a, y_a) acc_before = evaluate(model_naive, x_a, y_a) train_model(model_naive, x_b, y_b) acc_naive = evaluate(model_naive, x_a, y_a) model_ewc = SimpleNet() train_model(model_ewc, x_a, y_a) fisher = compute_fisher(model_ewc, x_a, y_a) saved = {n: p.detach().clone() for n, p in model_ewc.named_parameters()} train_model(model_ewc, x_b, y_b, saved=saved, fisher=fisher, lam=200.0) acc_ewc = evaluate(model_ewc, x_a, y_a) print("=========== 持续学习: 任务A遗忘对比 ===========") print("朴素微调后 任务A准确率: {:.2%} -> {:.2%}".format(acc_before, acc_naive)) print("EWC训练后 任务A准确率: {:.2%} -> {:.2%}".format(acc_before, acc_ewc))
loss = F.cross_entropy(model(x), y)标准分类损失,驱动模型学新任务reg = reg + (fisher[name] * (p - saved[name]) ** 2).sum()EWC 惩罚项:重要参数偏离旧值越大,罚得越狠fisher[name] = fisher.get(name, 0.0) + p.grad.detach() ** 2用梯度平方估计 Fisher 信息,衡量参数对旧任务的重要度saved = {n: p.detach().clone() for n, p in model_ewc.named_parameters()}保存任务 A 学习完毕的权重快照,作为旧知识基准train_model(model_ewc, x_b, y_b, saved=saved, fisher=fisher, lam=200.0)用 EWC 训练任务 B,λ 控制保护强度acc_naive = evaluate(model_naive, x_a, y_a)评估朴素微调后的旧任务准确率,直接看到遗忘的代价
常见误区
误区EWC 里的 λ 是保护强度的意思,那当然设得越大越好,反正旧知识重要,保护越强越不会忘。我直接把 λ 调到 10000 试试。
正解λ 越大,参数被锁得越死,新任务 B 就越学不进去。持续学习的本质是“新老兼顾”,不是“保老弃新”。λ=0 等于纯微调,疯狂遗忘;λ=∞ 等于只做旧任务,新任务白学。合适的 λ 应该让“新任务能学会”且“旧任务掉得少”达到平衡,要在验证集上朝 BWT 最接近 0 的方向调。就像艾师傅学新菜:盐罐子焊死确实不会跑味,但日式拉面也彻底学不成了。
为何常见:新手看到 EWC 惩罚项,本能觉得“保护=越大越好”,忽略了总损失里还有新任务损失这一半;而且 λ 的量级依赖损失尺度,直觉上很难判断。
误区回放策略不就是把旧数据全存下来,训练时混进去吗?那我硬盘大,全存不就行了?反正数据越多效果越好。真实业务里旧数据是海量的,全存既不现实,也有隐私合规风险(比如用户对话记录、医疗影像)。
正解工程上通常限制缓冲大小(几千到几万条),并用随机抽样或“最优化采样”——专门挑那些对防止遗忘最有价值的样本(比如模型最容易忘的困难样本)。更前沿的方案是生成式回放,用生成模型重塑旧样本分布,压根不存原始数据。回放的效果取决于“存哪批、每批多少、怎么混合”,不是多多益善。
为何常见:把回放的直觉理解成“背课文”,觉得背得越多越牢,忽略了存储成本和采样策略才是工程核心。
误区模型上线后,来一批新数据我就用这批数据继续训练,这不就是持续学习吗?我每天都在“持续”更新模型啊。
正解普通微调几乎没有防遗忘机制。新任务训练会把旧任务权重覆盖,典型表现是“学会新知识、忘光旧知识”,甚至出现准确率雪崩。持续学习的定义性特征,是有意识地在训练目标中加入防遗忘约束(EWC 的惩罚项、回放的旧样本、正则化的漂移上限)。微调是持续学习的“裸奔版”,不是持续学习本身。
为何常见:微调和持续学习表面上都是“接着训练”,很多人只看操作不看机制,于是把两个层次的概念混为一谈。
误区任务 A 学完之后,我把 Fisher 信息算出来存好,以后学所有新任务都用这一份,反正标着“重要度”嘛。
正解Fisher 信息刻画的是“某个参数对当前旧知识版图的重要度”。当任务序列不断变长(A→B→C),旧知识的版图在变,重要度分布也在变。一直沿用最早的 Fisher,后续任务的保护方向会失准。实践中常用 EWC 的在线版本:每学完一个任务,把新旧 Fisher 按衰减因子融合(例如 \\(F \\leftarrow \\gamma F_{\\text{old}} + F_{\\text{new}}\\)),让重要度估计始终跟得上知识版图的变化。
为何常见:EWC 的论文推导里 Fisher 是“学完任务 A 的静态量”,初学者被这个局部形式迷惑,忽略了它在一个长任务序列里需要滚动更新。
误区EWC 要逐参数算惩罚项,大模型动辄几百亿参数,这得算到猴年马月?所以持续学习对大模型根本没用。
正解大模型时代持续学习非但有意义,反而更刚需——微调一个 70B 模型学新知识,很容易把通用能力冲掉。逐参数的 EWC 在高维空间确实开销大,但工程上已有多种适配方案:参数高效的 LoRA 持续学习(只约束低秩增量)、冻结主干只训旁路、任务向量叠加存储、以及“书签式”管理多个增量矩阵。核心思路依然是“保护重点 + 温故知新”,只是换了个轻量载体。
为何常见:看到 EWC 公式里对每个参数求和,就下意识觉得大模型算不动,误以为整套技术在大模型时代失效。
面试题
Q1. “灾难性遗忘”最准确的含义是:
- A.训练数据被意外删除
- B.旧知识被新任务冲掉← 正确答案
- C.模型参数量超出显存
- D.新任务数据严重偏差
答案:B。灾难性遗忘指模型在学习新任务后,旧任务性能显著下降。它不是因为数据丢了或显存不够,而是新旧知识在参数空间冲突,新梯度覆盖了旧权重。就像艾师傅学完日式拉面,把牛肉面的盐量配方冲掉了一样。
Q2. EWC 中 Fisher 信息的主要作用:
- A.估计参数对旧任务的重要程度← 正确答案
- B.计算新任务的梯度大小
- C.决定学习率大小的分布
- D.压缩模型参数的存储量
答案:A。Fisher 信息衡量每个参数对旧任务输出的敏感度——参数拨动一点,旧任务损失变化越大,说明越重要,相当于“秘方标签”上的关键度。它不参与梯度计算,也不决定学习率或存储。
Q3. EWC 损失函数中 λ 设置过大的后果:
- A.旧任务遗忘速度加快
- B.新任务学习效果变差← 正确答案
- C.模型推理速度变慢
- D.Fisher 信息自动失效
答案:B。λ 控制防遗忘惩罚的权重。λ 太大,参数被牢牢锁在旧位置,新任务 B 的损失难以下降,表现为“学不进去”。它不会加快遗忘(只会防过头),也不影响推理速度和 Fisher 信息的计算。
Q4. 经验回放策略的核心做法:
- A.训练时混入旧任务样本← 正确答案
- B.测试时反复运行旧任务
- C.增加模型的隐藏层数
- D.把旧任务数据全部删掉
答案:A。经验回放的核心是“温故而知新”——训练新任务时,从旧样本缓冲区(或生成模型的伪样本)中抽样,与新任务数据混合训练,让旧知识不断被复习。它发生在训练阶段,与测试、网络结构、删数据无关。
Q5. BWT(后向迁移)衡量的是:
- A.新任务对旧任务的平均影响← 正确答案
- B.旧任务对新任务的平均影响
- C.模型参数量整体变化幅度
- D.每一次训练消耗的总时长
答案:A。BWT 把所有旧任务的“最终准确率 − 刚学完时准确率”取平均,专门回答“学完所有新任务后,旧知识被冲掉了多少”。负值越大遗忘越严重,这不是参数量或耗时问题。
Q6. 生成式回放相比真实样本回放的突出优势:
- A.不需要存储原始私有数据← 正确答案
- B.能够完全消除灾难性遗忘
- C.训练速度一定快十倍以上
- D.生成样本质量必然更高
答案:A。生成式回放训练一个生成模型(如 VAE、扩散模型)来重塑旧样本分布,训练时“现场生成”旧数据,因此不必保存原始样本,规避隐私和存储风险。它不能完全消除遗忘,速度和质量也不会凭空提升。
Q7. 大模型中 LoRA 持续学习的主要思路:
- A.冻结原权重只训练低秩增量← 正确答案
- B.每次训练都重新随机初始化
- C.仅用生成式回放解决遗忘
- D.把所有参数全量重新训练
答案:A。LoRA 把原始权重矩阵 W 冻结,只训练低秩分解增量 ΔW=BA,每个任务保存一份轻量“味型卡”增量。推理时叠加即可,老任务增量不删、新任务互不干扰,是参数高效持续学习的代表方案。
Q8. 以下哪些属于持续学习的常用防遗忘方法:
- A.EWC 弹性权重整合← 正确答案
- B.经验回放与生成回放← 正确答案
- C.正则化参数漂移约束← 正确答案
- D.梯度裁剪防止梯度爆炸
答案:ABC。EWC(参数重要度惩罚)、经验回放(混旧样本)、正则化(限制参数漂移)是持续学习的三大类主流方法。梯度裁剪只是防止梯度爆炸的训练技巧,与防遗忘无关——它解决的是训练稳定性,不是知识保持问题。
Q9. 关于 EWC 机制的正确描述:
- A.用 Fisher 信息估计参数重要度← 正确答案
- B.在损失中加入二次惩罚项← 正确答案
- C.需要保存旧任务完整数据集
- D.惩罚项限制参数大幅漂移← 正确答案
答案:ABD。EWC 用 Fisher 信息给参数标重要度,在损失中加入二次惩罚项限制参数漂移,因此不需要保存旧任务数据——这是它相比回放的一大优势。C 描述的是回放策略的特征,不是 EWC 的。
Q10. 衡量持续学习模型性能时常用的指标维度:
- A.新任务学习后的准确率← 正确答案
- B.旧任务知识保持程度← 正确答案
- C.前后任务正向迁移幅度← 正确答案
- D.每个任务推理时的鲁棒性
答案:ABC。持续学习的评估要同时看三个维度:新任务能不能学好(准确率)、旧知识有没有被冲掉(BWT)、以及任务间是否有正向迁移(FWT,前向迁移)。推理鲁棒性属于模型稳定性范畴,不是持续学习特有的评估维度。