深度学习(增量学习)——ICCV2022:Contrastive Continual Learning

文章目录

  • 前言
  • Contrastive Continual Learning
  • 实验
  • 思考

前言

CVPR2022上的增量文章有些繁杂,具体体现在不少文章提出了新的实验设置来评估模型,不是很合个人胃口,故总结的不多,但有一篇将因果推断与增量结合的文章很有趣,文章名为《Distilling Causal Effect of Data in Class-Incremental Learning》,ICCV2022上的增量文章比较常规,有不少工作将自监督与增量做结合,本文将总结《Contrastive Continual Learning》


Contrastive Continual Learning

一般而言,有监督算法会逐步过滤掉与任务无关的特征,例如雪梨和苹果的二分类任务,特征提取器器只需要编码颜色相关的特征,即可让分类器区分两者,这表明有监督编码的特征较为有限。如果我们能训练一个能编码冗余特征的特征提取器,即使特征提取器遗忘了部分特征,这些冗余特征可能也可以用来刻画新的类别,基于此,作者提出了使用自监督训练具有冗余特征的特征提取器,同时利用知识蒸馏抵抗灾难性遗忘。

设当前batch中共有 N N N当前任务的图像,对这 N N N张图像分别施加两次数据增强,得到 2 N 2N 2N张图像,这 2 N 2N 2N张图像组成集合 S S S p i p_i pi为图像 i i i的正例集合,图像 i i i的正例集合包含图像 i i i数据增强后得到的图像,以及与图像 i i i同一类的图像,特征提取器针对图像 i i i的输出为 z i z_i zi,则Contrastive Continual Learning的损失函数为
L a s y m s u p = ∑ i ∈ S − 1 ∣ p i ∣ ∑ j ∈ p i log ⁡ exp ⁡ ( z i ∗ z j / T ) ∑ k ≠ i exp ⁡ ( z i ∗ z k / T ) (1.0) L_{asym}^{sup}=\sum_{i \in S}\frac{-1}{|p_i|}\sum_{j\in p_i}\log \frac{\exp(z_i*z_j/T)}{\sum_{k \not= i }\exp(z_i*z_k/T)}\tag{1.0} Lasymsup=iSpi1jpilogk=iexp(zizk/T)exp(zizj/T)(1.0)
其实就是InfoNCE的变种, T T T为超参数,值得注意的是,旧样本只会作为对比学习中的负例,只参与计算 ∑ k ≠ i exp ⁡ ( z i ∗ z k / T ) \sum_{k \not= i }\exp(z_i*z_k/T) k=iexp(zizk/T)中,如下所示(IRD是知识蒸馏loss,下文会介绍),作者发现这么做效果会更好
深度学习(增量学习)——ICCV2022:Contrastive Continual Learning_第1张图片
M M M为batch中的图像集合,则上图中的 L s u p L^{sup} Lsup
L s u p = ∑ i ∈ M − 1 ∣ p i ∣ ∑ j ∈ p i log ⁡ exp ⁡ ( z i ∗ z j / T ) ∑ k ≠ i exp ⁡ ( z i ∗ z k / T ) L^{sup}=\sum_{i \in M}\frac{-1}{|p_i|}\sum_{j\in p_i}\log \frac{\exp(z_i*z_j/T)}{\sum_{k \not= i }\exp(z_i*z_k/T)} Lsup=iMpi1jpilogk=iexp(zizk/T)exp(zizj/T)

为了抵抗灾难性遗忘,作者引入了知识蒸馏,针对图像 i i i,可以得到一个向量
P = [ P i , 1 , P i , 2 , . . . . P i , i − 1 , P i , i + 1 , . . . . P i , 2 N ] (2.0) P=[P_{i,1},P_{i,2},....P_{i,i-1},P_{i,i+1},....P_{i,2N}]\tag{2.0} P=[Pi,1,Pi,2,....Pi,i1,Pi,i+1,....Pi,2N](2.0)
其中
P i , j = log ⁡ exp ⁡ ( z i ∗ z j / T ) ∑ k ≠ i 2 N exp ⁡ ( z i ∗ z k / T ) P_{i,j}=\log \frac{\exp(z_i*z_j/T)}{\sum_{k \not= i }^{2N}\exp(z_i*z_k/T)} Pi,j=logk=i2Nexp(zizk/T)exp(zizj/T)
对于图像 i i i,设旧模型输出的式2.0为 P o P_{o} Po,新模型输出的式2.0为 P n P_{n} Pn,则知识蒸馏的loss为
L I R D = − ∑ i = 1 2 N P o log ⁡ P n (3.0) L_{IRD}=-\sum_{i=1}^{2N}P_{o}\log P_{n} \tag{3.0} LIRD=i=12NPologPn(3.0)

总的损失函数为
L = L a s y m s u p + λ L I R D L=L_{asym}^{sup}+\lambda L_{IRD} L=Lasymsup+λLIRD
λ \lambda λ为超参数,上述流程为训练特征提取器,特征提取器训练完毕后,作者将freeze特征提取器,同时在顶层添加分类器,利用保留的旧数据和当前数据训练分类器,保存的旧数据总量是固定的。


实验

为了验证自监督相比于有监督,可以编码更多的特征,作者做了一个实验,持续学习完毕后,将特征提取器固定,同时提供所有的训练数据训练分类器,在CIFAR10上,与有监督算法的对比如下图
深度学习(增量学习)——ICCV2022:Contrastive Continual Learning_第2张图片
我们看右边两幅图,这幅图表示学习完task i任务后,固定特征提取器,利用CIFAR10所有数据训练分类器,在CIFAR10上的准确率,可见自监督学习的确可以编码部分冗余特征,并且这类冗余特征有助于刻画后续的任务特征。

与其他method的实验对比如下图
深度学习(增量学习)——ICCV2022:Contrastive Continual Learning_第3张图片


思考

增量学习关注的是如何通过某种策略保留学到的旧知识,这篇文章并没有对此提出新的策略,反而是提出了如何让学到的特征更有助于编码新知识(这个问题是难以解决的,只能碰运气,比如新任务出现了严重的domain shift),换句话说,这篇文章只是给了一个策略用于构造较为鲁棒的特征空间,感觉上并没有解决增量学习的根源问题,有点写作文离题的感觉。但总体而言是值得发表的,这篇文章给人的insight便是自监督得到的模型能编码一些冗余特征,这类冗余特征可能有助于编码新任务。

自监督一般会引入额外的数据增强,如果有监督使用此类数据增强,是否也能让模型编码冗余特征?

你可能感兴趣的:(深度学习,深度学习,机器学习,神经网络)