LwF:没有旧图像时,怎样保留旧模型的行为
从软目标和温度,到预热、函数约束与领域增量改写
一句话总结
在新输入上蒸馏旧模型输出,以有限的行为约束减少遗忘;新旧域距离决定约束能覆盖多少旧知识。
LwF:旧数据没了,还能向谁学习
Learning without Forgetting 由 Zhizhong Li 和 Derek Hoiem 提出,最初发表于 ECCV 2016。本页阅读 arXiv 第三版的扩展稿,同时检查作者 MatConvNet 仓库。扩展稿增加了实验与分析,仓库仍保留早期数据配置;因此具体数字以本页注明的论文表格为准,不把两种版本混为完全相同的复现对象。
问题是一个网络已经学会旧任务,现在只能接触新任务数据。直接微调共享网络会使旧能力下降;冻结全部旧层又可能限制新任务学习。LwF 的折中是允许共享表示变化,同时要求它在新样本上尽量保持旧网络的输出。旧网络扮演教师,新网络扮演学生,保存的是函数行为的约束而非旧图像本身。
最容易误解的地方是教师看什么:它看到的是新任务图像,不是偷偷保留的旧任务训练集。假设旧任务识别动物,新任务识别室内场景,教师仍在室内图片上输出动物类别概率。这些输出可能不符合人类语义,却反映旧模型在这些输入附近的决策结构;方法希望保留这种结构,间接减少旧任务退化。
从硬标签到软目标,理解蒸馏
普通硬标签只告诉模型正确类别是哪一个;软目标给出各类别的概率关系。例如两个类别分别为零点六和零点三,说明教师认为它们都比剩余类别更相近。只保留概率最大的类别,会丢失这种相对关系。LwF 用软目标约束旧任务输出,同时用新任务真标签监督新输出。
模型可以拆成共享特征层、旧任务输出头和新任务输出头。旧任务与新任务不必有相同类别数,论文主要设定通过任务头区分不同输出空间。迁移到你的七分类跨场景学习时,可以设计共享七类输出头的蒸馏版本,但需要明确它是适配后的协议,而不是把原文多任务架构原封不动搬来。
温度调节让概率分布更平缓,使那些原本很小的概率也参与比较。它不是直接给图像加噪声,也不是把标签改成平均分布。教师和学生应使用相同温度;否则两者即使原始 logits 完全一致,也可能被损失错误地拉开。
原文新任务监督项的单样本写法;新任务标签 y 是真实标注,不能与旧任务教师预测混淆。
对应原文式(4)。q 是教师原始概率,T 为温度;原文采用 T=2。只要 q 由 softmax 得到,此变换等价于把教师 logits 除以 T 再做 softmax。
教学等价写法,用于解释学生端实现。z 是未归一化的输出分数;数值计算要先减最大值或直接使用稳定的 log_softmax,避免指数溢出。
原文式(3)的蒸馏交叉熵。教师 q 在当前阶段保持不变,不参与反向传播;学生 p 接受更新,旧任务输出头和共享网络都可受约束。
原文整体优化结构。lambda 控制旧行为保持程度,R 为权重正则。它不是把旧参数一律固定,而是约束在指定输入上的输出;相同输出可能对应不同参数。
教学恒等式。教师固定时 H(q) 是常数,最小化软交叉熵等价于最小化这一方向的 KL 散度。许多现代实现额外乘 T² 调整梯度尺度,本页不将该约定误称为原论文必须包含的项。
一次训练阶段究竟发生什么
原文 Figure 3 的算法先用旧网络计算新训练样本的旧任务响应,随后增加新任务参数。新头随机初始化时输出很差,如果立即让它的大梯度改动共享层,可能快速破坏已有表示。因此作者先做新头预热,让原网络暂时固定,只训练新增头。
预热完成后,联合优化共享层、旧头与新头。新任务标签要求模型学新知识,旧输出蒸馏要求它别偏离教师太多,二者需要权衡。因为旧头并非永远冻结,所以不能用“冻结旧分类器”一句话代替 LwF;真正保持旧知识的是输出约束与训练安排。
教师通常在阶段开始复制后保持冻结,也可以预先缓存新样本的教师输出。若缓存概率而训练时又随机改变输入裁剪,教师目标与学生实际输入不一致,需要明确增强策略。若采用在线教师前向,则要设置评价模式,防止 dropout 随机性和批归一化统计变化污染稳定目标。
所谓不使用旧训练数据,并不意味着完全没有额外存储。至少需要教师参数副本,或新数据上的旧输出缓存,还需要旧输出头。与存储原始旧样本相比,其隐私和容量特征不同;但不能省略这些开销而只报告学生模型参数量。
flowchart TD N[New task inputs] --> T[Frozen teacher] T --> Q[Soft targets] N --> F[Student encoder] F --> O[Old task head] F --> H[New task head] Q --> D[Distillation loss] O --> D H --> C[New task loss] D --> U[Update student] C --> U
原文实验怎样证明权衡
原文 Table I 中 ImageNet 到 CUB 的实验同时报告旧任务和新任务准确率。特征提取方案保持旧网络,旧任务分数较好,但新任务不如适应后的网络;普通微调提高新任务适应,却明显损害旧任务。LwF 处于两者之间,而且在这个设置中,新任务也略好于普通微调。
不要把联合训练结果当作同条件可实现的方法。联合训练能够访问旧数据,是帮助理解性能的参考;LwF 的设定不允许旧数据重访。若你的表格没有标注这种访问差异,读者可能误以为全部方法拥有相同信息,从而误读“超过某基线”的意义。
| 方法 | 旧 ImageNet | 新 CUB |
|---|---|---|
| 冻结特征 | 57.0 | 52.5 |
| 普通微调 | 50.9 | 57.0 |
| LwF | 54.7 | 57.7 |
| 联合训练 | 55.3 | 56.6 |
| 方法 | 旧任务 | 新任务 |
|---|---|---|
| LwF 有预热 | 54.7 | 57.7 |
| LwF 无预热 | 53.5 | 59.9 |
| 微调有预热 | 50.9 | 57.0 |
| 微调无预热 | 42.5 | 59.8 |
不利证据比口号更值得记住
第二张表说明移除预热可能提高新任务准确率,却同时伤害旧任务。是否更好取决于评价目标,不能只挑新任务那一列宣布胜利。原文 Figure 7 用损失权重分析旧新任务折中;实际研究最好保留这类二维结果,而不是把两个任务随意相加成一个不透明分数。
扩展稿还分析了差异较大的任务。ImageNet 到 MNIST 时,LwF 的旧任务准确率为四十九点八,而冻结特征保持约五十七点一。这支持作者提出的局限:新任务输入与旧任务相差很大时,用新输入约束旧函数可能覆盖不到旧决策边界,蒸馏并不能保证全面保留旧知识。
Figure 4 观察连续增加任务,Figure 5 分析新数据数量。它们提醒我们知识保持依赖输入覆盖范围和阶段长度。跟踪任务附录中的差异也没有达到显著水平,作者报告相关比较的 p 值约为零点七。因此不能把 LwF 写成对任何视觉任务都必然提升的通用定理。
作者源码:概率升温与稳定损失
作者仓库 lizhitwo/LearningWithoutForgetting 使用 MATLAB 与 MatConvNet,而不是 PyTorch。README 指出旧 Places2 版本已经被替换且代码未相应更新;这意味着先修环境并不能保证原数据设置仍可直接复现。入口说明指向 gridSearchPASCAL,路径需由 getPath 等配置处理,具体文件组织应按当前提交核对。
下面第一段将教师概率取温度倒数次幂并重新归一化,第二段在稳定的 softmax 中计算交叉熵及梯度。看见分母 temperature,应该联想到温度会改变梯度大小,这也是不同实现使用不同温度补偿时需要共同调整蒸馏权重的原因。
源码 cnn_customtrain 的默认权重衰减为零点零零零五,软目标损失实现支持多类与多标签两种模式。多类 softmax 假设类别互斥,多标签 sigmoid 则允许多个属性同时存在;你的表情基本类任务通常使用前者,不能因为都叫蒸馏就交换两种损失。
作者实现:处理教师温度:vl_nnsoftmaxdiff.m:75–85;固定提交 795176d49017。
if temperature ~= 1
switch opts.origstyle
case 'multiclass'
c = c .^ (1/temperature);
c = bsxfun(@rdivide, c, sum(c,3)) ;
case 'multilabel'
c_ = c .^ (1/temperature);
c = c_ ./ (c_ + (1-c) .^ (1/temperature)) ;
otherwise, assert(false, 'opts.origstyle not recognized');
end
作者实现:软交叉熵与梯度:vl_nnsoftmaxdiff.m:135–144;固定提交 795176d49017。
case 'multiclass'
% Cross-entropy for multiclass (categorical distribution)
if nargin <= 2 || isempty(dzdy)
% \mathcal{L} = - \sum_i { c_i * \log(softmax_i) }, but calculate in terms of x_safe is numerically better.
Y = sum(sum(sum(log(sumex) - sum(c .* x_safe,3),1),2),4) ;
else
% its derivative happens to be this...
Y = bsxfun(@times, softmax - c, dzdy) / temperature ;
end一周内可以完成的具体练习
先用一个三分类 logits 向量手算温度一与温度二的概率,记录最大的概率变小、次大概率相对增加的情况。然后令教师和学生完全相同,检查 KL 散度接近零;如果使用交叉熵,它应等于教师熵而不一定是零。把这一点写进测试说明,可避免把正确损失误判成无法收敛。
第二步复制一个小网络作为教师,所有教师参数关闭梯度,在同一批输入上让学生只更新一步。验收时对比教师参数哈希前后一致、学生参数有变化,并检查学生旧输出在 lambda 为零和较大值时的偏移。这个小练习直接证明你约束的是输出行为,而不是简单冻结学生。
第三步构造两个共享标签空间的表情场景。先完成第一场景基线,保存模型和固定评价清单;到第二阶段只使用第二场景训练样本。比较普通微调、冻结编码器与共享头蒸馏三组。明确这是面向域增量的教学改写,而非原文不同任务头实验的逐项复刻。
第四步做两项必要消融:是否预热,以及温度一与温度二。其余训练步数、基础权重和数据顺序保持一致。每个阶段后输出旧场景与新场景准确率,再查看哪些表情类别下降最多。若平均准确率相近而悲伤类损失很大,应在结论中保留这项退化。
验收文件至少包括 teacher/student 参数清单、一个蒸馏损失单元示例、阶段结果矩阵、训练时间和额外存储。能够回答“教师为什么要看新数据”“为什么交叉熵最小值不必为零”“为什么教师越强不等于域迁移越成功”,才算学会了可解释的 LwF 实验。
进一步练习:输出保持并不等于知识完全保持
假设教师面对新图像给出三个类别概率零点八、零点一五、零点零五。把温度设为二后,先分别开平方再归一化,而不是直接除以二。后者总和会变为二分之一,已经不是概率分布。你可以把这组输入作为固定测试例,检查温度函数输出非负、和为一,并且类别排序不改变。
函数约束只覆盖所用输入的位置。一个学生可以在全部新样本上与教师一致,却在没有出现的旧样本区域发生变化。二维玩具例子中,只在坐标轴附近取新样本,画出远离这些点的分类边界,就能观察这种欠约束。它解释了为什么蒸馏损失很小与旧任务准确率很高之间没有必然关系。
多次顺序蒸馏还可能积累教师错误。每一阶段把上一阶段模型作为教师,得到的是其已保留和已遗忘知识的混合;下一阶段无法从当前数据中恢复完全没有覆盖到的旧信息。因此阶段结果矩阵应该从第一阶段开始保存,不能只在最后检查一次平均分。
作者局限是新旧任务差异及输入覆盖不足。独立判断是,表情领域中的教师还可能把身份和背景当作旧任务线索,蒸馏会连这些错误关联一起保护。可以对新样本做背景遮挡或人脸裁剪对照,检查教师输出是否大幅改变,再决定是否需要更有选择的蒸馏,而不是一开始就增加很多损失项。
若要把该方法接入已有 ALMT,先确认你要保留的是连续情感分数还是离散类别分布。对回归输出不能直接套用分类温度公式;可定义教师学生分数的一致性损失,但那应标为你的回归改写,并验证极端情绪样本是否受到不合适的平滑。
保存教师输出时记录类别顺序尤其重要。两份模型都输出七个概率,但若悲伤和惊讶的列编号交换,张量形状检查仍会通过,蒸馏却会保护错误语义。把类别字典随检查点保存,并用固定样本验证列含义一致,是比增加训练轮数更优先的实现检查。
可执行研究记录与评价纪律
把阅读成果变成可检查的实验记录。先建立一张样本清单,每行至少包括样本标识、原始视频或说话人标识、类别、场景、训练验证测试角色。先检查这些标识的交集,再开始训练。视频切成不同短片,并不意味着它们在语义、人物或拍摄来源上相互独立;随机划分得到的高分也不能自动证明跨场景泛化。
所有比较都应固定输入帧数、预训练权重、数据增强、优化步数和评价脚本。先用一个种子验证数据流、梯度和保存恢复,再用预先约定的多个种子做正式比较。记录每个种子的结果,报告均值和波动,而不是只保留最高一次。若为了显存缩小模型或批量,把它写入兼容性实验说明,不把改动后的结果称为原论文的严格复现。
检查分类效果时,同时保存逐样本预测和混淆矩阵。总体准确率上升可能只是多数类别变好;逐类召回率能揭示少数表情被牺牲的问题。跨场景实验还要报告每个场景的指标,防止样本量大的场景掩盖小场景退化。一个漂亮的特征可视化只能辅助观察,不能替代独立测试集、明确指标和误差分析。
模型选择必须与最终测试分开。用验证集选择学习率、训练轮数和新增模块的强度,先写清选择规则,再运行最终测试;不要根据测试集反复挑选超参数。若研究设定禁止访问旧数据,就不能为了选择防遗忘系数反复查看旧任务测试结果。可以预先固定系数,或另行声明验证数据的可访问范围,让比较遵循同一规则。
每次改动只回答一个问题,保存配置文件、代码提交、随机种子、数据清单哈希和检查点路径。最后交付一页实验说明,按“问题、对照、改动、结果、解释、失败案例”组织。若结果没有提高,先确认机制是否确实生效,再判断假设是否错误;未运行的实验只能写成计划,不能填上看似合理的数字。本文表格均为原文报告或明确注明的教学计算,并非本机复现实测。
原文短引与证据入口
原论文与完整上下文。以下三个短引仅定位作者用语,解释与判断见上文:“Learning without Forgetting”;“knowledge distillation”;“warm-up”。
自己的解释与验收记录
写出一条输入到输出的链路、一个关键公式的含义,以及你完成的最小检查。笔记仅保存在当前浏览器,可从主站「我的学习笔记」导出。