Few-shot Lifelong Learning

https://arxiv.org/pdf/2103.00991

Few-shot Lifelong Learning,AAAI,2021

总结:针对小样本下的class increatmental,或者称之为continual learning场景,作者提出了FSLL模型。为了模拟calss increatmental,作者设定了多个session,每个session类别集合都不相交。在session 1, 每个类别都有大量样本,按照常规小样本学习方式进行训练(即预训练模型)。在之后t>1的每个session,每个数据集只包含C各类别,每个类别只有K个样本。为了实现continual learning,防止灾难遗忘并提高模型精确度,作者采取了四个措施:1. 部分更新参数,2.正则化,3.最大化原型距离,4.添加自监督辅助任务。

1. 简介

1.1 摘要

Many realworld classification problems often have classes with very few labeled training samples. Moreover, all possible classes may not be initially available for training, and maybe given incrementally. Deep learning models need to deal with this two fold problem in order to perform well in reallife situations. In this paper, we propose a novel Few-Shot Lifelong Learning (FSLL) method that enables deep learning models to perform lifelong / continual learning on few-shot data. Our method selects very few parameters from the model for training every new set of classes instead of training the fullmodel. This helps in preventing overfitting. We choose the few parameters from the model in such a way that only the currently unimportant parameters get selected. By keeping the important parameters in the model intact, our approach minimizes catastrophic forgetting. Furthermore, we minimize the cosine similarity between the new and the old class prototypes in order to maximize their separation, thereby improving the classification performance. We also show that integrating our method with self-supervision improves the model performance significantly. We experimentally show that our method significantly outperforms existing methods on the miniImageNet, CIFAR-100, and CUB-200 datasets. Specifically, we outperform the state-of-the-art method by an absolute margin of 19.27% for the CUB dataset.

在许多真实分类问题中,经常出现只有少量有标签训练样本,甚至一些类别在训练时是unavailable的。为了能够适应这种场景,深度学习模型需要处理好这个two-fold问题。本文中,作者提出了一种原生的小样本学习算法,帮助深度学习模型在小样本场景下实现lifelong/continual学习。对于每个新的类别集合,作者的方法只选取模型少量参数用于训练而不是同时训练整个模型,这样可以有效防止过拟合。每轮参数选取的方式是:选取当前情景下不重要的那些参数。通过保持模型中重要参数不变,作者的方法可以最小化灾难遗忘。另外,作者通过最小化新类别原型和旧类别原型之间的余弦相似度来最大程度地分离它们,从而改善了分类性能。作者还表明了将自监督整合到他们的方法中可以有效提高模型性能。miniImageNet,CIFAR-100和CUB-200上的大量实验表明我们的方法由于现有方法,尤其在CUB数据集上的表现比当前最好方法高19%多。

1.2 本文工作

现实世界的深度学习任务面临两个问题:(1)有标签数据数量比较少,而人工标记的成本很大,这要求模型能够适应小样本场景;(2)不断有新的类别添加进来,因此需要模型能够lifelong/continual学习,来适应这种场景。

注:lifelong-learning,即在一系列类别互不相交的任务上训练模型,为所有类别学习一个通用的分类器,这种称之为class-incremental setting of lifelong learning;另一种更简单的设置是为每个任务单独学习一个分类器,称为task-incremental setting。

本文作者提出了一个用于小样本class-incremental学习的模型FSCIL。这种设定下,一方面由于只有少量有标签样本会导致模型过拟合;另一方面模型在新类别集合上训练时,不会接触到之前旧的类别,这会导致灾难遗忘

1.3 问题定义

FSCIL设定下,有一系列有标签数据集D(1),D(2),D^{(1)},D^{(2)},···,其中D(t)={(xj(t),yj(t))}j=1D(t)D^{(t)}=\{(x_j^{(t)},y_j^{(t)})\}_{j=1}^{|D^{(t)}|}L(t)L^{(t)}表示第ttht^{th}训练集涉及到的类别集合,并且对于任意iji\neq jL(i)L(j)=L^{(i)}\cap L^{(j)}=\empty。第一个训练集D(1)D^{(1)}每个类别都有充足的样本,其余的训练集D(t>1)D^{(t>1)},包含C个类别,每个类别包含K个样本。

模型依次在D(1),D(2),D^{(1)},D^{(2)},···上训练,并且D(t)D^{(t)}只出现在ttht^{th}training session。在D(t)D^{(t)}上训练完后,模型分别计算L(1),,L(t)L^{(1)},···,L^{(t)}这t个类别集合上的损失。

2. 方法

网络包含两部分:ΘF\Theta_F特征提取器,ΘC\Theta_C全连接分类器。首先在D(1)D^{(1)}数据集上预训练,此时采用的就是常规的小样本学习模式,损失函数定义如下:

LD(1)(x,y)=FCE(ΘC(ΘF(x)),y)(1)L_{D^{(1)}}(\mathrm{x}, y)=F_{C E}\left(\Theta_{C}\left(\Theta_{F}(\mathrm{x})\right), y\right)\tag 1

其中(x,y)D(1)(x,y)\in D^{(1)}FCEF_{CE}表示交叉熵损失。训练完毕后,丢弃ΘC\Theta_C的参数,保留ΘF\Theta_F参数用于作为其他数据集上的初始参数,并且基于此计算每个D(1)D^{(1)}中每个类别的原型:

Pr[c]=1Nck=1NI(yk=c)(ΘF(xk))(2)\operatorname{Pr}[c]=\frac{1}{N_{c}} \sum_{k=1}^{N} \mathbb{I}_{\left(y_{k}=c\right)}\left(\Theta_{F}\left(\mathrm{x}_{k}\right)\right)\tag 2

为了实现continual learning并进一步提高模型精度,作者使用了下面四种方法。

一、部分更新

在session t>1t>1阶段,选取ΘF\Theta_F中少量不重要(绝对值小)的参数进行训练,称之为PSTtP_{ST}^t。具体来说,为特征提取器ΘF\Theta_F每一层分别设置一个阈值,将小于这个阈值的参数作为PSTtP_{ST}^t,其余的参数作为知识参数保留,称之为PKRtP_{KR}^t,在训练阶段PKRtP_{KR}^t会被冻结。

由于在训练阶段只更新那些不重要的参数,因此这种方法能够最大程度保留之前训练过程中学习到的知识,缓解灾难遗忘。PSTtP_{ST}^t采用三元损失方式进行训练:

LTL(xi,xj,xk)=max(d(ΘF(xi),ΘF(xj))d(ΘF(xi),ΘF(xk)),0)(3)\begin{array}{r} L_{T L}\left(x_{i}, x_{j}, x_{k}\right)=\max \left(d\left(\Theta_{F}\left(x_{i}\right), \Theta_{F}\left(x_{j}\right)\right)-\right. \\ \left.\quad d\left(\Theta_{F}\left(x_{i}\right), \Theta_{F}\left(x_{k}\right)\right), 0\right) \end{array}\tag 3

其中xi,xj,xkx_i,x_j,x_kD(t>1)D^{(t>1)}中的图片,yi=yj,yiyky_i=y_j,y_i\neq y_kLTLL_{TL}表示三元损失,dd表示欧式距离。

二、正则化

作者还希望当前session中可训练参数能够被适度更新,即不要一下次变化太大。为了实现这一效果,作者对原始参数和更新后的参数添加了一个正则化损失:

LRL=i=1Nptwitwit11(4)L_{R L}=\sum_{i=1}^{N_{p}^{t}}\left\|w_{i}^{t}-w_{i}^{t-1}\right\|_{1}\tag 4

其中NptN_p^{t}表示当前session下可训练参数PST(t)P_{ST}^{(t)}的数量,witw_i^twit1w_i^{t-1}分别表示更新后和更新前的参数值。

三、最大化原型间距离

另外,为了提高模型性能,作者在不同类别原型之间添加一个余弦相似度损失,最小化older类别原型PrprevPr^{prev}和新类别PrtPr^t原型之间的相似度:

LCL=i=1NPrLj=1NPrprvFcos(Prt[i],Prprev[j])(5)L_{C L}=\sum_{i=1}^{N_{P r}^{L}} \sum_{j=1}^{N_{P r}^{p r v}} F_{\cos }\left(\operatorname{Pr}^{t}[i], \operatorname{Pr}^{p r e v}[j]\right)\tag 5

其中PrtPr^t表示D(t)D^{(t)}中涉及的类别的原型,PrprevPr^{prev}表示之前训练过程中涉及到的所有类别的原型,FcosF_{cos}表示余弦距离。

这样最终的模型损失函数定义为:

L(D(t>1))=LTL+LCL+λLRL(6)L\left(D^{(t>1)}\right)=L_{T L}+L_{C L}+\lambda L_{R L}\tag 6

其中λ\lambda为超参,决定正则损失的权重。

四、自监督辅助任务

作者在D(1)D^{(1)}数据集上添加一个辅助的自监督损失,进一步提高模型性能。具体来说,在ΘF\Theta_F之后添加了一个和ΘC\Theta_C并行的rotation预测网络ΘR\Theta_R。通过将训练样本旋转0,90,180,270度,训练ΘR\Theta_R来预测样本旋转角度。这样D(1)D^{(1)}上的整体损失定义如下:

LD(1)(x,y)=FCE(ΘC(ΘF(x)),y)+FCE(ΘR(ΘF(x)),yr)(7)\begin{array}{r} L_{D^{(1)}}(\mathrm{x}, y)=F_{C E}\left(\Theta_{C}\left(\Theta_{F}(\mathrm{x})\right), y\right)+ \\ F_{C E}\left(\Theta_{R}\left(\Theta_{F}(\mathrm{x})\right), y^{r}\right) \end{array}\tag 7

其中yTy^T表示图片旋转角度。

3. 实验

3.1 实验设置

一、数据集:CIFAR-100,miniImageNet,CUB-200

对于CIFAR-100,miniImageNet数据集,分别选取60、40个类别作为base classes和new classes。对于每个小样本训练集合,使用5-way 5-shot设定,因此一共有1个base training set和8个few-shot training set。

对于CUB-200,分别选取100、100个类别作为base classes和new classes。对于每个小样本训练集合,使用10-way 10-shot设定,因此一共有1个base training set和10个few-shot training set。

每个类别随机选取5个样本用于训练,其余样本用于测试。

二、实验细节

采用ResNet-18架构作为主体,ResNet-18的最后一层作为分类器ΘC\Theta_C,其余层作为特征提取器ΘF\Theta_F

D(1)D^{(1)}数据集上的预训练:学习率0.1,mini-batch size128,30、40轮训练后学习率分别调低为0.01和0.001,训练50个epoch。训练完成后丢弃ΘC(1)\Theta_C^{(1)}

Dt>1D^{t>1}上微调特征提取器参数:训练30个epoch,学习率1e41e^{-4}1e31e^{-3} for CUB-200),每层删选参数的阈值为选取10%,mini-bath包含所有样本。

3.2 实验结果

一、CUB-200数据集

实验过程中,作者发现初始学习率设置为0.01效果有所提升。FSLLFSLL^*表示初始学习率设置为0.01;FSLL+SSFSLL^*+SS表示使用自监督学习。

二、miniImageNet和CIFAR-100

3.3 消融实验

一、训练参数比例,去除正则化

session11下的实验结果,横轴表示该session下保留参数比例,纵轴表示精度,黑线表示去除正则化。

二、正则损失超参数 λ\lambda

三、余弦相似度损失的重要性

去掉余弦相似度后,CUB-200数据集S11S_{11}上的准确度从45.55%降低到了44.32%。

四、自监督辅助任务

在t>1的session中使用自监督辅助任务。session11上的准确度为54.34%低于55.82%,所以在t>1的session中使用自监督学习没有效果。

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2021-2022 Yin Peng
  • 引擎: Hexo   |  主题:修改自 Ayer
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信