2017-CVPR-《iCaRL:Incremental Classifier and Representation Learning》
论文地址:CVPR 2017 Open Access Repository
摘要
1)人工智能道路上的一个主要问题是开发增量学习系统,随着时间推移,从数据流中学习越来越多的概念。2)In this work,我们介绍了一种新的训练策略iCaRL,能够以类增量的方式进行学习:只有少部分数量类别的训练数据必须同时存在,并且可以逐步增加新类。3)iCaRL同时学习强分类器和数据表示。这将其与早期作品区分开来,这些作品从根本上仅限于固定数据表示,因此与深度学习架构不兼容。4)我们在CIFAR-100和ImageNet ILSVRC 2012数据集上做了实验,结果表明iCaRL可以在很长一段时间内逐步学习很多类,而其他策略很快就会失败。
1 Introduction
自然视觉系统本质上是incremental(增量的):新的视觉信息不断被纳入,同时保留现有的知识。
随着计算机视觉领域越来越接近人工智能,很明显,需要更灵活的策略来处理现实世界对象分类的大规模和动态属性。至少,当新类的训练数据可用时,视觉对象分类系统应该能够逐渐学习新的类别。我们称之为类增量学习(class-incremental learning)。
Formally,类增量算法应具有以下三个要求:(前两个标准表达了增量学习的本质。)
- 它应该可以从数据流中训练,其中不同类的数据出现在不同的时间。
- 它应该在任何时候,都能为目前为止观察到的类别,提供一个有竞争力的多类分类器。
- 它的计算要求和内存占用量应该保持有限,或者至少对于迄今为止看到的类别,资源的增长比较缓慢。
有趣的是,尽管图像分类在过去几十年中取得了巨大的进步,但目前还没有一种令人满意的类增量学习算法。
In this work,我们提出了iCaRL(incremental classifier and representation learning,即增量分类器和表示学习),这是一种在类增量设置中同时学习分类器和特征表示的实用策略。 基于对现有方法缺点的分析,我们介绍了iCaRL的3个主要组成部分,以满足上述的3个标准。iCaRL的三个组成部分是:
- 通过示例的平均值最近邻规则(a nearest-mean-of-exemplars rule)来进行分类
- 基于herding来进行优先示例选择(prioritized exemplar selection)
- 使用知识蒸馏(knowledge distillation)和原型排练(prototype rehearsal)来进行表示学习
2 Method
在本节中,我们将介绍iCaRL的主要组件,并解释它们的组合如何实现真正的类增量学习。
2.1 Class-Incremental Classifier Learning
iCaRL以类增量形式从数据流中同时学习分类器和特征表示,数据流即样本集,其中集合的所有样本(exemples)都属于类 。
- Classification:对于分类,iCaRL依赖于从数据流中动态选择的示例图像的集合P1、....、Pt。到目前为止,每个观察到的类都有一个这样的示例集,iCaRL确保示例图像的总数不会超过固定参数L。算法1描述了将图像分类到目前为止观察到的类中的示例平均值分类器(mean-of-exemplars classifier),详见2.2。
- Training:对于训练,每当有新类的数据可用时,iCaRL就会调用一个更新程序(算法2,详见2.3和2.4)。该程序根据新的观察结果中的附加信息调整iCaRL的内部知识(the network parameters and exemplars,即网络参数和示例)。这也是iCaRL了解新类存在的方式。
- Architecture:iCaRL使用卷积神经网络CNN。我们将网络解释为可训练的特征提取器,然后是单个分类层,其sigmoid输出节点数与迄今为止观察到的类一样多。 所有特征向量都是L2归一化的,并且对特征向量的任何运算的结果也会被重新归一化。
我们用Θ表示网络的参数,分为固定数量的特征提取部分参数和可变数量的权重向量。
- Resource usage:优于增量性质,理论上iCaRL可以运行无限时间,不管将有多少个类。它的内存要求是特征提取参数的大小、K个实例图像的存储,以及已观察到的类的权重向量。 (iCaRL可以在不重新训练的情况下即时处理资源的增加:它不会简单地丢弃任何示例,除非内存限制迫使它这样做。)
2.2 Nearest-Mean-of-Exemplars Classification(离哪个类别的均值示例最近,就认为是哪个类别)
iCaRL使用最接近示例均值的分类策略。为了预测一个新图像x的标签y*,它计算了到目前为止观察到的每个类的原型向量μ1, . . . , μt,其中 μy = 1/|Py|Σp∈Py φ(p) 是类 y 的所有示例的平均特征向量。它还计算应分类的图像的特征向量,并为类标签分配最相似的原型:
2.3 Representation Learning
每当iCaRL获取新类的Xs、 . . . 、 Xt数据时,它就会更新其特征提取历程和示例集。
算法3列出了增量改进特征表示的步骤。
- 首先,iCaRL构建了一个增强训练集,该训练集由当前可用的训练样本和存储的示例组成。
- Next,为每个样本评估当前网络,并存储所有先前类别的网络输出结果。(不针对新类,因为网络尚未针对这些类进行训练)
- Finally,通过最小化损失函数(分类loss和蒸馏loss)来更新网络参数,该函数对于每个新图像,鼓励网络为新类输出正确的类指示器,并为旧类输出正确的类指示器,以重现存储在上一步(蒸馏损失)中的分数。
表示学习法的步骤类似于普通的网络微调:从先前学习的网络权重开始,它将训练集上的损失函数最小化。因此,可以使用标准的端到端学习方法,例如使用小批量的反向传播,但也可以使用最近的改进,例如dropout、adaptive stepsize selection或者batch normalization。
对普通微调有两个修改,旨在防止或至少减轻灾难性遗忘。
- 1)训练集得到了增强。它不仅包括新的训练样本,还包括存储的示例。通过这种方式,可以确保至少有一些有关以前所有类的数据分布信息进入训练过程。值得注意的是,对于此步骤,将示例存储为图像,而不是随着时间推移而过时的特征表示。
- 2)损失函数也得到了增强。除了标准分类损失(鼓励改进特征表示以允许对新观察的类进行良好分类)之外,它还包含蒸馏损失,这确保了在新的学习步骤中不会丢失先前学到的判别信息。
2.4 Exemplar Management
每当iCaRL遇到新类时,它都会调整其示例集。所有类都被平等对待,即,当到目前为止已经观察到t个类别,并且K是可以存储的示例总数时,iCaRL将为每个类使用m=K/t个示例。**通过这种方式,可以确保K个示例的可用内存预算始终得到充分利用,但永远不会超过。
exemplar有两个管理路径:
- 1)一个用于为新类选择示例(exempalr selection)
- 2)一个用于减小旧类示例集(exemplar set)的大小,即删除示例(exempalr reduction)
算法4描述了示例选择的步骤(exempalr selection)。
- 示例 p1、 . . . 、 pm 被选中并以迭代方式存储,直到达到目标数 m。
- 在迭代的每个步骤中,当前训练集的一个样本(one more example)被添加到示例集中,即导致所有示例的平均特征向量是最接近所有训练样本的平均特征向量。
- 因此,示例集合(exemplar set)实际上是一个优先级列表。它的要素顺序很重要。越在前面的越重要。
算法5介绍了删除示例的过程(exempalr reduction)。
- 它特别简单,为了将示例的数量从m′ 减少到 m,直接丢弃后面的示例 pm+1, . . . , pm′,只保留前面的示例 p1, . . . , pm。
3 总结
增量学习主要旨在解决灾难性遗忘(Catastrophic-forgetting)问题。
本文提出的方法(iCaRL)只需要使用一部分旧数据而非全部旧数据,就能同时训练得到分类器和数据特征,从而实现增量学习。它从每个旧类别的数据中选择一部分有代表性的数据(exemplar set,即示例集)来代表这个旧类别,然后把新类别的数据和这个旧类别的exemplar set进行混合来训练模型。模型训练结束后,再从新数据中挑选出部分exemplar来更新exemplar set。
section 2.1描述了一个整体的增量学习过程,包括分类和训练两个部分:
一、Classification分类测试过程:(详见section 2.2)
使用基于herding的最近邻示例方法对测试样本进行分类,距离哪个类别的平均示例特征向量最近,就属于哪个类别。
- 算法1 iCaRL Classify:
- 计算每个类别的示例的平均特征向量,使用最接近示例均值的分类策略,距离哪个平均示例最近,就属于哪一个类别。
二、Train训练过程
总训练过程是 算法2 iCaRL Incremental Train:
- 增量训练的过程中,使用现有训练样本输入数据Xs..Xt、旧知识的代表性示例集P、当前模型的参数Θ,三者共同更新当前模型的参数。
- 进行UpdateRepresentation、 ConstructExemplarSet、 ReduceExemplarSet三个过程。
每来一个新类,都要调用一个程序,对网络参数和示例集进行更新:
- 1)对网络参数的更新:特征表示的增量更新。(详见section 2.3 Representation Learning)
- 算法3 iCaRL Update Representation。
- 先使用当前类别的训练图片数据和旧类别的图片数据,训练更新参数Θ。其中,使用了分类loss和蒸馏loss。
- 算法3 iCaRL Update Representation。
- 2)对示例集的更新:选择示例、删除示例。因为内存有限,需要删除示例集的部分旧知识,以将新知识添加到示例集中。(详见section 2.4 Exemplar Management)
- 算法4 选择示例 iCaRL Construct Exemplar Set。
- 为新类别选择示例,构造示例集:依次选择m个新样本作为新类别的示例集,迭代选择的过程中,使得选择的所有示例的均值与真实样本均值的差异最小。
- 算法5 删除示例 iCaRL Reduce Exemplar Set。
- 对旧类别示例集进行删减:保留前面的m个示例,删除后面的示例。
- 算法4 选择示例 iCaRL Construct Exemplar Set。