持续学习旨在按顺序学习任务,对旧学习样本的存储具有(通常很严格的)约束,而不会遭受灾难性的遗忘。
本文提出了一种预见式的持续学习(一种新颖的设定,具体在introduction里会介绍对比):一般传统的持续学习是在过去和现在的类别上评价模型,而本文还考虑了未来的类别【即没有任何训练样本】
提出的是Ghost Model:一种想法来自于zero-shot learning的基于表征的模型【具体策略在第三个板块】
持续学习模型通过逐步处理一系列任务而与传统模型形成对比,由于它们可以保留的训练数据受到限制(通常很严格),因此这些模型必须避免灾难性地忘记过去的任务,同时还要接受新任务。
一些不同类型方法避免遗忘:(以下方法都可以在文中找到一些论文链接,且他们往往是互补的)
保留过去任务中的一部分训练数据学习生成训练数据为新任务扩展模型对每个任务都是用一个子网络限制模型发展中的差异prescient continual learning这种new setting:
**目标:**在seen和unseen的类别上持续性学习
在该模型中,模型不仅必须对当前和过去的任务表现良好,而且对于将来的任务也必须表现良好,既要避免灾难性的遗忘(对过去的课程使用数量有限的训练样本),又要对未来的课程给出最佳的估计( 完全没有培训样本)。
这个模型需要知道所有类别以及一些关于他们的先验知识:预先知道会遇到哪些标签,但各种标签的训练样本是增量式到达的。
对比:
《ICLR 2019 Selfless sequential learning》指出为未来的类别腾出空间的能力是当前持续学习模型的关键限制,并提出正则化损失以使模型更“无私”,从而在表示中明确保留了未来类别的能力。《ICLR 2020 Automatically discovering and learning new visual categories with ranking statistics》设置可以说与本文相反,它是假定所有类别的样本在最开始都存在,但是可用标签是增量到达的。本文setting的解决方法:
Inspired by zero-shot learning【通过将视觉模型和具有关于类的知识的嵌入相结合,从而对未见过的类别里的样本分类】
特别关注zero-shot learning中对未来类生成表征的方法:representation learning的框架可以无缝整合continual learning和zero-shot learning
此外,会去使用ghost features(未来类的预测特征),在表示空间中给未来类别腾出空间
以上目标通过一个精心构建了losses的简化模型实现。
关于测试评价的问题:
在持续学习中,一个分类器在多个steps被训练称作tasks
传统上模型是在每个task t t t后,在所有目前可见的类别 C 1 : t C^{1:t} C1:t上进行评价;
而本文setting,each task的评价是在所有类别 C 1 : T C^{1:T} C1:T上:past( C 1 : t − 1 C^{1:t-1} C1:t−1), present( C t C^{t} Ct), and future( C t + 1 : T C^{t+1:T} Ct+1:T)
模型包含三部分:一个卷积特征提取器 f f f,一个特征生成器 g g g,和一个分类器 c l f clf clf。
卷积特征提取器 f f f:模型的backbone,学习提取所有真实样本的特征
特征生成器 g g g:学习所有类的特征分布,旨在为未来的类生成合理的特征样本
分类器 c l f clf clf:对所有类做最终的决定
分类器利用从生成器中采样的特征(ghost features)进行未来类的训练(因为它们必须从可见的类和有关类的一些先验知识中被“半透明化”)
基础模型是给一个representation-based结构,有一个卷积特征提取器 h = f ( x ) \mathbf{h}=f(\mathbf{x}) h=f(x)和一个余弦分类器 c l f clf clf(把带有点乘的全连接层替换为余弦相似度): c l f ( h , θ ) c = y ^ c = ⟨ h , θ c ⟩ ∥ h ∥ 2 ∥ θ c ∥ 2 c l f(\mathbf{h}, \boldsymbol{\theta})_{c}=\hat{\mathbf{y}}_{c}=\frac{\left\langle\mathbf{h}, \boldsymbol{\theta}_{c}\right\rangle}{\|\mathbf{h}\|_{2}\left\|\boldsymbol{\theta}_{c}\right\|_{2}} clf(h,θ)c=y^c=∥h∥2∥θc∥2⟨h,θc⟩ θ c \boldsymbol{\theta}_{c} θc:是在 c l f ( c ∈ C 1 : t ) clf(c \in C^{1:t}) clf(c∈C1:t)中,对于第 c c c个类别的参数向量,可以被解释为类别 c c c的代表representation或代理proxy。
分类损失这里是用的NCA loss: L Θ f , Θ c l f n c a = [ − log exp ( y ^ y − δ ) ∑ c ≠ y exp y ^ c ] + \mathcal{L}_{\Theta_{f}, \Theta_{c l f}}^{\mathrm{nca}}=\left[-\log \frac{\exp \left(\hat{\mathbf{y}}_{y}-\delta\right)}{\sum_{c \neq y} \exp \hat{\mathbf{y}}_{c}}\right]_{+} LΘf,Θclfnca=[−log∑c=yexpy^cexp(y^y−δ)]+ 为了防止灾难性遗忘,使用了经常在持续学习中使用的在过去模型迭代( t − 1 t-1 t−1)和当前( t t t)的蒸馏损失,使得最终基础模型的loss为: L = L Θ f nca , Θ c l f + λ 1 L Θ f distil \mathcal{L}=\mathcal{L}_{\Theta_{f}}^{\text {nca }}, \Theta_{c l f}+\lambda_{1} \mathcal{L}_{\Theta_{f}}^{\text {distil }} L=LΘfnca ,Θclf+λ1LΘfdistil
NCA background:
度量学习 ( metric learning ) 研究如何在一个特定的任务上学习一个距离函数,使得该距离函数能够帮助基于近邻的算法 ( kNN、k-means 等 ) 取得较好的性能。深度度量学习 ( deep metric learning ) 是度量学习的一种方法,它的目标是学习一个从原始特征到低维稠密的向量空间 ( 称之为嵌入空间,embedding space ) 的映射,使得同类对象在嵌入空间上使用常用的距离函数 ( 欧氏距离、cosine 距离等 ) 计算的距离比较近,而不同类的对象之间的距离则比较远。
其中的近邻成分分析(Neighborhood Component Analysis,简称NCA)loss:
深度度量学习中的损失函数
分子是在最大化相似度 y ^ y \hat{\mathbf{y}}_y y^y(等价于最小化样本特征 h y \mathbf{h}_y hy和正确的类别代理 θ y \boldsymbol{\theta}_{y} θy的距离),分母是在最小化相似度 y ^ c , ∀ c ≠ y \hat{\mathbf{y}}_c, \forall c \neq y y^c,∀c=y。其实也就是缩小类内距离,扩大类间距离。
生成模型直接根据未出现分类的特征(而不是输入图像)估计未出现分类的分布,然后需要把类别标签 c c c映射到有语义意义的类别属性空间:进行映射的确切方法将取决于数据,但是最常见的是,要么我们有一组明确的属性链接到每个类(颜色,大小,材质,出处等),要么我们可以提取一个潜在的语义向量。
策略:
在特征提取器已经学习的情况下训练生成器,然后在每个任务后进行fine-tune去解决分布移动。
然后让生成器利用看不见的类别的属性,从随机样本中伪造"ghost features"。
该策略对于生成器模型是不可知的,只要它可以通过类属性来限制即可。
实际生成器使用了Generative Moment Matching Network (ICML 2015)
L Θ f , Θ c l f nca-ghost = [ − log exp ( y ^ y − δ ) ∑ c ≠ y exp y ^ c + ∑ c ∈ C t + 1 : T exp y ^ c ] + \mathcal{L}_{\Theta_{f}, \Theta_{c l f}}^{\text {nca-ghost }}=\left[-\log \frac{\exp \left(\hat{\mathbf{y}}_{y}-\delta\right)}{\sum_{c \neq y} \exp \hat{\mathbf{y}}_{c}+\sum_{c \in C^{t+1: T}} \exp \hat{\mathbf{y}}_{c}}\right]_{+} LΘf,Θclfnca-ghost =[−log∑c=yexpy^c+∑c∈Ct+1:Texpy^cexp(y^y−δ)]+
未来类在分类损失中的加入有两个效应:
允许模型在测试时执行zero-shot-like去猜测那些类别,让持续学习和zero-shot学习无缝结合对未来类的代理学习为这些类的表示空间腾出了空间,从而创建了有效的空白空间,这些空位推开了可见类别的实际特征(由于分母中的排他性项)。**Note:**ghost features在每个任务只被生成器创造一次,并且在任务持续时保持固定。
我们通过优化可见类的潜在表示来避免与Ghosts表示重叠,从而进一步促进类间分离。
这个损失直接约束了特征空间且并不影响proxies和类内距离
Methods:
构建one-unseen-class-Vs-all-seen-classes SVM classifiers,对于每个看不见的类别都构建一个(使用线性核)
目的就是将每个看不见的区域与大量可见特征分开。 L Θ f s v m − r e g = 1 N × ∣ C t + 1 : T ∣ ∑ i = 1 N ∑ c ∈ C t + 1 : T [ w c ⋅ h ( i ) + b c + τ ] + \mathcal{L}_{\Theta_{f}}^{\mathrm{svm}-\mathrm{reg}}=\frac{1}{N \times\left|C^{t+1: T}\right|} \sum_{i=1}^{N} \sum_{c \in C^{t+1: T}}\left[\mathbf{w}_{c} \cdot \mathbf{h}^{(i)}+b_{c}+\tau\right]_{+} LΘfsvm−reg=N×∣Ct+1:T∣1i=1∑Nc∈Ct+1:T∑[wc⋅h(i)+bc+τ]+ 其中, [ ⋅ ] + [\cdot]_+ [⋅]+指代hinge loss, τ \tau τ指代一个额外的margin。
这样的一个基于边缘的正则化项直接作用于潜在/特征空间以及创建它的特征提取器主干,而前面的loss在分类器上通过类代理的作用间接地调节了特征空间。
我们交替训练特征提取器(加分类器)和生成器。 我们训练后者模拟已看到的类的特征,然后要求其推断未见的类(ghost特征)。ghost features使我们既可以将可见和不可见的类统一为一个完整的分类器( L nca-ghost \mathcal{L}^{\text{nca-ghost}} Lnca-ghost),又可以在特征空间中为不可见的类强制进行早期分配( L svm-reg \mathcal{L}^{\text{svm-reg}} Lsvm-reg)。
complete loss: L = L Θ f , Θ c l f nca-ghost + λ 1 L Θ f disill + λ 2 L Θ f svm-reg \mathcal{L}=\mathcal{L}_{\Theta_{f}, \Theta_{clf}}^{\text {nca-ghost }}+\lambda_{1} \mathcal{L}_{\Theta_{f}}^{\text {disill }}+\lambda_{2} \mathcal{L}_{\Theta_{f}}^{\text {svm-reg }} L=LΘf,Θclfnca-ghost +λ1LΘfdisill +λ2LΘfsvm-reg