Browse this library

Chinese source article

3.2.1 · 基准, 框架与复现实验

持续学习基准包括合成任务序列、类别增量、真实时序数据与语言模型时间基准. 数据划分、Avalanche/Mammoth/FACIL/Continuum 的实现差异、基线清单和报告模板共同决定实验能否复算.

View original Markdown ↗

持续学习论文里反复出现的基准有十来个: Permuted MNIST, Seq-CIFAR-10, Split CIFAR-100, ImageNet-R, CORe50, CLEAR, TRACE 等. 它们各自怎么切分, 用哪个框架跑, 复现时要记录什么, 决定了不同论文的数字能不能放在一起比.

1. 协议与合成任务序列

数据集名不等于协议. 持续学习的基准由两部分组成: 原始数据集, 以及把它切成数据流的规则. 后者包括:

  • 任务数, 每个任务包含哪些类别或哪些域, 以及它们的顺序 (固定还是随机, 跑几个顺序);
  • 推理阶段是否给任务标识, 输出头是多头还是单头 (对应 Task-IL 或 Class-IL, 见第 1.1 篇第 1 节);
  • 每个任务训练几轮, 是否单遍;
  • 骨干是否预训练, 预训练数据是什么;
  • 回放缓冲区大小, 可以保存什么.

同一个 Split MNIST, van de Ven & Tolias (2019) 在 Task-IL 下 EWC 的准确率是 98.64%, 在 Class-IL 下只有 20.01% (第 1.1 篇 1.3 节). 两个数字都对, 前提是协议写清楚. 引用基准结果时, 要连同切分方式一起引用.

置换, 旋转 MNIST 与按类别切分的 CIFAR. Permuted MNIST 对每个任务生成一个固定的随机像素置换, 所有任务都是分 10 个数字. Rotated MNIST 对每个任务把图片旋转一个随机角度. DER 论文 (Buzzega et al., 2020) 采用的版本各有 20 个任务, 旋转角度取自 [0,π)[0, \pi), 推理阶段不给任务标识, 属于 Domain-IL. 其他论文的任务数可能不同 (GEM 和 A-GEM 用 20 个, 也有论文用 10 个), 必须写明.

全连接网络对输入像素的排列不敏感, 每个置换任务对它来说和原始 MNIST 一样难; 而不同置换之间的输入分布彼此无关, GEM 论文对此的描述是「每个任务的输入分布互不相关」. 这让它适合研究正则化和回放的机制, 但它的分布变化与真实场景中的渐变差别很大. GEM 论文的 MNIST 实验每个任务只有 1000 个样本, 每个样本只看一次, 这与 DER 论文多轮训练的设定又不相同.

置换和旋转只改变输入分布, 类别集合不变. 要研究类别逐步增加的情况, DER 论文另外按类别切分了两个图像数据集: CIFAR-10 切成 5 个任务每个 2 类 (Seq-CIFAR-10), Tiny ImageNet 切成 10 个任务每个 20 类 (Seq-Tiny-ImageNet), 所有运行中类别顺序固定. 同一个切分可以按 Task-IL 或 Class-IL 评测, DER 的表格两种都报. 第 2.2 篇第 3.2 节给出了它在这两个基准上的完整数字.

单遍训练的 GEM / A-GEM 系列. GEM 论文 (Lopez-Paz & Ranzato, 2017) 的三个基准都是 20 个任务: MNIST Permutations 和 MNIST Rotations 每个任务 1000 个样本, 10 个类; CIFAR-100 每个任务 5 个类, 2500 个样本. 每个样本只看一次.

A-GEM 论文 (Chaudhry et al., 2019) 沿用并扩展了这套设定, 用四个数据流, 都是 20 个任务:

数据流 构造方式 网络
Permuted MNIST 每个任务一个固定的像素置换 两层各 256 个 ReLU 的全连接网络
Split CIFAR CIFAR-100 不放回地随机抽 5 类为一个任务 缩小版 ResNet18
Split CUB 200 类鸟类细粒度数据集切成 20 组不相交的类别 标准 ResNet18
Split AWA 50 类动物数据集, 每个任务有放回地抽 5 类 标准 ResNet18

所有模型用 SGD, mini-batch 大小为 10. Split AWA 的类别可能在多个任务中重复出现, 但每个任务内部与不同的类别竞争; 为保证每个样本只看一次, 一个类别的训练数据按它出现的次数切成不相交的份. 每个类别在每个头里的分类器权重都重新随机初始化, 不从之前出现时继承. Permuted MNIST 和 Split CIFAR 提供整数任务描述符, Split CUB 和 Split AWA 把当前任务各类别的属性 (如喙的形状, 羽毛颜色) 拼成描述符, 第 3.1 篇 2.8 节的联合嵌入模型用的就是这些属性. 前 3 个任务用于交叉验证超参数.

这套设定与 DER 的多轮训练设定差别很大. 单遍训练下, 每个任务开头几个 batch 学得多快直接影响最终结果, 所以 A-GEM 把 LCA 与准确率, 遗忘并列报告.

无边界的设定. DER 论文引用了一组实用条件: 训练时不依赖任务边界, 推理阶段不需要任务标识, 整个训练过程中内存有上界. 满足这三条的设定称为 General Continual Learning (GCL). 为此论文构造了 MNIST-360: 按顺序展示 MNIST 数字, 同时让旋转角度平滑增大, 数据分布既有突变 (换数字) 也有渐变 (旋转). 只有少数方法 (ER, MER, GSS, DER) 能在这个设定下运行. 论文另外给 A-GEM 配上蓄水池缓冲区 (A-GEM-R) 一起比较, 网络沿用 MNIST 实验的全连接网络. Table 3 的测试准确率 (%):

缓冲区 ER MER A-GEM-R GSS DER DER++
200 49.27 48.58 28.34 43.92 55.22 54.16
500 65.04 62.21 28.13 54.45 69.11 69.62
1000 75.18 70.91 29.21 63.84 75.97 76.03

联合训练为 82.98, 直接 SGD 为 19.09. A-GEM-R 的准确率几乎不随缓冲区增大而提高. 缓冲区到 1000 时, ER 与 DER, DER++ 的差距缩小到 1 个百分点以内. 在这种既有突变又有渐变的流上, 依赖显式任务边界的方法很难确定边界在哪里, 所以没有参与比较.

L2P 论文在任务无关 (task-agnostic) 设定下使用 Gaussian scheduled CIFAR-100, 类别分布随时间按高斯调度平滑变化. L2P 的作者在讨论中指出, 这个数据集是合成的, 离真实场景还远, 需要更复杂的基准.

类别增量基准. ### 1.1. Split CIFAR-100 与 iCIFAR-100

CIFAR-100 按类别切分是最常见的类别增量基准. L2P 论文把它切成 10 个任务每个 10 类; iCaRL 论文 (iCIFAR-100) 按 2, 5, 10, 20, 50 类一批训练, 类别顺序随机固定, 跑 10 种顺序. 两种设定的结果不能直接比较: 每批类别数越少, 任务越多, 遗忘越严重.

iCaRL 论文同时提出了一个评测程序: 类别排成固定的随机顺序, 方法按类别增量训练, 每批训练完在所有已见类别的测试集上评测. 测试数据虽然被多次使用, 但评测结果不反馈给算法, 所以不会过拟合测试集. 评测结果是每批之后的准确率曲线; 需要单个数字时, 取这些准确率的平均, 称为平均增量准确率 (average incremental accuracy). 它与第 3.1 篇式 (1) 的 ACC 不同: ACC 取终止阶段的成绩, 平均增量准确率对每一步的结果取平均.

ImageNet-R 与 DomainNet. 以预训练 ViT 为骨干的参数高效方法 (L2P 之后的提示学习方法, InfLoRA 等) 多用 ImageNet-R. 它由 ImageNet 中 200 个类别经艺术化处理的图片组成, 已成为基于参数高效微调的持续学习方法的标准基准. InfLoRA 论文把它切成 5, 10, 20 个任务, 每个任务分别含 40, 20, 10 类, 结果取 5 次运行的平均; 每个任务训练 50 个 epoch. 同一论文的 CIFAR-100 切成 10 个任务各 10 类, 每个任务训练 20 个 epoch.

DomainNet 有 345 个类别, 6 个域. InfLoRA 把它按类别切成 5 个任务每个 69 类做类别增量, 也按 6 个域依次学习做域增量. 同一个数据集按类别切还是按域切, 对应的是两种不同的场景.

多个数据集拼成的序列. 5-datasets 由 CIFAR-10, MNIST, Fashion-MNIST, SVHN, notMNIST 五个数据集依次组成. L2P 论文指出, 每个数据集单独都不难, 但它们之间差异很大, 依次训练即使从 ImageNet 预训练模型出发也容易遗忘. 它检验的是任务差异很大时方法的表现.

Masana et al. (2022) 在统一框架 FACIL 下比较类别增量方法时, 也用了多个数据集拼成的序列. 数据集先用 CIFAR-100, 再用一组细粒度分类数据集: Oxford Flowers, MIT Indoor Scenes, CUB-200-2011 Birds, Stanford Cars, FGVC Aircraft, Stanford Actions. 这些数据集分辨率更高, 把它们作为不同任务依次学习, 可以研究更大的域偏移. 没有官方验证集的数据集, 从训练集中按类别均衡地划出 10% 作验证集. 第 3.1 篇第 4.2 节列出了它的主要结论. FACIL 的超参数选择采用 De Lange et al. (2022) 的持续超参数框架, 只用当前任务数据.

真实时序数据与语言模型基准. CORe50. Lomonaco & Maltoni (2017) 的 CORe50 由 50 个家用物品组成, 分属 10 个类别 (插头转换器, 手机, 剪刀, 灯泡, 易拉罐, 眼镜, 球, 记号笔, 杯子, 遥控器). 分类可以在物体级 (50 类) 或类别级 (10 类) 上做, 默认是更难的物体级. 每个物体在 11 个会话中各录一段约 15 秒, 20 fps 的视频, 其中 8 个会话在室内, 3 个在室外, 会话之间背景, 光照, 姿态, 遮挡都不同. 原始数据是 1024 × 575 的 RGB 帧和 512 × 424 的深度帧, 深度可以映射到 RGB 坐标上, 用作额外特征或帮助定位物体. 物体在画面中通常小于 100 × 100 像素, 论文利用时间信息从每帧 350 × 350 的区域中裁出 128 × 128 的图片.

测试集固定为会话 #3, #7, #10, 其余 8 个会话按批次依次提供. 论文定义了三种设定:

设定 新批次包含什么 对应的场景
NI (New Instances) 已知类别的新样本, 新的姿态和环境 Domain-IL
NC (New Classes) 新类别的样本; 第一批 10 类, 其后 8 批各 5 类 Class-IL
NIC (New Instances and Classes) 既有已知类别的新样本, 也有新类别 混合

NC 设定的测试集如何构造, 论文考虑过三种方案: 每步只测已学类别 (部分测试集); 测试集固定包含全部类别 (完整测试集); 测试集包含全部类别, 但允许模型对没学过的类别拒绝回答. 第一种会把类别集合逐步扩大造成的难度变化与后续批次的学习收益混在一起; 第三种最接近实际应用, 但每一步得到的是一条随阈值变化的 ROC 曲线, 方法之间难以比较. 论文选了第二种, 理由是简单, 且三种设定 (NI, NC, NIC) 共用同一个测试集. 在完整测试集上, 除最终阶段外总有一部分类别尚未出现, 因而准确率上限会随阶段逐步升高.

NC 设定中每批包含若干类别的全部 8 段训练序列, 所以后面的批次无法刷新前面类别的记忆. 为了让任务稍容易一些, 每次运行随机挑选类别时偏向把同一大类的物体分散到不同批次.

由于批次顺序影响结果, 论文对每个设定取 10 次随机打乱顺序的平均, 并给出累积训练 (当前批次加上之前所有批次) 的准确率作为目标. 与按类别切分 CIFAR 不同, CORe50 的同一个物体在相邻帧之间变化平滑, 更接近机器人或移动设备上持续采集的数据.

L2P 论文在 CORe50 上做了 Domain-IL 实验: 把 11 个会话看成 11 个域, 其中 8 个 (共 120,000 个样本) 依次用于训练, 其余 3 个合成一个测试集 (45,000 个样本). L2P 基于预训练的 ViT-B/16, 论文说明对比方法在相同环境下运行. 结果 (测试准确率, %):

方法 缓冲区 准确率
EWC 0 74.82
LwF 0 75.45
L2P 0 78.33
ER 每类 50 80.10
GDumb 每类 50 74.92
BiC 每类 50 79.28
DER++ 每类 50 79.70
Co2L 每类 50 79.75
L2P-R 每类 50 81.07
上界 - 82.15

除 GDumb 外, 存样本的方法彼此相差不到 1 个百分点, 离上界也只有两三个百分点. 论文指出, CORe50 原论文同样观察到基线与上界差距不大. 不存样本的 L2P 低于这些存样本的方法, 加上缓冲区的 L2P-R 是表中最高的. 同一论文在 Split CIFAR-100 上, 不存样本的 EWC 与上界相差约 44 个百分点 (第 2.4 篇 3.2 节), CORe50 上各方法之间以及与上界的差距都小得多.

同一论文 Table 4 还在任务无关设定 (Gaussian scheduled CIFAR-100) 上比较了不需要任务边界的方法, 不存样本的 L2P 为 88.34%, 存样本的 ER, DER++, L2P-R 分别为 82.63%, 85.24%, 88.92%, 上界 90.85%. LwF, BiC, Co2L 需要在任务边界保存模型快照, 没有参与这个比较.

1.2. CLEAR 与 WILDS

Lin et al. (2021) 的 CLEAR 来自 YFCC100M 中 2004 到 2014 年的图片, 按年份分成 11 个桶, 每个桶约 70 万张图片. 类别集合固定为 11 类, 任务是 Domain-IL: 类别不变, 同一类物体的外观随时间演变. 论文的例子是电脑和相机: 从 2004 年的 PowerBook G4 到 2011 年的 MacBook Pro, 从 2006 年的 Canon EOS 30D 到 2013 年的 EOS 6D, 外观有明显变化. 数据先用 CLIP 检索候选图片, 再用众包标注清洗. 每个时间段同时提供有标签和大量无标签数据, 可以研究持续半监督学习.

CLEAR 的流式协议和 next-domain accuracy 见第 3.1 篇第 3.1 节. 论文用 Avalanche 中的实现评测了现有方法.

CLEAR 的偏移来自时间, 其他来源的自然偏移可以从分布偏移基准里取. Koh et al. (2021) 的 WILDS 收集了 10 个数据集, 覆盖真实应用中自然产生的分布偏移, 例如不同医院之间的肿瘤识别, 不同相机陷阱之间的野生动物识别, 卫星图像在时间和地点上的变化. 论文发现, 在每个数据集上, 标准训练的分布外表现都明显低于分布内, 现有的分布偏移方法也没有消除这个差距. WILDS 本身是分布偏移基准, 用来评测一次训练后的泛化; 把它的域按时间或地点排成序列, 可以构造真实的 Domain-IL 数据流, 这时要自己声明排序方式.

语言模型的持续学习基准. 语言模型上常用的基准有两类, 一类按任务排序列, 一类按时间排快照. Wang et al. (2023) 的 TRACE 属于前一类, 由 8 个数据集组成, 覆盖领域知识, 多语言, 代码补全和数学推理, 每个数据集 5000 条训练样本. 除了传统的平均准确率和后向迁移, 它额外报告三个指标: 通用能力的变化 (General Ability Delta), 指令遵循能力的变化 (Instruction Following Delta), 安全性的变化 (Safety Delta). 第 2.4 篇第 2.1 节给出了 Llama-2-Chat 13B 在 TRACE 上顺序训练后 GSM8K 从 28.8% 跌到 2% 等结果.

Jang et al. (2022) 的 TemporalWiki 属于后一类. 它比较相邻的英文 Wikipedia 快照, 只保留变化的内容作为训练语料 (TWiki-Diffsets); 再比较对应时间的 Wikidata 快照, 把事实三元组分为未变 (Unchanged) 和已变 (Changed) 两类, 只保留能在 Wikipedia 文章中找到依据的事实, 作为评测探针 (TWiki-Probes). 未变的探针测保持, 已变的探针测更新.

论文用 2021 年 8 月到 12 月的 5 个月度快照. 每个 Wikipedia 快照约 630 万篇文章, 46 到 47 亿 token; 相邻两月的差分集 (如 TWiki-Diffset-0809 表示 8 月与 9 月之差) 约 30 万篇文章, 3.5 亿到 3.8 亿 token, 不到完整快照的十分之一. 探针经过三步筛选: 初始分类后, 以 0809 为例有约 51 万条未变事实和 121 万条已变事实; 与 Wikipedia 文章对齐后剩约 1 万条未变和 2329 条已变; 再经启发式过滤, 最终为 6935 条未变和 1776 条已变. 每个月份的探针规模相近.

论文发现, 只在差分数据上做持续学习, 困惑度与在整个快照上训练相当或更好, 计算量少 12 倍.

除这两个之外, 语言模型的持续学习基准还很少, 实际项目常常要自己构造. 第 2.4 篇第 4.5 节给出了需要同时测量的内容: 新任务, 旧任务, 序列外的通用能力, 指令遵循与安全性, 旧语料上的验证 loss. 从第 3.1 篇的角度补充两点: 任务顺序要至少跑几个, 超参数只用当前阶段的数据选.

开源框架. Avalanche. Lomonaco et al. (2021) 发布的 Avalanche 是 ContinualAI 社区维护的端到端持续学习库, 基于 PyTorch, MIT 许可. 论文给出的动机是: 持续学习的算法往往难以重新实现, 难以在不同设定之间移植, 甚至在标准基准上的结果也难以复现. 论文把库分成五个模块: Benchmarks (基准), Training (训练策略), Evaluation (评测), Models (模型), Logging (日志). 基准生成一个由若干 experience 组成的数据流, 策略依次访问这些 experience, 评测器统一计算指标并交给日志模块输出. 论文图 2 的例子是常见的 Split MNIST: 一个由五个 experience 组成的流, 算法访问第 3 个 experience 时, 看不到之前和之后的 experience. 这种抽象把「数据怎么切」和「方法怎么学」分开, 同一个策略可以直接换到另一个基准上运行.

论文 Table 1 列出了发表时支持的功能. 内置基准有 Split / Permuted / Rotated MNIST, Split Fashion MNIST, Split CIFAR-10 / 100 / 110, Split CUB200, Split ImageNet, Split Tiny ImageNet, Split / Permuted / Rotated Omniglot, 以及 CORe50, OpenLORIS, Stream51 三个真实采集的数据集; 日志支持文本, 交互式终端, TensorBoard 和 Weights and Biases. 场景包括 Class-IL, Domain-IL, Task-IL, 任务无关, 在线, 以及 CORe50 的 NI, NC, NIC; 策略包括直接微调, 回放, GDumb, 累积训练, LwF, GEM, A-GEM, EWC, SI, CWR*, AR1, 联合训练; 指标除准确率, 损失, 混淆矩阵, 遗忘外, 还有 CPU, GPU, 内存, 磁盘占用, 计时和乘加次数. 资源指标与准确率出自同一个评测器, 方便按第 3.1 篇第 4.1 节的要求报告资源. 库在持续更新, 使用时以锁定版本的文档为准.

Mammoth, FACIL 与 Continuum. Mammoth 是 Modena 大学 AImageLab 维护的框架, 仓库简介是「An Extendible (General) Continual Learning Framework based on Pytorch」. 它是 DER 论文 (Buzzega, Boschini, Porrello, Abati, Calderara) 的代码基础, 支持 Task-IL, Class-IL, Domain-IL 和 General Continual Learning, DER 论文中的基准 (Seq-CIFAR-10, Seq-Tiny-ImageNet, Permuted MNIST, Rotated MNIST, MNIST-360) 都在其中. 引用 Mammoth 跑出的结果时, 要核对对应论文的设定和仓库提交版本.

另外两个框架的分工更窄. FACIL 是 Masana et al. (2022) 随综述发布的类别增量框架 (github.com/mmasana/FACIL), 内置持续超参数框架, 用来在统一条件下比较方法. Continuum 的仓库简介是「A clean and simple data loading library for Continual Learning」, 它只负责把数据集切成持续学习的数据流, 不负责训练策略, 也不保证预算公平.

使用框架的注意事项. 框架的默认超参数和数据增强不等于论文设定. 复现某篇论文时, 要逐项对照论文的附录, 而不是直接跑框架里同名策略的默认配置. 框架本身也在变: Avalanche 持续更新, Mammoth 的结果要对应仓库提交版本, 同一个策略在不同版本中的实现可能有差别. 所以要锁定框架版本, 保存完整配置和启动命令.

框架里方法齐全, 不代表每个方法都经过同等仔细的调参. FACIL 的做法是让所有方法走同一套只用当前任务数据的持续超参数框架; 用其他框架比较时, 至少要说明各方法的超参数来源, 是论文推荐值, 框架默认值, 还是自…9953 tokens truncated…两种方案在容错延迟与实现复杂度之间取舍,文档应明确可恢复的最小边界。

真实流上的复现还要保留时间间隔和重复模式. 相同样本在连续帧中出现十次, 与十个独立样本提供的信息量不同;随机打乱会虚增有效样本数, 也让 replay 的优势被重复数据稀释. 按时间去重、保留原顺序并另外给出打乱对照, 能判断方法究竟利用了时间结构还是只利用更多近邻样本.

基准之间的转移同样值得检查. 在 Split CIFAR 上选出的记忆策略, 到 DomainNet 或语言任务上可能因类别数、样本长度和分布重叠改变而失效. 使用统一代码并不保证协议统一;需要逐项核对任务 ID、输出空间、遍历次数、边界可见性和存储单位. 这些字段对齐后, 跨基准比较才说明机制具有迁移性.

框架默认值是另一处常见偏差. 不同库对数据增强、每阶段 epoch、分类头扩展和评测时机采用不同默认. 复现论文时应将这些值显式写进配置, 并用一个小规模手算或日志检查矩阵元素对应的真实时点. 框架版本只在改变这些语义时值得报告, 无关的环境清单不需要进入正文.

阶段级日志至少包含当前任务性能、历史任务性能、学习率、回放比例和随机种子。完整轨迹能区分数据顺序、优化过程与指标聚合造成的异常;在持续学习实验里,轨迹本身就是结论的一部分。

参考文献

  1. Buzzega, P., Boschini, M., Porrello, A., Abati, D., & Calderara, S. (2020). Dark Experience for General Continual Learning: a Strong, Simple Baseline. NeurIPS 2020.
  2. van de Ven, G. M., & Tolias, A. S. (2019). Three scenarios for continual learning. arXiv:1904.07734.
  3. Rebuffi, S.-A., Kolesnikov, A., Sperl, G., & Lampert, C. H. (2017). iCaRL: Incremental Classifier and Representation Learning. CVPR 2017.
  4. Wang, Z., et al. (2022). Learning to Prompt for Continual Learning. CVPR 2022.
  5. Liang, Y.-S., & Li, W.-J. (2024). InfLoRA: Interference-Free Low-Rank Adaptation for Continual Learning. CVPR 2024.
  6. Masana, M., et al. (2022). Class-incremental learning: survey and performance evaluation on image classification. IEEE TPAMI.
  7. De Lange, M., et al. (2022). A continual learning survey: Defying forgetting in classification tasks. IEEE TPAMI.
  8. Lomonaco, V., & Maltoni, D. (2017). CORe50: a New Dataset and Benchmark for Continuous Object Recognition. CoRL 2017.
  9. Lin, Z., Shi, J., Pathak, D., & Ramanan, D. (2021). The CLEAR Benchmark: Continual LEArning on Real-World Imagery. NeurIPS 2021 Datasets and Benchmarks.
  10. Koh, P. W., et al. (2021). WILDS: A Benchmark of in-the-Wild Distribution Shifts. ICML 2021.
  11. Wang, X., et al. (2023). TRACE: A Comprehensive Benchmark for Continual Learning in Large Language Models. arXiv:2310.06762.
  12. Jang, J., et al. (2022). TemporalWiki: A Lifelong Benchmark for Training and Evaluating Ever-Evolving Language Models. EMNLP 2022.
  13. Lomonaco, V., et al. (2021). Avalanche: an End-to-End Library for Continual Learning. CVPR Workshops 2021.
  14. AImageLab. Mammoth: An Extendible (General) Continual Learning Framework based on Pytorch.
  15. Douillard, A., & Lesort, T. Continuum: A clean and simple data loading library for Continual Learning.
  16. PyTorch. Reproducibility. PyTorch Documentation.
  17. PyTorch. Numerical Accuracy. PyTorch Documentation.
  18. PyTorch. Distributed Checkpoint. PyTorch Documentation.
  19. PyTorch. Randomness in Multi-process Data Loading. PyTorch Documentation.