读书笔记-增量学习-End-to-End Incremental Learning
一篇2018年的论文:End-to-End Incremental Learning。为了使模型实现增量学习,把新、旧数据一起重新训练会导致时间、存储成本等一系列问题。作者提出的方法仅使用新数据与部分代表性的旧数据。基于Distillation知识蒸馏从旧数据中提取代表性样本、Cross entropy交叉熵学习新数据。题目的End-to-End指的是能同时训练更新Classification分类器和代表性样本。
作者认为,一个拥有增量学习能力的深度神经网络模型应该拥有以下特征:
-
Ability to being trained from a flow of data, with classes appearing in any order, and at any time。能在任意时刻,对数据流中任意顺序的数据进行学习。
-
Good performance on classifying old and new classes。优秀的分类性能。
-
Reasonable number of parameters and memory requirements for the model。模型参数及内存大小合理。
-
End-to-End learning mechanism to update the classifier and the feature representation jointly。对模型中分类器和代表性样本同步更新。
因此,作者提出了如下增量学习架构,任意深度学习模型都可以套用这个框架(仅需修改损失函数),实现有效的增量学习:
- 输入图像首先进行特征提取,把特征传入各个分类器(CL1, CL2, ... , CLN),其中CLN(图中绿色的CLN)是新添加的分类器。
- 分类器分别输出logits,logits相当于softmax层中预测各样本种类的概率的值。
- 把模型中每个分类器(CL1, CL2, ...不包含CLN) 输出的logits都做一个Distillation蒸馏(图中黄色的Distillation 1, Distillation 2)。
- 把模型中每个分类器(CL1, CL2, ... , CLN)输出的logits整合做一个样本分类(图中蓝色的Classfication)。
- 把Distillation 1和 Distillation 2 和 Classfication 作Cross-entropy交叉熵,获得分类结果。
对于两个损失函数的定义:
Cross-entropy Loss 交叉熵损失函数 Distillation Loss 蒸馏损失函数
整合后,Cross-distilled Loss 交叉-蒸馏损失函数的表达式:
其中F表示旧分类器(图中灰色的分类器CL1,CL2)的总数。
作者提出的增量学习流程如下:
- 【Construction of the training set】该模型在扩展前我们已经有了一定的旧知识,存储在Memory中,此时输入数据有新数据。因为应用了两个损失函数,所以该环节需要给训练集中每个数据贴两个标签。对于Classification,采用one-hot vector表示它在image中表示的种类;对于Distillation,使用旧知识的logits贴标签。
- 【Training process】执行特征提取,分类,知识蒸馏,更新参数,分类等过程。其中,特征提取的方法在增量学习过程不会改变。
- 【Balanced fine-tuning】对分类结果进行微调。由于新数据肯定比代表性旧数据多,作者提出挑选新数据中具有代表性的数据,具体挑选算法为Herding Selection,一种根据样本与该种类平均样本的距离的排序挑选算法。挑选后的新子集,无论新旧数据,每个种类的样本数量一致。
- 【Representative memory updating】微调后的新子集作为旧知识被存储到内存中。其中涉及到存储代表性旧知识的方法,作者提出了两个方案,实验中分别对两种存储方案进行对比。(1) 有限存储容量:当样本种类不断增加,每种样本的数量将减少;(2) 无限存储容量:每个种类的样本数量固定。
实验中比较上述两种存储方法的结果:
有限存储容量
无限存储容量
写在最后,作者为了实现增量学习且避免旧知识灾难性遗忘,引入双损失函数的方法,对旧知识应用蒸馏,对旧、新知识应用交叉熵,以保证在每次训练时都能用到旧知识。
Old Data | New Data | |
---|---|---|
Distillation | ☑️ | |
Cross-entropy | ☑️ | ☑️ |
作者对样本微调保证了新旧数据数量的平衡,因而有效避免模型不会偏向新的类别。且训练过程不冻结特征提取层和分类层,每次训练都能更新连接权重。对于基于深度学习的神经网络,作者提出的方法兼容性较好,神经网络仅修改损失函数并加入旧知识存储空间,便可效仿该增量学习功能。