Author: Alexander Kolesnikov
Key_words: nearest-mean-of-exemplar rule, prioritized exampler selection,representation learning
Create_time: September 11, 2021 3:06 PM
Edited_by: Huang Yujun
Publisher: CVPR 2017
Score /5: ⭐️⭐️
Status: Finished
iCaRL: Incremental Classifier and Representation Learning
1. 背景
本文提出的符合增量学习算法的三条基本属性(as class-incremental):
- 能学习不同时间到达的新类别数据
- 能够对所有现有的类别数据,训练出一个有效的多类分类器
- 对计算存储资源的消耗有一个上限(时空复杂度有上界),或增长得比较慢
目前(2017年前)没有一种方法能够满足这三个条件
2. 本文提出的方法
为了满足上述提到的三个基本属性,本文提出的方法 iCaRL(Incremental Classifier and Representation Learning)的创新点主要有三个:
- classification by a nearest-mean-of-exemplars rule
- prioritized exemplar selection based on herding
- representation learning using knowledge distillation and prototype rehearsal
下面介绍这三个模块的细节
2.1 增量分类器的学习模块(class-incremental classifier learning)
主要有几个要点:
- 模型需要确保保存的采样数据量有个上限K。每增加新类的时候,会修改各个旧类别数据在存储容器中的占比
- 模型结构。模型的特征提取器在增加新类的时候结构不改变,但会在分类器中动态的增加输出层的神经元个数。(即分类器只有一个,并非像LWF那样多头)
2.2 样本最近-均值分类模块(nearest-mean-of-exemplars classification)
本文提出的模型会如何进行分类(推断or预测)呢?
首先,会计算当前已知所有各个类别数据的对应的平均特征向量。例如有一个类别a在样本容器中的数据量为n,那么类别a的平均特征向量为,所有a类样本特征向量求和除以n;
然后,计算需要推断数据的特征向量与各个类别平均特征向量的距离,以距离最小对应的类别为预测类别。
2.3 表征学习模块(representation learning)
表征学习模块主要功能是更新特征提取器(即卷积层),需要使用到新类数据以及存储的旧类样本数据。它是怎么更新的呢?其步骤如下:
a) 对新类数据及存储的旧类数据进行数据增广
b) 将增广后的所有数据输入网络,得到数据在旧模型中的特征向量,并存储下来
c) 最后训练更新网络参数,最小化损失函数。对于新类数据而言,会通过训练使网络倾向于得到正确的新类别分类标签;对于旧类数据而言,将生成保存在上一步存储空间中的蒸馏损失
此处有点像 fine-tune ,但不同之处在于本文的网络会输入新旧类数据,在新类数据训练使网络能够正确分类新类别的同时,也能够不丢失旧类的部分知识。
注意旧类容器中保存的旧类的照片数据,而非其特征向量,因为此时特征提取器参数在不断的更新
2.4 采样器管理(examplar management)
采样器需要思考该保存哪些旧样本的数据?(该存哪些,该丢掉哪些)每一类该保存多少?
iCaRL 的采样器对于每一类该保存多少数据的问题,按照平均来分配,即 每一类的容量m=容器总容量/当前已知类别个数。容器一般都会存储满(不多不少),各类别中的样本有存储优先次序。
对于该保存哪些数据的问题,iCaRL 的样本管理可以分为两部分:取样器 和 剔除器
取样器将计算同一个类别中(指在存储容器中的数据),当前样本特征向量与样本平均特征向量的距离(其实讲不太准确),对距离从小到大排序,将距离最小的前m个确定为需要存储的
剔除器,将剔除前m个样本后面的数据
本文实现的采样器实际上仅在当前类别第一次到达时,即作为新类时,会调用取样器,之后不会再调用。此后,仅会调用剔除器去根据类别允许容量剔除样本。