论文阅读:IL2M: Class Incremental Learning With Dual Memory
IL2M: Class Incremental Learning With Dual Memory
1.总览
本文还是用于解决类增量学习的,学习过程是普通的微调(区别于用蒸馏损失的方法),区别在于加入了两个记忆:
- 一个记忆样本(exemplar),用于训练过程微调,容量固定(类越多,每类样本量越小);
- 一个记忆新类微调后的统计量(statistics),用于预测时修正原始分类输出,(只是几个浮点数,很小)。
由于记忆的加入,类增量学习问题,实际变成了不均衡数据集学习。作者在这里有几个有趣的发现:
- 在允许记忆样本时,蒸馏损失实际会降低模型性能;
- 模型预测时,新类的原始输出会明显较大。原因是样本不均衡。
性能在2019年比SOTA更好。
2.相关工作
这里作者把类增量学习的方法分为三类:
1.调整/增加参数以适应新类:
- Growing a Brain:增宽增深网络
- Deep Adaptation Networks:每个新类增加13%左右参数量
- Progressive neural networks:简单粗暴
- Committee of expert networks:门机制,选择最合适的专家
- 神经网络参数族,共享大多数参数,并使用连接到网络的小型模块化适配器将其专用于新任务。
- PackNet:修剪之前任务的冗余参数。但容纳新任务数量有限,推断时间更长,不能同时用于所有训练过的任务。
- Piggyback combines PackNet:给权重上掩码。增加参数,无法很好地扩展。
2.参数量固定,存储部分旧数据(这里的问题实际和不均衡学习相似):
- LwF:早期尝试加入知识蒸馏损失,无需旧任务记忆,然而性能比后续有记忆的工作较低
- iCaRL:最近邻分类器+蒸馏损失+有限记忆。Revisiting distillation and incremental classifier learning,实验探索表明,大部分性能改进来源于记忆。
- end-to-end IL:记忆+知识蒸馏损失+balanced fine-tuning。相比iCaRL有7百分点改进。
- Exemplar-supported generative reproduction for class incremental learning:用GAN生成虚假记忆。相比单独使用真实图像,二者组合的性能改进很小。
3.探索初始固定表示作为特征提取器
- FearNet:长期记忆、短期记忆网络用以表示旧、新类。一个决策机制决定哪个网络用于测试样例。好于iCaRL,然而记忆增长显著。
- DeeSIL(这个作者跟本文相同...唯一被引):固定表示学习后不变,为新类学习一个浅分类器。比end-to-end IL提高14点。二者都依赖初始学习
3.一些定义
:模型,
:特征提取器,
:分类器,
:分类层原始输出(还没softmax),
:有限训练数据存储
:旧类被学习时的初始状态,
:当前增加新类后的状态,
:state数
端到端模型里和
是整合的。分开的如iCaRL把
换成NEM,或换为SVMs。
4.方法
先提了下记忆微调,类越多不平衡越严重;固定表示依赖初始表示质量。
我们的方法:以微调为backbone,同时记忆初始学习的统计量,以在backbone预测阶段修正输出(这里叫classfication score)。
- 如何修正:
实验表明,模型偏好为新类打高分,同时越增量,该偏好越明显。我们可以增加旧类分数,以修正这种偏好。
- 模型表示如下:
蓝色是存数据的记忆;粉色是存统计量的记忆。每个state是一次增量学习。
统计量的计算为:在P阶段,所有类
训练数据的,平均分类scores(即网络原始输出)。由图2有,
的计算为:所有新训练数据,在模型P阶段的,平均分类scores。(
于
应该没有固定大小之别)
- 利用统计量修正方法如下:
修正发生在:一个样本被判为新类时
修正效果是:增加对旧类的分类score。
5.实验
主要对蒸馏损失的实验很有意思,这里摘录一些结果:
作者摘除了iCaRL的蒸馏损失得到,摘除了EtEIL的蒸馏损失得到
,性能反而更好了。
另一个实验,比较是否有蒸馏损失的fine-tuning(有:hybrid1 无:FT)。e(p,n)代表旧类错判为新类,c为正确etc...
尽管蒸馏损失假设可以保留旧类准确率,实验却显示其导致了两三倍的错误率。蒸馏损失假设,在一个大型的平衡数据集上初始学习到一个健壮的模型,而这个条件在增量学习中是不满足的。