【类增量学习】CVPR 2021:Class-Incremental Learning with Generative Classifiers

在这里插入图片描述

论文地址:

https://arxiv.org/abs/2104.10093

代码地址:

https://github.com/GMvandeVen/class-incremental-learning

论文摘要:

增量训练深度神经网络来识别新的类是一个具有挑战性的问题。大多数现有的类增量学习方法存储数据或使用生成式重放,这两者都有缺点,而“无重放”的替代方法,如参数正正化或偏差校正方法,并不能一致地达到高性能。

在此,我们提出了一种新的类增量学习策略:生成式分类。

我们的建议不是直接学习条件分布 p ( y ∣ x ) p(y|\boldsymbol{x}) p(yx),而是学习联合分布 p ( x , y ) p(\boldsymbol{x},y) p(x,y),分解为 p ( x ∣ y ) p ( y ) p(\boldsymbol{x} \mid y) p(y) p(xy)p(y),并使用贝叶斯规则进行分类。

作为原理证明,这里我们通过训练每个要学习的类的变分自动编码器,并使用重要性抽样来估计概率 p ( x ∣ y ) p(\boldsymbol{x}|y) p(xy) 来实现该策略。

这种简单的方法在一系列不同的持续学习基准测试上表现得非常好,优于生成式重放和其他不存储数据的现有基线。

论文介绍:

深度神经网络擅长于监督学习任务,但只有当所有要学习的类同时可用时。增量训练一个深度神经网络来区分逐渐增长的类已经被证明是非常具有挑战性的。

成功的类增量学习策略通常要么依赖于存储过去数据的一个子集或通过重放来表示过去的数据,这两者都有重要的缺点。在实践中,存储数据并不总是可能的(例如,出于安全/隐私考虑或存储容量有限),而重放的计算成本很高,因为它涉及到对过去的数据进行持续的再训练。

这些缺点激发了人们对“无重放”持续学习的兴趣,在这种学习中,存储或使用重放是不允许的。在过去的几年里,已经提出了一些方法,可以在不重放或存储数据的情况下进行分类增量学习。

然而,这些方法依赖于具有明确任务边界的协议,并且它们的性能严重依赖于适当的预先训练的特征提取器的可用性。

本文提出了生成分类作为一种很有前途的类增量学习新策略。

具体来说,我们建议训练神经网络直接学习条件分布 p ( y ∣ x ) p(y|\boldsymbol{x}) p(yx),而是训练它们学习联合分布 p ( x , y ) p(\boldsymbol{x},y) p(x,y),分解为 p ( x ∣ y ) p ( y ) p(\boldsymbol{x} \mid y) p(y) p(xy)p(y),然后使用贝叶斯规则进行分类。

这种策略的一个关键好处是,它将一个具有挑战性的类增量学习问题重新定义为一个更容易解决的任务增量学习问题。

为了证明生成分类在类增量学习中的潜力,作为一种原理证明,我们通过训练每个类要学习的变分自编码器模型和在推理过程中使用重要性抽样来估计类条件概率来实现这一策略。

我们发现,如此简单的生成式分类器实现在各种类增量学习问题上表现得非常好,优于生成式重放和现有的无重放方法。

此外,这种方法不使用重放,不存储数据,它可以应用于任意的类增量数据流(即不需要任务边界),也不依赖于预先训练过的网络,尽管如果可用,这些网络可以有效地使用。

问题定义:

在连续或增量学习中,算法不能同时访问所有数据,但它可以序列地访问数据。

有各种不同的方法可以设置一个类增量学习问题。这使得研究之间的直接比较具有挑战性,即使它们使用相同的数据集。因此,我们首先讨论一些不同研究之间不同的重要假设。

给定数据集 D = { x i , y i } i = 1 n \mathcal{D}=\{x_i,y_i\}^n_{i=1} D={xi,yi}i=1n,类增量学习的目标是学习到一个分类规则,用于输入 x ∈ X x\in\mathcal{X} xX 映射到预测标签 y ∈ Y y\in\mathcal{Y} yY

但是,不像经典的机器学习,增量学习算法必须在每次没有权限访问全部数据集的情况下学习到该映射。

在这里插入图片描述

Task-based class-incremental learning:

一种常用的类增量学习协议是将数据集分割为不同的“任务”,其中每个任务包含一个不同的类子集。然后依次给予该算法对每个任务的数据的访问权。

重要的是,在从一个任务转换到下一个任务后,来自前一个任务的数据将不再可用。在每个任务中,该任务的训练数据可以同时提供给算法,也可以根据不受算法控制的固定流来呈现。

Task-free class-incremental learning:

有人认为,基于任务的协议并不能代表现实世界的问题,我们应该将其重点转向“无任务”的持续学习。在一个无任务协议中,该算法具有任意的数据流,而对该数据流的结构没有任何先验知识。许多现有的类增量学习方法都不能处理这种设置,因为它们依赖于“任务边界”的存在。

一般来说,无任务类增量学习的基准测试需要包括一个关于应该如何生成数据流的协议(即,它们应该指定何时呈现来自每个类的样本)。

一个开放的、在很大程度上未被解决的研究问题与开发一种设计此类数据流的原则方法有关。在本文中,我们回避了这个问题,因为在这里考虑的是生成分类器的特殊实现,即每个类都有单独的生成模型,因此数据流的实际类增量序列并不重要。

无任务的持续学习也被称为“流媒体”或“在线”的持续学习。在这种情况下,有时附加的约束是每个训练样本应该只显示一次,并且小批量大小应该是一个。然而,值得指出的是,这些约束与算法的样本效率及其对噪声更新的鲁棒性有关,尽管它们是值得研究的主题,但这些都独立于基于任务和无任务的类增量学习之间的区别。对于本文中报告的一个基准,我们遵循流媒体学习的更严格的定义。

Data storage:

许多类增量学习方法所做的一个重要假设是,在内存缓冲区中存储有限数量的过去样本是可以接受的。这个内存缓冲区的大小通常是方法性能的最重要决定因素之一。在实践中,存储数据并不总是可能的(例如,安全或隐私问题),在本研究中,我们不允许数据存储,这种设置被称为无记忆类增量学习。

Pre-training:

在类增量学习文献中通常做的另一个假设,特别是不允许存储数据的研究,是有适当的预训练网络或特征提取器,或者有一个扩展的、非增量初始化阶段可用于预训练。虽然关于数据存储假设的重要性似乎得到广泛承认,但这种关于训练前的假设很少得到关注。在这里,我们通过考虑有预训练网络(CIFAR-100和CORe50)的基准和没有预训练(MNIST和CIFAR-10)的基准来研究预训练的重要性。

相关工作:

Methods relying on stored data:

许多类增量学习方法将过去数据的子集存储在一个内存缓冲区中。这些数据可以在训练新数据时使用,它们也可以作为范例或原型来指导分类决策。存储数据时的重要问题是存储的样例机器格式。如前所述,我们不考虑存储数据的方法。

Generative replay:

如果不可能存储数据,另一种方法是重放生成的“伪数据”。这种策略已经被证明对于相对简单的输入的玩具问题是成功的,但是它在更复杂的输入的问题上很困难,比如自然图像。

最近的一些研究表明,在自然图像的类增量学习问题上,生成回放具有竞争性能,但这些研究中的方法依赖于预先训练的网络(或广泛的、非增量初始化阶段)。

在我们的比较中,我们考虑了两种生成重放方法:深度生成重放(DGR,回放像素级表示),以及大脑启发重放(BI-R,回放潜在特征表示)。

Regularization-based methods:

持续学习的一个流行策略是参数正则化,它旨在最小化对以前学习的任务重要的参数的变化。这种策略的例子是EWC(elastic weight consolidation)和SI( synaptic intelligence)。虽然这些参数正则化方法本身在类增量学习场景中表现不一定很好,但为了完整性,我们将它们纳入了比较中。

一些基于正则化的方法可以解释为对神经网络的参数进行近似贝叶斯推理(即使用贝叶斯规则寻找 p ( θ ∣ D ) p(\boldsymbol{\theta} \mid \mathcal{D}) p(θD) D D D 为观测数据)。

请注意,这与本文提出的生成分类策略不同,后者使用贝叶斯规则进行分类决策(即找到 p ( y ∣ x ) p(y|\boldsymbol{x}) p(yx))。

Bias-correcting algorithms:

当一个标准的基于softmax的分类器对一个类增量学习问题进行训练时,它最终只预测最近看到的类。有人认为,这是由于输出层中的偏差,最近的一些类增量学习方法旨在通过使所有类的输出权值具有可比性来纠正这种偏差。

这个策略的例子是CWR(CopyWeights with Re-init)和它的改进版本CWR+。这两种方法的缺点是在第一个任务后冻结了所有隐藏层的参数,因此表示学习受到限制。

为了解决这个问题,我们在之前的研究中提出了AR1方法,它与CWR+相似,只是它不冻结隐藏层,而是使用修改版本的SI对它们进行正则化。

也有几种偏差修正算法依赖于来自以前看到的类的存储数据,但正如我们所讨论的,我们在这里不考虑这些方法。

与这些偏差校正算法相关的是,首先防止任务之间输出权重的巨大差异,总是只训练当前任务的类(即在softmax标准化中只包括当前任务类的输出单位),称之为“labels trick”。这个技巧的一个限制是,没有尝试训练网络来区分不同任务中的类。

Other methods:

增量线性判别分析(Incremental linear discriminant analysis)是数据挖掘社区中一种流行的方法,适用于类增量学习。直到最近,这种方法在持续学习社区中被很大程度上被忽略了,可能是因为它只能学习一个线性分类器。

然而,最近的一项研究将这种方法——现在称为流线性判别分析(SLDA)——应用于一个固定的、预先训练的深度神经网络提取的特征,这在几个类增量学习问题上取得了令人印象深刻的性能。

SLDA 的主要缺点是它不能进行表示学习,这意味着它的性能可能会在很大程度上取决于适当的预训练网络的可用性。这里我们测试了这一点:在本文中没有预先训练过的网络可用的基准测试上,我们直接将SLDA应用于输入空间。

基本实现:

General framework & intuition:

在深度学习中,典型的分类方法是训练神经网络直接学习我们感兴趣的条件分布 p ( y ∣ x ) p(y|\mathbf{x}) p(yx),例如使用交叉熵损失使用softmax输出层训练前馈分类器。当所有的类都同时可用时,这种方法确实有用。

然而,在增量设置中,这种直接方法就没法用了。

以标准方式训练的softmax分类器严重过度适合最近看到的类,这种现象被称为灾难性遗忘。这种灾难性遗忘的一个原因是,基于最近看到的数据, p ( y ∣ x ) p(y|\boldsymbol{x}) p(yx) 的经验版本——softmax分类器旨在学习它——确实严重偏向于最新的类。到目前为止,持续学习领域的主要方法是试图寻找缓解灾难性遗忘的方法和技巧。

结合传统的训练分类器的深度学习方法,我们提出用生成分类器来处理类增量学习。我们不建议训练深度神经网络来直接学习条件分布 p ( y ∣ x ) p(y|x) p(yx),而是训练它们来学习联合分布 p ( x , y ) p(\boldsymbol{x},y) p(x,y)——分解为 p ( x ∣ y ) p ( y ) p(\boldsymbol{x}|y)p(y) p(xy)p(y),并使用贝叶斯规则进行分类。

这一策略的关键好处是,在类增量学习设置中,基于最近看到的数据, p ( x ∣ y ) p(\boldsymbol{x}|y) p(xy) 的经验版本不应该有任何特定的偏差。只有 p ( y ) p(y) p(y) 的经验版本是有偏差的,但是在没有灾难性遗忘的情况下学习这个分布通常是简单的(例如,观察到每个标签的次数可以被计算)或者说是不必要的(例如,如果可以假设所有标签都有相同的先验概率)。

这样我们就将类增量问题转换成了任务增量问题。

另一种描述所提出的生成式分类器策略的好处的方法是,它将一个具有挑战性的类增量学习问题转化为一个更简单的任务增量学习问题。这是这样的,因为学习 p ( x ∣ y ) p(\boldsymbol{x}|y) p(xy) 可以被解释为一个任务增量问题,即每个“任务”包括学习一个特定标签 y y y 的类条件生成模型。

任务增量学习的一个重要优点是,可以训练具有特定任务组件的网络,甚至可以使用完全独立的网络来学习每个任务。

最后的见解用于我们的生成分类器的原理验证实现,每个类都有一个单独的生成模型。但是请注意,应该可以使用其他任务增量学习技术来实现这些模型之间的参数共享。

Implementation: VAEs & importance sampling:

在本文中,为了证明所提出的生成分类策略的潜力,我们通过训练每个类需要学习的变分自动编码器(VAE)模型,并使用重要性抽样,以估计概率 p ( x ∣ y ) p(\boldsymbol{x}|y) p(xy) 来实现生成分类器。对于 p ( y ) p(y) p(y),我们在所有可能的类上使用均匀分布,因为所有的基准测试中每个类的样本数量近似相等。

一般来说, p ( y ) p(y) p(y) 也可以从数据中学习到,例如,通过计算在训练数据中观察到每个类的次数。

Variational autoencoder:

为了学习分布 p ( x ∣ y ) p(\mathbf{x}|y) p(xy),我们为每个要学习的类训练一个VAE模型。

对于 MNIST 和 CIFAR-10,每个类都学习一个完全独立的VAE模型,而在CIFAR-100和CORe50的实验中,所有模型之间共享较低的、预训练的层。

VAE模型由编码器 q ϕ q_{\phi} qϕ,解码器 p θ p_{\theta} pθ 和先验分布 p p r i o r ( z ) p_{prior}(z) pprior(z) 组成.

编码器将输入 x x x 映射到潜在空间的后验分布 q ϕ ( z ∣ x ) q_{\phi}(z|x) qϕ(zx),解码器 p θ p_{\theta} pθ 则将潜在变量 z z z 映射回输入空间的分布 p θ ( x ∣ z ) p_{\theta}(x|z) pθ(xz)。对于本文中使用的VAE模型,这些分布的计算方法为:

q ϕ ( z ∣ x ) = N ( z ∣ μ ϕ ( x ) , σ ϕ ( x ) 2 I ) q_{\phi}(z|x)=\mathcal{N}(z|\mu_{\phi}^{(x)},\sigma_{\phi}^{(x)^{2}}I) qϕ(zx)=N(zμϕ(x),σϕ(x)2I)

p θ ( x ∣ z ) = N ( x ∣ μ θ ( z ) , I ) p_{\theta}(x|z)=\mathcal{N}(x|\mu_{\theta}^{(z)},I) pθ(xz)=N(xμθ(z),I)

p p r i o r ( z ) = N ( z ∣ 0 , I ) p_{prior}(z)=\mathcal{N}(z|0,I) pprior(z)=N(z0,I)

其中 μ ϕ ( x ) \mu_{\phi}^{(x)} μϕ(x) σ ϕ ( x ) \sigma_{\phi}^{(x)} σϕ(x) x x x 输入时编码器网络的输出, μ θ ( z ) \mu_{\theta}^{(z)} μθ(z) z z z 输入时解码器网络的输出。对于编码器网络和解码器网络,我们都使用了深度神经网络。

VAE模型通过优化似然 p θ ( x ) = ∫ p θ ( x , z ) d z = ∫ p θ ( x ∣ z ) p prior  ( z ) d z p_{\boldsymbol{\theta}}(\boldsymbol{x})=\int p_{\boldsymbol{\theta}}(\boldsymbol{x}, \boldsymbol{z}) d \boldsymbol{z}=\int p_{\boldsymbol{\theta}}(\boldsymbol{x} \mid \boldsymbol{z}) p_{\text {prior }}(\boldsymbol{z}) d \boldsymbol{z} pθ(x)=pθ(x,z)dz=pθ(xz)pprior (z)dz 的变分下界来进行训练。其下界(也就是ELBO)为:

L E L B O ( θ , ϕ ; x ) = E q ϕ ( z ∣ x ) [ log ⁡ p θ ( x , z ) q ϕ ( z ∣ x ) ] = E q ϕ ( z ∣ x ) [ log ⁡ p θ ( x ∣ z ) ] − D K L ( q ϕ ( z ∣ x ) ∥ p prior  ( z ) ) \begin{array}{l} \mathcal{L}_{\mathrm{ELBO}}(\boldsymbol{\theta}, \boldsymbol{\phi} ; \boldsymbol{x})=E_{q_{\phi}(\boldsymbol{z} \mid \boldsymbol{x})}\left[\log \frac{p_{\boldsymbol{\theta}}(\boldsymbol{x}, \boldsymbol{z})}{q_{\boldsymbol{\phi}}(\boldsymbol{z} \mid \boldsymbol{x})}\right] \\ \quad=E_{q_{\boldsymbol{\phi}}(\boldsymbol{z} \mid \boldsymbol{x})}\left[\log p_{\boldsymbol{\theta}}(\boldsymbol{x} \mid \boldsymbol{z})\right]-D_{K L}\left(q_{\boldsymbol{\phi}}(\boldsymbol{z} \mid \boldsymbol{x}) \| p_{\text {prior }}(\boldsymbol{z})\right) \end{array} LELBO(θ,ϕ;x)=Eqϕ(zx)[logqϕ(zx)pθ(x,z)]=Eqϕ(zx)[logpθ(xz)]DKL(qϕ(zx)pprior (z))

Importance sampling:

为了估计可能性 p ( x ∣ y ) p(\boldsymbol{x}|y) p(xy),我们使用了重要性抽样。这意味着,在 y y y 类的VAE模型下,测试样本 x x x 的可能性可以估计为:

p ( x ∣ y ) = 1 S ∑ s = 1 S p θ y ( x ∣ z ( s ) ) p prior  ( z ( s ) ) q ϕ y ( z ( s ) ∣ x ) p(\boldsymbol{x} \mid y)=\frac{1}{S} \sum_{s=1}^{S} \frac{p_{\boldsymbol{\theta}_{y}}\left(\boldsymbol{x} \mid \boldsymbol{z}^{(s)}\right) p_{\text {prior }}\left(\boldsymbol{z}^{(s)}\right)}{q_{\boldsymbol{\phi}_{y}}\left(\boldsymbol{z}^{(s)} \mid \boldsymbol{x}\right)} p(xy)=S1s=1Sqϕy(z(s)x)pθy(xz(s))pprior (z(s))

其中 θ y \boldsymbol\theta_{y} θy ϕ y \boldsymbol\phi_{y} ϕy y y y 类VAE模型的参数, S S S 为重要样本数, z ( S ) \boldsymbol{z}^{(S)} z(S) 为从 q ϕ y ( z ∣ x ) q_{\boldsymbol{\phi}_{y}}(\boldsymbol{z}|\boldsymbol{x}) qϕy(zx) 中抽取的第 S S S 重要样本。我们对每个似然估计使用 S = 10 , 000 S = 10,000 S=10,000 个重要样本。

根据贝叶斯规则: p ( y ∣ x ) ∝ p ( x ∣ y ) p ( y ) p(y|\boldsymbol{x})∝p(\boldsymbol{x}|y)p(y) p(yx)p(xy)p(y),然后使用以下方法进行分类:

y ^ ( x ) = argmax ⁡ y ∈ Y p ( x ∣ y ) p ( y ) = argmax ⁡ y ∈ Y p ( x ∣ y ) \hat{y}^{(\boldsymbol{x})} = \underset{y \in \mathcal{Y}}{\operatorname{argmax}} p(\boldsymbol{x} \mid y) p(y) = \underset{y \in \mathcal{Y}}{\operatorname{argmax}} p(\boldsymbol{x} \mid y) y^(x)=yYargmaxp(xy)p(y)=yYargmaxp(xy)

其中 y ^ ( x ) \hat{y}^{(\boldsymbol{x})} y^(x) 是生成分类器对测试样本 x \boldsymbol{x} x 预测的类标签。

迄今为止所描述的生成分类器方法并不依赖于预先训练过的网络的可用性,因为可以从头开始训练完整的生成模型。

然而,如果有预先训练过的模型可用,就可以用各种方式来使用它们。例如,假设预先训练过的卷积层是可用的。一种选择是使用这些方法来初始化VAE模型的编码器网络的卷积层,然后以标准的方式继续进行训练。

本文所采用的另一种方法是使用预先训练好的卷积层作为固定的特征提取器,然后根据提取的特征而不是原始输入来训练VAE模型。

第二种方法的一个优点是,这让人联想到最近在特征空间中执行生成式回放的研究,即它似乎更容易为这些提取的特征学习良好的生成模型,这可能是因为它们不如原始输入那么复杂。

实验结果:

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BIT可达鸭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值