论文原文链接:https://arxiv.org/abs/1611.07725
自然界的视觉系统天生就是可增量的:新的视觉信息在保留已学习到的知识的情况下不断被学习到。例如,一个小孩子可以去动物园学习到很多新的动物种类,而不会因此忘记他家里的宠物种类。相反,很多人工目标识别系统都只能用想要识别的所有分类一次性训练得到。
最起码,一个视觉分类系统应该要具有增量学习新类的能力,也称这种能力叫类增量(class-incremental learning)。
下面是文中提到的类增量应该具有的三个标准:
a) 当新的类别在不同时间出现,它都是可训练的
b) 任何时间都在已经学习过的所有类别中有很好的分类效果
c) 计算能力与内存应该随着类别数的增加固定或者缓慢增长
其中 a 和 b 表达的也是类增量的本质,c 则是对算法的要求。
有趣的是,尽管在过去十年里图像分类取得了巨大进展,但是目前还没有一个令人满意的类增量学习算法。目前很多的多分类技术都只能处理固定数量的类别或者需要所有类别的训练样本同时出现,这都违反了 a 或者 b。 最简单的方法就是使用 SGD 来训练一个不断增加的增量数据流,但是这会导致灾难性遗忘(catastrophic forgetting)。有少数方法符合上面的标准也都是在某些特定的情况下才可以。
本文提出 iCaRL 的方法,在类增量学习中同时学习分类和特征表示,并满足上述的3条标准。
这里:
Xs,…,Xt 表示新增加每一类对应的样本集;
K 表示存储的大小,即所有示例样本集图片总数;
θ 表示当前的模型参数;
P 当前的样本集
1)将新得到新类样本和之前存储的旧类样本集共同加到卷积神经网络中训练,来更新当前的模型参数θ
2)因为 K 是事先设定好的,确定增加新类别后,每个类别应该保留的图片数
3)对旧任务 1,…,s-1 每个类别的图片数减少到 m
4)对新任务构建新的样本集 Py,其中 y = [s,…,t],每个类别分别选择 m 张,最后将其加入到总的样本集 P 中
所以这里的卷积神经网络仅是用做表征学习的,而不是做最后的分类任务,因为增量学习的特性,本文不用事先关注有多少类及分别是哪些类需要学习。 可以根据实际应用场景来设置参数和资源,理论上,如果没有上限,算法会不断增加权重的数量以及降低每个旧类样本集中的图片数,所有最终为了保持每一个旧类中至少有一张图片,在计算资源有限的情况下,iCaRL 还是只能学习有限的分类数。
上面提到,神经网络知识用来提取更有效的特征,真正的分类本文使用的是 NME(Nearest-Mean-of-Exemplars) 的算法,算法流程如上:
1) 首先输入一张待分类图片
2) 用神经网络分别对样本集 P = (P1,…,Pt)中的所有图片经过卷积神经网络提取到特征向量,每张图片都对应一个特征向量
3) 对上面得到的每一类样本集包含的 m 中图片的所有特征向量相加再求平均得到对应的平均特征向量 μ y,其中 y = [1,…,t]
4) 然后以距离来将待分类图片归到与其特征向量最近的类别
文中也给出了使用 NME 分类而不是使用神经网络直接分类的原因,如果使用神经网络直接分类相当于待分类图片在其类别上概率最大:
sigmoid 或者 softmax,最后的分类结果都相当于使用非线性特征图与权重 ω1,…,ωt 相乘组成的线性分类器:
权重 ωy 会随着特征改变而改变,这样输出就会变得不可控制,从而导致灾难性遗忘。这里的分类原型会随着特征表示的变化而变化,让分类器更有鲁棒性。 NME 借鉴了 NCM [24]的思想。
这里主要说明如果构建样本的样例以及如何调整样例中的数量。
构建样本:
1)首先计算当前类别 X 中 n 张图片对应的 n 个特征向量的类平均向量 μ
2)依次迭代所有 n 个特征向量,将他们除以当前样本集中的个数求均值,选取前 m 个最接近类平均向量 μ 个特征对应的图片加入到对应类的样本集中
这里的样例集就是一个优先级链表。
修改样本集数量:
这里主要是K值固定,增加新类后需要减少每种分类的样例,就直接按照优先级将优先级靠后的直接删除就好了。
本文主要分成两类:
学习固定数据表示: 当数据特征被固定,对类增量来说最大的挑战就是设计一个分类器结构可以在任何时候都可以适应新的类。最简单的方式就是最近邻分类器(nearest neighbor classifier),但是这需要在训练的时候存储所有的训练数据,这就不满足前面提到的3条标准了。
NCM[23]则是通过计算所有训练样本的平均特征向量并存储它们,从而不再需要存储全部的训练样本。NCM最后效果不错而且在增量学习方面比标准的分类器更具有鲁棒性。但是NCM 最大的缺点就是,NCM 不易于用在需要和分类器共同学习得到的非线性的数据表征上。 iCaRL 学习了其中基于原型的分类思想,选择部分样本(构建的样例集),而不是全部样本来计算原型特征向量,这样也更节省内存。
[17] 表明只要分类器在增加新任务后可以在旧任务的数据集上,哪怕只有一小部分重新训练,都可以提升分类器的性能。
[4,5,6] 介绍了一个可以自主在网络上检索图片并识别图片中联系的系统,但是这不是增量的去学习目标分类的。
[34] 可以在一个时变的数据流上学习分类器,但是它们的方法不能处理新增加的类别。
[29] 证明按顺序的学习多分类任务是有益的,但是选择所有的类别样本都需要。
表征学习:
最近深度学习取得的一系列进展不仅因为它们学习如何分类,也因为它们可以学习到更合适的表示特征。首次在一些经典的神经网络结构中[1,8,9,33]以增量的方式学习数据表征。其中20世纪80年代[22] 提到了灾难性遗忘的概念。之前对于灾难性遗忘的解决方法主要分为2类:
i)先固定一部分网络的权重,同时增长网络的容量以保留学习能力
ii) rehearsal (这里我理解为,不断使用旧+新的样本训练网络,类似于联合训练)
对于 ii 类方法,[41]提出学习一个树状的模型结构来不断增加网络节点,[36]则提出随着类别的增加增加网络的分支(复制原网络作为新的分支),这无疑都违背了 c 标准。
对于 iCaRL, 也是采用了 rehearsal 的方法,使用新旧样本一起训练模型,使用了 蒸馏法 来防止信息太偏向新任务,[12]提出知识蒸馏是在不同的结构之间进行蒸馏,而这里是在相同的网络结构下使用 蒸馏,(从 LwF 中借鉴的)
本文同时也指定了一些数据集的实验方式,例如将 CIFAR-100 分成 2,5,10,20或者50份,并指定了一些 Benchmark ,需要具体深入研究的同学可以仔细研读原论文相关部分。