一、需要解决的问题
作者首先提出了一个假设,随着增量步骤的不断增多,类别数会不断增加。最后一层全连接层存在偏差,会使预测的分类数据更加偏向于新类。
验证实验
第一、将cifar-100的数据分为五个批次,每个批次20个类,使用example+新20类进行训练
对于最后一个增量步骤,通过混淆矩阵,我们可以看出:模型对于新类的预测值很高,基本偏向于新类。
理想情况应该符合下图:
该图是先进行训练,再冻结特征提取层,然后使用全部数据包含未使用的旧类样本去训练完全连接层得到的上界。
第二、冻结特征层,再使用所有数据(包含未使用的旧类数据)去训练全连接层,准确率明显提高
综上,fc层会有选择的偏好,随着类别数量的不断增加,每个旧类的样本数量会逐渐减少。特征提取层提取出来的每个旧类的特征相对于新类来说会减少很多,所以分类器会倾向于选择新类。所以改论文就是对分类器进行训练,矫正这种偏好。(个人想法:可不可以给旧类样本增加标签去区分新旧类)
二、算法介绍
总体流程:
所有的数据都被分为两类,训练集和验证集
1、训练集用于CNN模型
2、验证集用于偏差矫正层去矫正fc层的偏好
验证集的数据独立于训练集,不用于进行CNN模型的训练
阶段一 训练CNN模型
常规操作
使用新旧数据结合
distilling loss:
T=1
Ok(x):图像x属于第k类的大小数值
softmax cross entropy:
pk(x)是第k类的输出概率( softmax of logits)
阶段二 训练偏置矫正层
因为分类器偏向于新类别,所以对新类别的输出进行矫正。因为验证集比较小,所以应该选择一个比较简单的模型去进行学习。所以引入线性模型,只有两个参数。引入α、β两个可学习的参数。这两个参数在新类中是共享的。
Ok表示第k类的分类器输出logits,属于k类的数值
1、如果属于旧类,则不用进行学习矫正
2、如果属于新类,则进行矫正时,将特征提取器的参数和全连接层分类器冻结,用验证集去进行训练
loss函数如下(交叉熵):