Zhangzhe's Blog

The projection of my life.

0%

iCaRL: Incremental Classifier and Representation Learnin

URL

TL;DR

  • 本文提出一种类别增量学习算法,在类增量学习中同时学习分类和特征表示,最后得到一个表征器 + 部分旧任务的少量典型样例,缓解灾难性遗忘的问题。
  • 本文对类别增量学习进行了定义,同时满足如下三条规则的学习任务才是一个类别增量学习:
    • 当新的类别在不同时间出现,它都是可训练的。
    • 任何时间都在已经学习过的所有类别中有很好的分类效果。
    • 计算能力与内存应该随着类别数的增加固定或者缓慢增长。
  • 本文中表征学习使用的是 NME(Nearest-Mean-of-Exemplars)算法,而不是使用神经网络直接分类。

Algorithm

icarl_1.png

  • 本算法使用最近邻表征中心法进行分类,而不是使用神经网络传统的 argmax、sigmoid 分类,因为后者更容易引入灾难性遗忘。

icarl_2.png

  • 类别增量学习的核心:1 ~ s-1 表示旧任务,s ~ t 表示新任务,K 表示可缓存的最大旧任务样本数量,P 表示已缓存的旧任务样本集,具体步骤如下(重复直到所有任务训练完):
    1. 使用新任务样本 Xs,...,XtX^s,...,X^t 和旧任务缓存样本 P\mathcal{P} 联合起来使用 NME 分类方法训练模型参数。
    2. 由于任务数变多,所以需要重新计算每个任务可以缓存的最大样本数 m=Ktm = \frac{K}{t}
    3. 将之前选的旧任务(1 ~ s)的缓存样本减少,每一类减少到 m 个样本(根据到样本中心的距离排序,取 top m)。
    4. 对新任务 (s ~ t) 逐类样本进行采样,根据取出剩余样本到样本中心的距离排序,逐一取样本直到取到 m 个。

icarl_3.png

  • gy(x)=11+exp(wyTφ(x)), y1,...,tg_y(x) = \frac{1}{1 + exp(-w_y^T\varphi(x))},\ y\in{1,...,t},其中 φ(x)\varphi(x) 表示表征输出。
  • 最终的 Loss 是新任务上的分类 Loss + 旧任务上的蒸馏 Loss(注意蒸馏 Loss 的写法)。

icarl_4.png

  • 对新任务 (s ~ t) 逐类样本进行采样,根据取出剩余样本到样本中心的距离排序,逐一取样本直到取到 m 个。

icarl_5.png

  • 将之前选的旧任务(1 ~ s)的缓存样本减少,每一类减少到 m 个样本(根据到样本中心的距离排序,取 top m)。

Thought

  • 论文写的很好,公式表达十分清晰,而且还开源了,比 DGR 不知道高到哪里去了…