English interface selected · this article is currently written in Chinese.
一个“仿果蝇”的持续学习方法,在公平比较下站得住吗?
English overview →配合仿真与实验探针的假设探索,等待更多证据或边界检验。
数字花园
🌿 什么是数字花园与思想演进?
遵循 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 的更新规则很简单:
每个类只有一个权重向量,学这个类时把该类样本的稀疏特征加到它上面,别的类的权重不动;预测时选与输入点积最大的类。也就是说,它是随机稀疏特征上的类原型分类器。
这带来两个后果:
- 它的“旧类不被覆盖”有相当一部分是构造出来的。各类权重互相独立,学新类根本碰不到旧类的权重。
- 论文的对手全是反向传播的网络(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-20 | CIFAR-100 简单特征 | CIFAR-100 强特征 |
|---|---|---|---|
| FlyModel(论文设定) | 0.707 | 0.340 | 0.508 |
| FlyModel(验证集调参) | 0.715 | 0.340 | 0.540 |
| SLDA(免回放) | 0.760 | 0.400 | 0.639 |
| 最近类均值(欧氏) | 0.601 | 0.273 | 0.533 |
| 回放 ER-1000(交错流) | 0.761 | 0.215 | 0.432 |
| 离线上界 | 0.872 | 0.437 | 0.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。
稀疏表示本身没那么重要。论文里大部分“稀疏优势”,其实是表示和分类器规则混在了一起。
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. 可带走的做法
- 对照本身要先检验。最漂亮的数字来自一个已经崩掉的对照。
- 补上缺席的对手:论文没和最简单的免回放原型比,这是审计里最有价值的一步。
- 基线要认真调,也要看它的绝对水平;停在随机水平说明比较本身有问题。
- 把表示和分类器分开比,否则分不清是哪一个在起作用。
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 个节点 · 正文标记术语与关键词概念
一个“仿果蝇”的持续学习方法,在公平比较下站得住吗?
回到原文 ↗最后更新于 2026-10-21
引用本文
@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/}
}