iCaRL论文解读
出处:iCaRL: Incremental Classifier and Representation Learning
注:本文是增量学习三大流派中知识重放派的基础文献。当前引用量1860。
1.问题简述
类增量问题的关键在于理解清楚流式在线训练和离线训练之间的区别。流式在线训练的过程中数据是源源不断的进入模型的,而离线训练则是在科研人员把数据集收集完整之后,一次性训练搜集到的数据来拟合任务。
假设我们想要训练一个可以识别猫、狗和鸡的一个神经网络。当我们搜集到了想要的猫狗鸡的数据集之后直接训练得到模型。但后来,我们想要在这个模型的基础上增加一个可以识别鸭的模型。现在的任务成了识别猫狗鸡鸭。我们只能把包含猫狗鸡鸭四种类别的数据集汇总起来重新训练才能完成这样的任务。当我们直接在原有的训练好的模型上直接训练识别鸭,就会导致一个类增量学习的著名问题:遗忘。训练识别鸭的时候模型只会去想办法拟合识别鸭子这个任务,从而破坏了先前已经被训练好的来识别猫狗鸡的权重参数。这就是流式在线训练面临的问题。根据这个问题,业界有了在线学习、终生学习、持续学习和增量学习这几个领域。
iCaRL是最符合人类学习想法的方案。我们人类学习的时候其实也会有所遗忘。我们今天学会了微积分,能够解决微积分的计算问题。明天学习了矩阵乘法,也能解决这一计算问题。但如果随着每天我们学习的新知识越来越多,不去复习的话,第一天和第二天学习的微积分和矩阵乘法是会忘记的。但我们数学能参加考试取得好成绩,其实是我们在不断的复习回顾重放以前学习的知识。我们如何复习呢,有一种方法是把每种知识最常考的题(也就是最经典的,能代表这类知识的题)收集起来,在可能会忘记的时候和其他类型知识的经典题目一起汇总练习。
2.算法解读
图2.1是模型分类的算法伪代码。其中x是输入图像。 p i p_{i} pi是在第i阶段训练的时候提取出来的典型样本集合。 φ \varphi φ是特征提取函数。首先,把 p i p_{i} pi集合的每一个样本都通过函数提取特征,然后求和除以这个集合的样本个数,得到 μ i \mu _{i} μi。最后将输入x放进 φ \varphi φ函数中来和每一个类别的 μ i \mu _{i} μi进行比较,最相似(距离最近)的类别就认为是x的类别。
接下来就是如何训练了。
输入代表的新来的第i类样本的集合。K代表的是内存可以容纳的总的训练数据集大小。 Θ \Theta Θ代表的是当前已经训练好的模型的参数(我们的任务也就是在旧有的训练好的 Θ \Theta Θ基础上得出新的可以适应更多功能的 Θ \Theta Θ)。同样, p i p_{i} pi是在第i阶段训练的时候提取出来的典型样本集合。首先我们需要UPDATEREPRESENTATION( X s , . . . , X t ; P , Θ X^{s},...,X^{t};P,\Theta Xs,...,Xt;P,Θ)函数来更新模型参数 Θ \Theta Θ。再来重新计算每个类别的榜样样本可以存m个(详见算法2的6排),然后将 p i p_{i} pi集合中的个数调整成为m个(详见算法2的8排和REDUCEEXEMPLARSET( P y , m P_{y}, m Py,m)),接下来就是将新数据的榜样样本选择出来(详见算法2的第11排和算法CONSTRUCTEXEMPLARSET( X y , m , Θ X_{y}, m, \Theta Xy,m,Θ))。
INCREMENTALTRAIN(
X
s
,
.
.
.
,
X
t
;
P
,
Θ
X^{s},...,X^{t};P,\Theta
Xs,...,Xt;P,Θ)算法伪代码如图2.2:
如图2.3我们先将榜样和新样本结合起来(详见上图注释form combined training set处的代码,也就是集合的并操作)。接下来是计算D集合中每个数据,分别属于1到类别的概率(详见上图注释store network outputs with pre-update parameters处的for循环)。最重要的就是这个损失函数。它脱胎于蒸馏损失(一种常见的特征提取技术)。
2.1知识蒸馏损失函数简要解读
知识蒸馏有两个概念,分别是teacher模型和student模型。Teacher模型是一个大型模型,权重参数复杂,用真实数据普通方式训练,拟合程度较高。Student模型是我们将要训练的模型,这个模型较小,也不复杂。知识蒸馏就是为了让student模型的输出来拟合teacher模型的输出。
相比以前,知识蒸馏引入了更加科学的softmax变种:
q
i
=
e
x
p
(
z
i
T
)
∑
j
e
x
p
(
z
j
T
)
q_{i}=\frac{exp\left ( \frac{z_{i}}{T} \right )}{\sum_{j}^{}exp\left ( \frac{z_{j}}{T} \right )}
qi=∑jexp(Tzj)exp(Tzi)
原本的softmax层后得到的是各类目的概率分布,由于使用指数函数会放大logits,使类目的概率差异变大,知识蒸馏时使用温度(T)对logits放缩,从而使softmax后的概率分布不要有太大的差异,即能学到原始类目间关系。
蒸馏损失函数公式:
L
=
α
(
−
∑
i
=
1
n
e
x
p
(
v
i
T
)
∑
j
e
x
p
(
v
j
T
)
log
e
x
p
(
z
i
T
)
∑
j
n
e
x
p
(
z
j
T
)
)
+
β
(
−
∑
i
=
1
n
c
i
log
e
x
p
(
z
i
T
)
∑
k
n
e
x
p
(
z
k
T
)
)
L=\alpha \left ( -\sum_{i=1}^{n}\frac{exp\left ( \frac{v_{i}}{T} \right )}{\sum_{j}^{}exp\left ( \frac{v_{j}}{T} \right )}\log\frac{exp\left ( \frac{z_{i}}{T} \right )}{\sum_{j}^{n}exp\left ( \frac{z_{j}}{T} \right )} \right )+\beta \left ( -\sum_{i=1}^{n}c_{i}\log \frac{exp\left ( \frac{z_{i}}{T} \right )}{\sum_{k}^{n}exp\left ( \frac{z_{k}}{T} \right )} \right )
L=α(−i=1∑n∑jexp(Tvj)exp(Tvi)log∑jnexp(Tzj)exp(Tzi))+β(−i=1∑ncilog∑knexp(Tzk)exp(Tzi))
其中
v
i
,
z
i
,
c
i
v_{i},z_{i},c_{i}
vi,zi,ci分别代表老师的logits,学生的logits,真实标签。由于teacher模型早已在先前训练好,所以
v
i
v_i
vi可以看作是常数,所以变量就只有学生的
z
i
z_i
zi,通过反向传播优化模型参数,就可以让student小模型学得teacher大模型的参数知识。
其中
δ
y
=
y
i
\delta _{y=y_i}
δy=yi是真实标签的置信度,也就是为0或者1。
q
i
y
q_i^y
qiy就代表第i个样本属于y类别的概率。计算公式如下:
g
y
(
x
)
=
1
1
+
exp
(
−
a
y
(
x
)
)
g_{y}\left ( x \right )=\frac{1}{1+\exp \left ( -a_{y}\left ( x \right ) \right )}
gy(x)=1+exp(−ay(x))1
其中
a
x
(
x
)
=
w
y
T
φ
(
x
)
a_{x}\left ( x \right )=w_y^T\varphi \left ( x \right )
ax(x)=wyTφ(x)
可以理解为是样本x属于y的概率。最后用反向传播技术更新参数。
算法CONSTRUCTEXEMPLARSET(图2.4)和算法REDUCEEXEMPLARSET(图2.5)伪代码如下:
3.实验
实验3.1:
数据集CIFAR-100。训练其中的包含的所有类别,一共100种。分成5种batch训练,分别为每种batch2,5,10,20,50个类别训练。例如,当为10的时候,可以理解为上述算法中的每次进入模型训练时的数据集为 X 1 , . . . , X 10 X^1,...,X^{10} X1,...,X10( X i X^{i} Xi代表i类别的数据集合)。
ImageNet ILSVRC 2012。分为两组,其中一组(iILSVRC-small)总共有100个类别,batch为10;另一组(iILSVRC-full)总共1000类别,batch为100。
实验指标是top-5 accuracy:将最后的表示概率的向量里面的数据进行排序,如果前5名中有正确类别,即为预测准确(也就是说top-1 accuracy要求最苛刻)。
实验结果:
图3.1从左到右从上到下分别是batch为2,5,10,20,50的准确率实验结果。
我们可以很清楚的看到finetuning的效果最差。这个funtuning其实就是直接将新类别数据喂进模型里训练,没做任何处理。所以会出现最显著的我们开篇所提到的模型的“遗忘”。
上图从左到右分别为iILSVRC-small和iILSVRC-full。可以看到,当总类别增加为1000的时候,fixed repr方法会比LwF.MC效果更好,尤其是在后面的batch。其中fixed repr可以理解为在第一batch训练之后,就不继续训练,直接固定住这次训练的参数,往后直接预测。
实验3.2:
这个混淆矩阵用来体现四种方法的预测偏见问题。可以看到iCaRL的预测分布比较均匀,LwFMC则相对来说更加偏见预测最近学习的类,而finetuning则只预测最近的类,相反fixed representation则只偏见的预测第一批。
实验3.3:
控制变量分析:
iCaRL效果好主要是因为一下三点:
- 榜样样本均值法用来分类
- 榜样样本用来表示学习
- 蒸馏损失方法用来表示学习
我们做如下配置来做对比实验:
hybrid1:将iCaRL的分类方法用原始分类方法来做,弃掉榜样样本均值法分类
Hybrid2:将iCaRL的训练用普通的损失函数来做,弃掉蒸馏损失函数
Hybrid3:将iCaRL变成原始分类和去掉蒸馏损失,同时弃掉均值样本分类和蒸馏损失函数。
为了做好对比试验,我们也会引入LwF.MC,这个方法引入了蒸馏损失,但是没有使用榜样样本。实验结果如下:
通过上图我们可以清晰的看到,横向比较,当在batch size较小的时候,hybrid1由于弃掉了榜样样本均值法分类,采用原始分类方法,导致效果下降明显。纵向来看,当batch size逐渐变大hybrid1的效果有了很显著的回升。由此我们可以得出,随着时间的流逝,类别classes的不断积累,榜样样本均值来做分类的idea,并没有给我们的模型带来太大的提升。Hybrid2在训练时不用蒸馏损失函数来优化参数,横向来看,比iCaRL完全体又略微的提升,但纵向来看,他的效果提升不够明显,在50classes的时候比iCaRL完全体和hybrid1效果差了一些。由此我们可以得出,随着类别classes的不断积累,由于去掉了蒸馏损失函数,导致效果不太好,所以蒸馏损失函数的引入对iCaRL的模型又很大的提升。Hybrid3(只是引入了榜样样本,训练的时候的没引入蒸馏损失函数,同时也没引入榜样样本均值法来做分类)和LwF.MC(没有引入榜样样本,只引入了蒸馏损失函数)的比较我们可以看出榜样样本和蒸馏损失函数对模型的影响。
实验3.4:
接下来我们做一个实验来判断我们榜样样本的选择策略的效果如何。在此我们先引入一个度量学习技术nearest class mean classifier。
3.4.1 NCM简要解读
NCM提出了新的度量两个向量的相似度的方法。
d
M
(
x
,
x
′
)
=
(
x
−
x
′
)
T
W
T
(
x
−
x
′
)
=
∥
W
x
−
W
x
′
∥
2
2
d_{M}\left ( x,{x}' \right )=\left ( x-{x}' \right )^{T}W^{T}\left ( x-{x}' \right )=\parallel Wx-W{x}'\parallel^{2}_{2}
dM(x,x′)=(x−x′)TWT(x−x′)=∥Wx−Wx′∥22
从这个公式我们可以看出,这个度量相似度的关键在于学得W参数。本文从概率的角度来讨论相似度。
p
(
c
∣
x
)
=
exp
(
−
1
2
d
W
(
x
,
μ
c
)
)
∑
c
′
C
exp
(
−
1
2
d
W
(
x
,
μ
c
′
)
)
p\left ( c\mid x \right )=\frac{\exp \left ( -\frac{1}{2}d_{W}\left ( x,\mu _{c} \right ) \right )}{\sum_{{c}'}^{C}\exp \left ( -\frac{1}{2}\tfrac{d}{W}\left ( x,\mu _{{c}'} \right ) \right )}
p(c∣x)=∑c′Cexp(−21Wd(x,μc′))exp(−21dW(x,μc))
这里指的是第i类样本的均值。
为了学习投影矩阵W,我们最大化训练数据集输入图像的正确预测的对数似然性。
L
=
1
N
∑
i
=
1
N
ln
p
(
y
i
∣
x
i
)
L=\frac{1}{N}\sum_{i=1}^{N}\ln p\left ( y_{i}\mid x_{i} \right )
L=N1i=1∑Nlnp(yi∣xi)
目标函数梯度为:
Δ
W
l
=
1
N
∑
i
=
1
N
∑
i
=
1
c
α
i
c
W
z
i
c
z
i
c
T
\Delta _{W}l=\frac{1}{N}\sum_{i=1}^{N}\sum_{i=1}^{c}\alpha _{ic}Wz_{ic}z_{ic}^{T}
ΔWl=N1i=1∑Ni=1∑cαicWziczicT
这里 α i c = p ( c ∣ x i ) − ∥ y i = c ∥ , z i c = μ c − x i \alpha _{ic}=p\left ( c\mid x_{i} \right )-\left \| y_i=c \right \|,z_{ic}=\mu _c-x_i αic=p(c∣xi)−∥yi=c∥,zic=μc−xi
回到我们的对比实验,上图为实验结果,NCM用复杂的方法,但是效果只比iCaRL好一点。反过来,我们用简陋的度量相似度方法的效果和NCM的复杂方法的效果相比不相上下,这就可以得出结论,我们选择榜样样本的方法效果非常好。
上图可以看出,iCaRL和NCM在可用内存较高的时候效果相当。在可用内存较低的时候iCaRL效果一般。这个实验结果其实是可以预料的。我们榜样样本较少的时候,iCaRL的选榜样样本的策略无法发挥效果,而且还用的相对简陋的方法来度量进而分类。而NCM用了复杂的方法,引入了更加科学的度量学习技术。从这里也可以看出,当我们榜样样本的质量或数量不够满意的时候,度量学习技术就有了用武之地了。