论文地址:https://openaccess.thecvf.com/content_CVPR_2019/html/Hou_Learning_a_Unified_Classifier_Incrementally_via_Rebalancing_CVPR_2019_paper.html
代码:https://github.com/hshustc/CVPR19_Incremental_Learning
发表于:CVPR 19
Abstract
传统上,深度神经网络是离线训练的,依赖于事先准备好的大型数据集。这种模式在现实世界的应用中经常受到挑战,例如,涉及连续输入数据流的在线服务。最近,增量学习受到越来越多的关注,并被认为是解决上述实际挑战的一个有希望的方案。然而,据观察,增量学习存在一个基本的困难–灾难性遗忘,即适应新数据的模型往往导致在以前的任务或类别上的性能严重下降。我们的研究显示,新旧数据之间的不平衡是导致这一问题的关键原因。在这项工作中,我们开发了一个新的框架,用于逐步学习一个统一的分类器,例如,一个统一处理新旧两类的分类器。具体来说,我们结合了三个部分,余弦归一化、少遗忘制约和类间分离,以减轻不平衡的不利影响。实验表明,所提出的方法可以有效地重新平衡训练过程,从而获得比现有方法更优越的性能。在CIFAR-100和ImageNet上,在10个阶段的增量设置下,我们的方法可以分别减少6%和13%以上的分类误差。
I. Introduction
本文针对增量学习中三个问题设计了三个针对性的方法来进行缓解:
- 网络倾向于将输入样本预测为新学到的类。通过对输出层进行修改(Cosine Normalization)来解决。
- 网络容易遗忘旧有类的知识。通过设计一个更强的蒸馏损失(Less-Forget Constraint)来解决。
- 网络容易混淆新旧类中的相似类。通过设计一个额外的损失函数(Inter-Class Separation)来解决。
II. Cosine Normalization
正常来讲的输出层是这样的:
p
i
(
x
)
=
exp
(
θ
i
T
f
(
x
)
+
b
i
)
∑
j
exp
(
θ
j
T
f
(
x
)
+
b
j
)
p_{i}(x)=\frac{\exp \left(\theta_{i}^{\mathrm{T}} f(x)+b_{i}\right)}{\sum_{j} \exp \left(\theta_{j}^{\mathrm{T}} f(x)+b_{j}\right)}
pi(x)=∑jexp(θjTf(x)+bj)exp(θiTf(x)+bi) 模型倾向于去将样本预测成新类,这一现象从数学上来看就是因为新类的
θ
i
\theta_{i}
θi和
b
i
b_{i}
bi要更大些。为此,对输出层进行修改,修改后长这样:
p
i
(
x
)
=
exp
(
η
⟨
θ
ˉ
i
,
f
ˉ
(
x
)
⟩
)
∑
j
exp
(
η
⟨
θ
ˉ
j
,
f
ˉ
(
x
)
⟩
)
p_{i}(x)=\frac{\exp \left(\eta\left\langle\bar{\theta}_{i}, \bar{f}(x)\right\rangle\right)}{\sum_{j} \exp \left(\eta\left\langle\bar{\theta}_{j}, \bar{f}(x)\right\rangle\right)}
pi(x)=∑jexp(η⟨θˉj,fˉ(x)⟩)exp(η⟨θˉi,fˉ(x)⟩)
η
\eta
η为可学习参数,而
v
ˉ
=
v
/
∥
v
∥
2
\bar{v}=v /\|v\|_{2}
vˉ=v/∥v∥2,
⟨
v
ˉ
1
,
v
ˉ
2
⟩
=
v
ˉ
1
T
v
ˉ
2
\left\langle\bar{v}_{1}, \bar{v}_{2}\right\rangle=\bar{v}_{1}^{\mathrm{T}} \bar{v}_{2}
⟨vˉ1,vˉ2⟩=vˉ1Tvˉ2。最终效果如下:
说成人话就是,在改进之前,输出层新类的权重(红线)会比旧类(蓝线)大得多,导致网络倾向于将结果预测成新类。经过余弦标准化,权重都压到了一个固定的范围,此时权重偏差的影响就会小很多。
III. Less-Forget Constraint
本文提出了一种更强的蒸馏损失,以减缓网络对旧知识的遗忘,如下所示:
L
d
i
s
G
(
x
)
=
1
−
⟨
f
ˉ
∗
(
x
)
,
f
ˉ
(
x
)
⟩
L_{\mathrm{dis}}^{\mathrm{G}}(x)=1-\left\langle\bar{f}^{*}(x), \bar{f}(x)\right\rangle
LdisG(x)=1−⟨fˉ∗(x),fˉ(x)⟩ 也就是直接在特征层面进行约束(constraint on features),而不是简单地在输出结果层面(constraint on angles):
IV. Inter-Class Separation
本文还提到了一个问题,即类间混淆:
就以最简单的Cifar100为例,其是包含很多个超类的,超类下的各个类比较容易混淆。而在类增量的设置下,由于偏置问题(分类器倾向于预测新类),就会导致这一问题更加严重(相似类全部给预测成新类)。为此,本文提出了一种损失来缓解这一问题:
L
m
r
(
x
)
=
∑
k
=
1
K
max
(
m
−
⟨
θ
ˉ
(
x
)
,
f
ˉ
(
x
)
⟩
+
⟨
θ
ˉ
k
,
f
ˉ
(
x
)
⟩
,
0
)
L_{\mathrm{mr}}(x)=\sum_{k=1}^{K} \max \left(m-\langle\bar{\theta}(x), \bar{f}(x)\rangle+\left\langle\bar{\theta}^{k}, \bar{f}(x)\right\rangle, 0\right)
Lmr(x)=k=1∑Kmax(m−⟨θˉ(x),fˉ(x)⟩+⟨θˉk,fˉ(x)⟩,0) 大致思想就是,对于旧类的某个示例
x
x
x,如果某个新类样本响应与其相似,则设计损失去增大新样本响应与旧样本响应之间的差距,从而降低混淆的可能。