一个“仿果蝇”的持续学习方法,在公平比较下站得住吗?

实验待证

配合仿真与实验探针的假设探索,等待更多证据或边界检验。

ℹ数字花园

🌿 什么是数字花园与思想演进?

遵循 Maggie Appleton 与 Andy Matuschak 的常青笔记理念:这里不是按时间沉底的流水账,而是持续修剪打磨的知识生态。文章按成熟度经历:

  • 🌱 萌芽 (Seedling): 发散灵感、读书摘录、开放猜想
  • 🌿 演进 (Budding): 结构渐明、初步代码推导、积极修正
  • 🌳 常青 (Evergreen): 逻辑闭环、持久经得起检验的基石
  • 🔬 实验待证 (Speculative): 结合沙盒与仿真探针的理论探索
浏览全站数字花园与笔记全景 →

项目代码与全部实验记录:https://github.com/meiluosi/fly-connectome-study(目录 ml-cl-audit/)

这一篇不造新方法,检验一篇已发表的结论。

FlyModel(Shen、Dasgupta、Navlakha,arXiv 2107.07617,后发表于 Neural Computation)用“随机稀疏投影 + 只保留最强的 5% 单元”这套果蝇蘑菇体的思路做类增量持续学习,称遗忘大幅减少,优于 EWC、GEM、BI-R。问题:用同样的数据和调过参的对手,这个结论还成立吗?

几个词:持续学习是让模型一批一批地学新东西,而不忘旧的;类增量是每个新任务带来新的类别,测试时要在所有见过的类别里选;灾难性遗忘是学了新的就把旧的覆盖掉;免回放是不保存旧样本。

1. 切入点:FlyModel 其实是类原型分类器#

FlyModel 的更新规则很简单:

FlyModel 的结构
FlyModel 的结构

每个类只有一个权重向量,学这个类时把该类样本的稀疏特征加到它上面,别的类的权重不动;预测时选与输入点积最大的类。也就是说,它是随机稀疏特征上的类原型分类器。

这带来两个后果:

  1. 它的“旧类不被覆盖”有相当一部分是构造出来的。各类权重互相独立,学新类根本碰不到旧类的权重。
  2. 论文的对手全是反向传播的网络(EWC、GEM、BI-R、普通网络),没有一个是同样特征上的免回放原型基线,比如最近类均值,或者带共享协方差的 SLDA。最自然的对手缺席了。

审计的主线:用同一套特征,补上缺席的对手。

2. 审计设计:基准、复现和对手#

  • 两个基准:MNIST-20(MNIST 加 FashionMNIST,10 个任务,每个 2 类,特征来自在 KMNIST 上训练的 LeNet5,84 维);CIFAR-100(25 个任务,每个 4 类,特征来自 ImageNet 预训练的 ResNet18,512 维)。
  • 先复现。 MNIST-20 复现了(最终准确率 0.707,论文约 0.75;10 类时 0.817 对论文约 0.86)。CIFAR-100 没有复现:32×32 输入得 0.340,224×224 得 0.508,论文约 0.41,被夹在中间。论文没写清特征的处理,所以这两种分别作为“弱特征”和“强特征”两个区间,只做相对比较。
  • 所有方法同一套特征、同一任务顺序、5 个种子。 调参用从训练集切出来的验证集,测试集不碰;每个方法有同样的调参预算,网格提前写进登记。
  • 对手:最近类均值(欧氏、余弦)、SLDA、纯类和点积、稠密对照、EWC、微调、小缓冲回放(200、1000 个样本)、离线上界。

隐层宽度实现为输入维数的 40 倍(3360、20480),论文是 3200 和 20000,略有出入,已记入偏离记录。

3. 结果:四个发现#

三个基准的最终准确率
三个基准的最终准确率

“最佳反向传播基线”按验证集选出:MNIST-20 是 ER-200(0.622),CIFAR-100 简单特征是 EWC(0.069),强特征是 ER-200(0.162)。

方法MNIST-20CIFAR-100 简单特征CIFAR-100 强特征
FlyModel(论文设定)0.7070.3400.508
FlyModel(验证集调参)0.7150.3400.540
SLDA(免回放)0.7600.4000.639
最近类均值(欧氏)0.6010.2730.533
回放 ER-1000(交错流)0.7610.2150.432
离线上界0.8720.4370.677

3.1 被免回放的 SLDA 超过#

三个基准一致,差距是 0.054、0.060、0.131。FlyModel 调参之后(0.715、0.340、0.540)也追不上。

需要说明:SLDA 要估计共享协方差并求逆,成本是特征维数的平方,不如 FlyModel 便宜;但它同样免回放、不用反向传播,也与样本顺序无关。更简单的最近类均值,在弱特征上低于 FlyModel(0.60 对 0.71,0.28 对 0.34),在强特征上追平甚至略高(0.53 对 0.51)。

3.2 “稀疏比稠密好很多”大半来自对照本身#

论文里用一个稠密对照说明稀疏编码的重要性。复现时的情况:

  • 登记的稠密对照(稠密特征加类和点积)下,FlyModel 的优势是 +0.56、+0.13、+0.07。
  • 论文式的另一种稠密写法(min-max)在三个基准上都直接掉到随机水平(0.049、0.010、0.010)。起初怀疑是权重饱和;但在 MNIST-20 上去掉截断后,稠密特征仍然很差(约 0.11),FlyModel 本身去掉截断反而掉到 0.48。问题不在饱和,而在“类和点积”这个打分规则在稠密特征上本来就不好用。
  • 探索性对照(看到结果后才加,已标注):把分类器固定成同一个最近类均值,只比较稀疏和稠密的表示。优势缩到 MNIST-20 约 +0.03,CIFAR 简单特征约 +0.02,强特征上甚至是 −0.01。

稀疏 vs 稠密
稀疏 vs 稠密

稀疏表示本身没那么重要。论文里大部分“稀疏优势”,其实是表示和分类器规则混在了一起。

3.3 对反向传播基线确实更好,但要打折扣#

按登记的标准(FlyModel 比最佳反向传播基线至少高 0.05),两种数据流、三个基准都成立:

基准类内顺序流交错流
MNIST-20+0.084+0.094
CIFAR-100 简单特征+0.271+0.228
CIFAR-100 强特征+0.347+0.273

但是这个“赢”要分几层看:

  • EWC 和微调基本崩了。 类增量、单遍训练下,它们学完一个任务时准确率能到 0.98,学完所有任务只剩 0.05 到 0.10,因为只记得最后一个任务。这与近年文献中“EWC 在类增量里失效”一致,“优于 EWC”几乎是在和一个失效的基线比。论文自己的 EWC 在 10 类时是 0.58,这里没有复现出那样的基线。
  • CIFAR 上的反向传播基线本身很弱。 ER-200 只有 0.11 到 0.24,没有额外调参;隐层很宽(20480)、训练只走一遍,可能也有影响。应理解为“这个预算和设定下的基线”,不是反向传播的上限。
  • MNIST-20 上,ER-1000 高过 FlyModel。 回放 1000 个样本得到 0.757 和 0.761,SLDA 是 0.760,FlyModel 是 0.707。FlyModel 只在“小缓冲”这一档占优。

3.4 “遗忘”这个指标区分不了这几类方法#

FlyModel、最近类均值、SLDA 的权重遗忘在构造上就是 0:每个类的统计量互相独立,结果与任务顺序无关,已用测试验证。它们的 memory loss(约 0.09 到 0.14)完全来自类别变多之后决策空间里的竞争,不是权重被覆盖。

所以 memory loss 没法拿来区分这些方法“记得牢不牢”。更有区分度的是学到时的准确率和最终准确率。

4. 失误复盘:登记和实现里的问题#

  • 登记的数据流让基线崩了。 登记的是“一个任务的两个类按顺序整块给”,反向传播基线在任务内第一个类上就崩,学习准确率恰好是两类的随机水平(审查发现)。补了交错流并把学习率网格往更小扩展,原结果保留。
  • “被超过”被写成“等价”。 数据显示 FlyModel 被超过,最初却写成“原型等价成立”,等价的检验根本没做。结论已改为“被免回放原型基线超过”。
  • 结果缓存会丢更新。 单个大文件被多进程同时写会互相覆盖,已改成每个结果一个文件,并加了并发测试。
  • 稀疏优势的来源猜错过一次。 先怀疑权重饱和,被探索性对照推翻。

5. 边界:审计没有证明什么#

  • 只审计了一篇论文,CIFAR-100 的数字没复现。
  • 特征提取器只用一种(LeNet5 训练一次;ResNet18 预训练,CIFAR-100 与 ImageNet 语义有重叠)。
  • 区间只反映种子方差,确定性方法没有区间。
  • 论文的另外两个对手(GEM、BI-R)没有包含;探索性对照是看到结果后加的。

这不说明 FlyModel 没用:它便宜、不用反向传播、不存旧样本,在小缓冲回放和 EWC 面前仍然更好。能说的是,“仿果蝇”的那部分不是它好的原因,换成最近类均值或 SLDA 往往更好。

6. 可带走的做法#

  1. 对照本身要先检验。最漂亮的数字来自一个已经崩掉的对照。
  2. 补上缺席的对手:论文没和最简单的免回放原型比,这是审计里最有价值的一步。
  3. 基线要认真调,也要看它的绝对水平;停在随机水平说明比较本身有问题。
  4. 把表示和分类器分开比,否则分不清是哪一个在起作用。

7. 下一篇#

第 5 篇:元学习。


文件位置:ml-cl-audit/RESULTS_audit.md、PREREG_audit.md、DEVIATIONS.md、verification/、cl_baselines.py、audit_run.py。图由 blog/figures/make_figures.py 生成。

文章概念网络

从章节进入正文概念。实线表示所属层级,虚线连接跨章节重复出现的概念,不代表因果关系。

48 / 56 个节点 · 正文标记术语与关键词概念

一个“仿果蝇”的持续学习方法,在公平比较下站得住吗?同一概念 / Shared concept同一概念 / Shared concept一个“仿果蝇”的持续学习方法,在公平比较下站得住吗?一个“仿果蝇”的持续学习方法,在公平比较下站得住吗?ml-cl-audit/ml-cl-audit/持续学习持续学习类增量类增量灾难性遗忘灾难性遗忘免回放免回放1. 切入点:FlyModel 其实是类原型分类器1. 切入点:FlyModel 其实是类原型分类器FlyModel 的结构FlyModel 的结构随机稀疏特征上的类原型分类器随机稀疏特征上的类原型分类器没有一个是同样特征上的免回放原型基线没有一个是同样特征上的免回放原型基线2. 审计设计:基准、复现和对手2. 审计设计:基准、复现和对手两个基准两个基准先复现先复现所有方法同一套特征、同一任务顺序、5 个种子所有方法同一套特征、同一任务顺序、5 个种子对手对手3. 结果:四个发现3. 结果:四个发现三个基准的最终准确率三个基准的最终准确率3.1 被免回放的 SLDA 超过3.1 被免回放的 SLDA 超过3.2 “稀疏比稠密好很多”大半来自对照本身3.2 “稀疏比稠密好很多”大半来自对照本身3.3 对反向传播基线确实更好,但要打折扣3.3 对反向传播基线确实更好,但要打折扣3.4 “遗忘”这个指标区分不了这几类方法3.4 “遗忘”这个指标区分不了这几类方法4. 失误复盘:登记和实现里的问题4. 失误复盘:登记和实现里的问题登记的数据流让基线崩了登记的数据流让基线崩了“被超过”被写成“等价”“被超过”被写成“等价”结果缓存会丢更新结果缓存会丢更新稀疏优势的来源猜错过一次稀疏优势的来源猜错过一次5. 边界:审计没有证明什么5. 边界:审计没有证明什么“仿果蝇”的那部分不是它好的原因“仿果蝇”的那部分不是它好的原因6. 可带走的做法6. 可带走的做法7. 下一篇7. 下一篇ml-cl-audit/RESULTSaudit.mdml-cl-audit/RESULTSaudit.mdPREREGaudit.mdPREREGaudit.mdDEVIATIONS.mdDEVIATIONS.mdverification/verification/clbaselines.pyclbaselines.pyauditrun.pyauditrun.pyblog/figures/makefigures.pyblog/figures/makefigures.py实验实验预训练预训练验证集验证集测试集测试集训练集训练集微调微调验证集验证集探索探索预训练预训练语义语义探索探索
一个“仿果蝇”的持续学习方法,在公平比较下站得住吗?

一个“仿果蝇”的持续学习方法,在公平比较下站得住吗?

回到原文 ↗
BIBTEX

引用本文

@article{2026-10-21-fly-connectome-04-continual-learning-audit,
  author  = {枫语},
  title   = {一个“仿果蝇”的持续学习方法,在公平比较下站得住吗?},
  journal = {枫语},
  year    = {2026},
  month   = {oct},
  url     = {https://meiluosi.github.io/posts/2026-10-21-fly-connectome-04-continual-learning-audit/}
}
🌐

本篇知识星丛与滑动侧栈

一个“仿果蝇”的持续学习方法,在公平比较下站得住吗? 当前主轴

搜索

正在载入索引…