小全读论文《Learning a Unified Classifier Incrementally via Rebalancing》CVPR2019
一、Motivation
本文关注的问题是增量学习,具体来说是带exemplar的增量学习,即允许保留少量的旧类别的数据。作者认为,在这种设置之下,在学习新类别的时候,会存在 严重的样本不均衡问题。这种不均衡的情况会带来以下负面的影响(即下图箭头左侧图例所示):
1)分类器权重量级不均衡:对于分类器权重参数而言,新类别的量级会明显地比旧类别要高;
2)旧类别的分类器权重和样本特征会产生偏差:当学习新类别的信息时,旧类别的一些信息(knowledge)会被遗忘,包括分类器权重,样本的特征等
3)混淆性:当学习新类别的时候,新类别的分类器权重可能会与旧类别的权重很接近
针对上述存在问题,文章提出了针对性的解决方案,包括:
1)采取基于余弦相似性的分类器:消除分类器权重量级的影响;
2)***加入约束项防止遗忘(less-forget constrain)***:用来更好地保留旧类别的信息;
3)类间隔离:将旧类别的分类器权重与新类别的权重隔离开
二、 Approach
完整框架
本文关注的增量学习设置是允许存储少量的旧类别的样本,在这样的设置下,会存在一个严重的样本不均衡的问题,样本不均衡也带来了上述三点的负面影响,文章有针对性地进行了建模以消除这些影响,具体的框架图如下。
重要组件(Component)
基于余弦相似性的分类器(Cosine Normalization Based Classifier)
在传统的CNN里面,每一个类别的置信度是通过下列方式得到:
当样本不均衡的时候,模型会更倾向于预测成新类别,原因是新类别的分类器权重和偏差项的量级比旧类别的要大,为了更好地阐述这一现象,文章对这两项进行了一个统计说明,结果如图
因此,为了消除这样的影响,本文采取了基于余弦相似性的分类器,消除量级的影响,具体如下,
其中, v ˉ = v ∣ ∣ v ∣ ∣ 2 , ⟨ v 1 , v 2 ⟩ = v 1 T v 2 \bar{v}=\frac{v}{||v||_2},\langle v_1, v_2 \rangle=v_1^Tv_2 vˉ=∣∣v∣∣2v,⟨v1,v2⟩=v1Tv2, η \eta η是一个学习参数(一个值),因为 , ⟨ v 1 , v 2 ⟩ < = 1 ,\langle v_1, v_2 \rangle<=1 ,⟨v1,v2⟩<=1,如果后面直接接一个softmax会导致输出的概率都很低,因此通过乘上一个因子 η \eta η,使得softmax后的最大概率值可以接近1。
增量学习中,一般都会引入一个知识蒸馏的loss,本文将该loss进行了修改:
其中 f ∗ , θ ∗ f^*, \theta^* f∗,θ∗分别是旧模型的特征提取器和分类器参数, ∣ C o ∣ |C_o| ∣Co∣表示旧类别的数量
注意:这个知识蒸馏的loss可认为是为了保存旧模型中***样本特征和分类器参数之间的角度***
更小遗忘约束(less-forget constrain)
上述的蒸馏损失函数(也可认为是一种约束项)
L
d
i
s
C
(
x
)
L_{dis}^{C}(x)
LdisC(x)只是保证样本特征与分类器参数之间的角度,但是会存在一个问题,如上图左侧所示,样本特征和分类器参数的角度保持不变的情况下,样本特征和分类器参数本身却与原来的状态相去甚远了,因此旧模型的信息其实在很大程度上就会被损失掉。
因此,为了避免上述情况,本文提出了一个更加严格的约束,即保证样本在新模型的特征与旧模型的特征接近(如上图右侧所示),因此本文提出了一个更小遗忘约束(less-forget constraint)
这一个约束项是为了保证样本在新模型和旧模型上的特征的角度不能差别太大。
!!!疑问问题:本文同时当新增的类别数量不同的时候(譬如每次新增10类和新增100类),保留旧模型的信息的程度是不一样的?因此对这项约束项需要加上一个系数
λ
=
λ
b
a
s
e
∣
C
n
∣
∣
C
o
∣
\lambda=\lambda_{base}\sqrt{\frac{|C_n|}{|C_o|}}
λ=λbase∣Co∣∣Cn∣,
∣
C
n
∣
,
∣
C
o
∣
|C_n|,|C_o|
∣Cn∣,∣Co∣分别表示新旧类别的数量。
而我的理解与此刚好相反,当我们新增的类别更多的时候,我们旧类别的数量是相对更少的,也就是说旧类别的信息是相对较少的,这时候需要保留旧模型信息的程度也自然可以适当变小,系数
λ
\lambda
λ应该变小,反之则变大
!!!探究问题:这个约束项对于CNN的学习是否约束力度过强?
这个约束项会使得新模型的参数尽可能地与旧模型的参数接近。原因是,极端来看,若新模型的参数和旧模型的参数完全是一致的,那么该loss项就为0。因此强制要求样本的新旧模型的特征要很接近的约束是否会有太强的约束力,导致模型无法很好地去基于当前数据去finetune他的CNN参数
类间隔离(Inter-Class Separation)
作者指出,在增量学习中,类别的分类器权重之间会存在一个严重的混淆性,特别地,即新类别的分类器权重会与旧类别的权重比较接近
因此,文章提出了利用旧类别保留的样本去解决这个问题。具体地:
对于旧类别的保留的样本
x
x
x,设计了下列ranking loss约束项:
其中m表示表示margin的阈值, θ ˉ ( x ) \bar{\theta}(x) θˉ(x)表示 x x x对应类别的分类器权重, θ ˉ k \bar{\theta}^k θˉk表示 x x x对应的第top- K K K个难样本类别的分类器权重,这里, x x x的难样本类别定义为在***新类别***中, x x x的输出响应值最高的类别。
!!!疑问: θ ˉ ( x ) \bar{\theta}(x) θˉ(x)表示的是分类器参数,它应该是与x无关的,所以这个符号表示是否存在问题?笔者认为应该写成 θ ˉ \bar{\theta} θˉ
三、Ablation Experiment
这里只展示对比实验的结果
CN表示基于余弦相似性的分类器
LC表示less-forget constraint
IS表示inter-class separation
可见每一个模块均能带来提升,CN和LC带来的提升效果比较显著。