Paper Note: Conditional Channel Gated Networks for Task-Aware Continual Learning

Conditional Channel Gated Networks for Task-Aware Continual Learning

Davide Abati, Jakub Tomczak, Tijmen Blankevoort, Simone Calderara, Rita Cucchiara, Babak Ehteshami Bejnordi

CVPR 2020

[paper] [talk] [lecture]

Abstract

当针对一系列学习问题进行优化时,卷积神经网络会遭遇“灾难性遗忘”:当它们满足当前训练样例的目标时,它们在先前任务上的表现将急剧下降。在这项工作中,我们引入了一个新框架,通过条件计算(conditional computation)解决这个问题。我们为每个卷积层添加了 task-specific gating modules,用来选择对于给定输入使用哪些 filters。

依照这种方法,我们实现了两个吸引人的特性。首先,gates 的执行模式允许识别和保护重要的 filters,从而确保先前学习的任务的模型性能不会损失。其次,通过使用稀疏化目标,我们可以减少所选用的 kernels 的数目,从而保留足够的模型容量来消化新任务。

现有的解决方案属于 task incremental learning 的范畴。但是,在许多实际情况下,在 inference 的时候可能无法知晓样例是属于哪个任务。因此,我们另外引入了一个任务分类器,该分类器可预测每个样例的任务标签,以此解决在 inference 时不能知道样例属于哪个任务的情况(也就是将 task incremental 的方法改造成了 class incremental 的方法)。

我们在四个持续学习数据集上验证了我们的想法。结果表明,无论是否存在 task oracle(即inference时样例的任务标签),我们的模型始终优于现有方法。值得注意的是,在 Split SVHNImagenet-50 数据集上,我们的模型相比于所对比的方法,精度提高了23.98%和17.42%。

1. Introduction

机器学习和深度学习的模型通常通过对数据进行采样,然后进行离线训练,训练时的数据样本的分布往往与测试时的分布独立。但是,当在实际环境中进行在线训练时,模型可能会遇到许多任务,这些任务是以一系列连续的活动的形式呈现,而在此之前对于它们之间的关系或持续时长则一无所知。这种挑战通常出现在 robotics[2],强化学习[29],视觉系统[26]等中(参见[7]的第4章)。在这种情况下,深度学习模型会遭遇“灾难性遗忘”[23,9],这意味着它们会丢弃先前获得的知识以适应当前的任务。根本原因是,在学习新任务时,模型会覆盖对先前任务而言至关重要的参数。

持续学习 continual learning(也称为终身学习 lifelong learning 或增量学习 incremental learning)解决了上述问题[7]。一般文献中考虑的典型场景是模型去学习互不相干(disjoint)的一个接一个的分类问题。持续学习一般可以分为 task-incremental 的和 class-incremental 的。现有的方法采用了不同的策略来减轻灾难性的遗忘,例如 memory buffers [27, 18],知识蒸馏[17],synaptic consolidation [14]和 parameters masking [21, 32]。然而,最近的证据表明,如果在测试时任务标签不可知的情况下,即使对于简单的数据集,现有的解决方案也会失败[35]。

本文介绍了一种基于条件计算(conditional-computing)的解决方案,以解决任务增量(task-incremental)学习和类(class-incremental)增量学习问题。具体来说,我们的框架依赖于单独的特定于任务的分类头(亦即:multi-head architecture),并且在(共享)的特征提取器的每一层中均采用通道门控技术(channel-gating)[6, 3]。为此,我们引入了特定于任务的选通模块(task-dedicated gating modules),该模块动态选择要在 input feature map 上应用的 filters。伴之以鼓励使用更少 units 的稀疏化目标,该策略能够依照任务来选择使用哪些 filters,并且可以很容易地知道权重对于当前任务的重要程度。在学习新任务时,已经被使用的权重将被冻结,但是选通模块可以动态选择使用还是丢弃它们。相反,先前任务从未使用过的 units 将被重新初始化,并可以用于获取新知识。此过程可防止忘记过去的任务,并在前向传播时节省大量计算量。此外,我们通过引入任务分类器来避免在推理时对任务标签的需要,该任务分类器能够为类预测选择使用哪个分类头。我们在相同的增量学习约束下,一起训练任务分类器与分类头。为了减轻任务分类方面的遗忘,我们依赖于 episodic memories 和 generative memories 等样例重放的方法。在这两种情况下,我们都展示了在任务级别执行 rehearsal 的好处,与之前在类级别执行的重放方法相反[27, 5]。据我们所知,这是第一项在类增量学习环境中进行监督任务预测的工作。

我们对四个难度越来越大的数据集进行了广泛的实验,既包括在测试时有任务标签的情况,也包括在测试时无任务标签的情况。我们的结果表明,在有任务标签的情况下,我们的模型可以有效地避免遗忘问题,并且其性能与 SOTA 相似或更好。在没有任务标签的情况下,我们始终优于所对比的方法(competing methods)。

Continual learning. “灾难性遗忘”是神经网络中一个众所周知的问题[23]。 缓解该问题的早期方法包括 orthogonal representation learning 和 replay of prior samples [9]。持续学习领域已经广泛使用深度神经网络。Progressive Neural Networks [30] 通过为每个新任务引入一组新的参数来解决遗忘问题,但代价是可扩展性有限。另一种影响广泛的方法是使用知识蒸馏,即在学习新任务时把模型过去的参数化作为参考[17]。

最近出现了 Consolidation 方法,其重点是确定对于先前任务而言至关重要的权重,并防止在学习新任务期间对其进行过大的改变。每个参数的相关性/重要性估计可以通过Fisher Information Matrix[14],损失函数梯度的路径积分[39],梯度幅度[1]和贝叶斯神经网络中的后验不确定性估计[25]来实现。

其他流行的 Consolidation 方法依赖于 binaray masks 的估计,该估计将每个任务直接映射到负责该任务的参数集。可以通过随机分配 [22],剪枝 [21]或梯度下降 [20,32] 来实现对masks的估计。但是,现有的基于 mask 的方法只能在提供了任务标签的情况下运行。我们的工作类似于上述模型,但有两个基本区别:i)我们的 binary masks (gates) 是动态生成的,并且依赖于网络输入;ii)我们提出包含任务分类器的 mask-based 的方法来实现类增量学习。

有几种模型允许访问有限容量的内存缓冲区(即:episodic memory),其中保留有先前任务中的样例。一种流行的方法是 iCaRL [27],它可以将类原型(class prototypes)计算为存储样例的平均特征表示,并以最近邻的方式对测试样例进行分类。[18, 5, 28] 提出,调整在当前批次上计算出的梯度的更新方向,使之对存储的样例无破坏性影响。这样的目标可以通过受限优化问题 [18,5] 或采用元学习算法[28] 来实现。与此不同的,generative memories 不依赖于任何真实样例的重放,而是依赖于生成模型,从中可以有效采样过去任务的伪造样例[34, 38, 26]。在本文中,我们也依赖于 episodic memories 或 generative memories 来应对类增量学习的情况。但是,我们仅在避免任务预测的灾难性遗忘时使用 replay,也以此避免了对于特定于任务的分类头的更新。

Conditional computation. 条件计算是希望深度神经网络的架构能够适应于给定的输入。尽管第一项工作已应用于语言建模[33],但仍有几项工作将此概念应用于计算机视觉问题。在这方面,现有技术采用 binary gates 来决定是否执行或跳过某个计算块。这样的 gates 可以 drop 掉整个 residual blocks [36, 37]或是层内的特定 units [6, 3]。在我们的工作中,我们使用后一种方法,学习一组特定于任务的选通模块,以选择将哪些 kernels 应用于给定的输入。据我们所知,这是数据依赖型通道门控(data-dependent channel-gating)在持续学习中的首次应用。

3. Model

3.1 Problem setting and objective

我们有一个参数模型(比如:神经网络),称作 backbonelearner 网络,该网络将要去学习一系列的 NN 个任务,即:T={T1,...,TN}\mathcal{T}=\{T_1,...,T_N\}。每个任务 TiT_i 是一个分类问题,Ti={xj,yj}j=1niT_i=\{x_j,y_j\}_{j=1}^{n_i} ,其中 xjRmx_j \in \mathbb{R}^m,并且 yj{1,...,Ci}y_j\in\{1,...,C_i\}

task-incremental setting 是对下面的式子进行优化:

maxθ EtT[E(x,y)Tt[logpθ(yx,t)]](1)\max_\theta\ \mathbb{E}_{t\sim\mathcal{T}}\Big[ \mathbb{E}_{(x,y)\sim T_t}\big[ \log p_\theta(y|x,t) \big] \Big] \qquad\qquad(1)

其中 θ\theta 为 learner network 的参数,x,y,tx,y,t 分别为每个样例的 observation,标签以及所对应的任务。这样的最大化问题受到持续学习的约束:当模型顺次观察任务时,Eq.1 中外层期望难以计算或近似。值得注意的是,该 setting 需要假设每个样例所属的任务的标签在训练和测试阶段都是已知的。在实际中,可以利用这些信息来隔离分类器的相关输出单元,从而防止通过同一 softmax 层(multi-head)的属于不同任务的类之间发生竞争。

class-incremental 模型是对下面的式子进行优化:

maxθ EtT[E(x,y)Tt[logpθ(yx)]](2)\max_\theta\ \mathbb{E}_{t\sim\mathcal{T}}\Big[ \mathbb{E}_{(x,y)\sim T_t}\big[ \log p_\theta(y|x) \big] \Big] \qquad\qquad(2)

缺少任务标签限制了模型中任何形式的已知任务类型情况下的推理。该 setting 需要将输出单元合并到单个分类器(single-head)中,来自不同任务的类在其中相互竞争,这通常会导致更严重的遗忘[35]。尽管模型在训练阶段可以基于任务信息进行学习,但是在推理过程中任务标签是不可知的。

为了处理来自未知任务的样例,同时保留 multi-head settings 的优势,我们将联合优化类预测和任务预测,如下所示:

maxθ EtT[E(x,y)Tt[logpθ(y,tx)]]=EtT[E(x,y)Tt[logpθ(yx,t)+logpθ(tx)]](3)\begin{aligned} \max_\theta\ &\mathbb{E}_{t\sim\mathcal{T}}\Big[ \mathbb{E}_{(x,y)\sim T_t}\big[ \log p_\theta(y,t|x) \big] \Big]=\\ &\mathbb{E}_{t\sim\mathcal{T}}\Big[ \mathbb{E}_{(x,y)\sim T_t}\big[ \log p_\theta(y|x,t) + \log p_\theta(t|x) \big] \Big] \qquad\qquad(3) \end{aligned}

Eq. 3 描述了两重目标。一方面,logp(yx,t)\log p(y|x,t) 负责 class classification given the task,与 Eq. 1 中的 multi-head objective 相似。另一方面,logp(tx)\log p(t|x) 旨在从所观察到的样例来 predicting the task。这种预测依赖于一个任务分类器,该任务分类器以 single-head 方式进行增量训练。值得注意的是,Eq. 3 中的目标将 single-head 复杂性从类预测转移到任务预测级别,具有以下好处:

  • 给定任务标签,类预测准确性不会下降;

  • 来自不同任务的类在训练和测试期间都不会相互竞争;

  • 具有挑战性的 sing-head 预测步骤已从类级别转移到任务级别;由于任务和类形成两级层次结构,因此前者的预测可以说更容易(因为它在较粗略的语义级别上起作用)。

3.2 Multihead learning of class labels

在本节中,我们介绍了我们所使用的条件计算模型。 Fig. 1 说明了我们框架中使用的门控(gating)机制。我们对门控机制的讨论将仅限于卷积层的情况,但是它也适用于其他参数化映射,例如全连接层或残差块(residual blocks)。hlRcinl,h,w\boldsymbol{h}^l\in\mathbb{R}^{c_{in}^l,h,w} 表示 ll-th 卷积层的输入 feature maps,hl+1Rcoutl,h,w\boldsymbol{h}^{l+1}\in\mathbb{R}^{c_{out}^l,h',w'} 表示 ll-th 卷积层的输出 feature maps。但是,我们不直接使用 hl+1\boldsymbol{h}^{l+1},而是通过剪除掉没有什么信息量的 channels,前向传播一个稀疏的 feature map h^l+1\hat{\boldsymbol{h}}^{l+1} 。在训练任务 tt 的过程中,由gating module GtlG_t^l 决定激活哪些 channels:

h^l+1=Gtl(hl)hl+1(4)\hat{\boldsymbol{h}}^{l+1}=G_t^l(\boldsymbol{h}^{l})\odot\boldsymbol{h}^{l+1}\qquad\qquad(4)

其中 Gtl(hl)=[g1l,...,gcoutll],gil{0,1}G_t^l(\boldsymbol{h}^{l})=[g_1^l,...,g_{c_{out}^l}^l],g_i^l\in\{0,1\},其中 \odot 表示 channel-wise 的乘法。为了符合增量设定,每次模型观察到来自新任务的样例时,我们都会实例化一个新的 gating module。每个 module 被设计为轻量级网络,其计算成本和参数数量可忽略不计。具体来说,每个 gating module 均包括一个多层感知器(MLP),其中包含一层具有16个单元的单层隐藏层,后面接着一个 batch normalization layer [12] 和ReLU激活函数。最终的线性映射为卷积的每个输出通道提供了对数概率。

伴有 gates 的反向传播梯度具有挑战性,因为要采用不可微分的阈值来进行二进制开/关决策。因此,我们依赖于Gumbel-Softmax采样[13, 19],并使用 straight-through estimator[4]获得了梯度的有偏估计。具体来说,我们在前向传播过程中采用硬阈值(以零为中心),而在后向传播中采用 sigmoid 函数(温度参数 τ=2/3\tau=2/3)。

此外,我们以稀疏化目标惩罚了活跃卷积核的数量:

Lsparse=E(x,y)Tt[λsLl=1LGtl(hl)1coutl](5)\mathcal{L}_{sparse}=\mathbb{E}_{(x,y)\sim T_t}\Big[\cfrac{\lambda_s}{L}\sum_{l=1}^L\cfrac{\|G_t^l(\boldsymbol{h}^l)\|_1}{c_{out}^l}\Big] \qquad\qquad(5)

其中 LL 是 gated layers 的总数,而 λs\lambda_s 是控制稀疏度的系数。稀疏化目标指示每个 gating module 选择最少的 kernels 集,从而使我们可以保留 filters 以优化将来的任务。此外,它使我们能够根据任务的难度和目前观察到的样例,有效地调整已经分配的网络的容量。这种数据驱动的模型选择与其它采用固定比率进行模型增长[30]或权重修剪[21]的持续学习策略形成对比。

在对任务 tt 结束优化的时候,我们通过在一个验证集 TtvalT_t^{val} 上估计 gates 打开状态的概率,对 ll-th 层的每一个 unit 计算一个关联分数 rklr_k^l

rkl,t=E(x,y)Ttval[p(I[gkl=1])](6)r_k^{l,t}=\mathbb{E}_{(x,y)\sim T_t^{val}}[p(\mathbb{I}[g_k^l=1])]\qquad\qquad(6)

其中 I[]\mathbb{I}[\cdot] 为指示函数,p()p(\cdot) 为概率分布。通过对这些分数进行阈值处理(thresholding),我们获得了两组 kernels。一方面,我们冻结了任务 t 的相关 kernels,以便它们在将来的任务中可用,但不可更新。另一方面,我们重新初始化不相关的 kernels,使它们在后续任务中是可学习的。在我们所有的实验中,我们都使用0作为阈值,这可以防止遗忘,但代价是减少了留给未来任务的模型容量。

请注意,在此框架内,观察每层中剩余的可学习 units 的数量是很简单的。这样,如果 backbone 模型的容量达到饱和,我们可以快速扩展网络以消化新任务。但是,由于新任务的 gating modules 可以动态选择使用之前习得的 filters(如果与它们的输入相关),因此学习新任务通常需要较少的可学习的 units。在实践中,我们从未经历过学习新任务的 backbone 模型的饱和。除此之外,由于我们的 conditional channel-gated 网络设计,为未来任务增加模型容量将对推理时的计算成本影响很小,将在 Sec 4.5 部分对此进行分析。

3.3. Single-head learning of task labels

在 Sec. 3.2 中介绍的选通方案(gating scheme)能够立即识别过去的每个任务的重要 kernels。但是,它不能应用于任务不可知的setting,因为它需要知道对于第 l 层须要应用哪个选通模块 GxlG_x^l,其中 x{1,...,t}x\in\{1,...,t\} 表示未知任务。 我们的解决方案是采用所有选通模块 [G1l,...,Gtl][G_1^l,...,G_t^l],并将所有选通层(gated layer)的输出 [h^1l+1,...,h^tl+1][\hat{\boldsymbol{h}}_1^{l+1},...,\hat{\boldsymbol{h}}_t^{l+1}] 前向传播。 依次地,下一层 l+1l+1 从第 ll 层接收 gated outputs 列表,应用其选通模块 [G1l+1,...,Gtl+1][G_1^{l+1},...,G_t^{l+1}] 并产生输出列表 [h^1l+2,...,h^tl+2][\hat{\boldsymbol{h}}_1^{l+2},...,\hat{\boldsymbol{h}}_t^{l+2}]。这种机制在网络中生成并行的计算流,共享相同的层,但为每个层选择不同的 sets of units 进行激活(Fig. 2)。尽管并行流的数量随任务的数量而增长,但我们发现我们的解决方案在计算上比 backbone 网络开销更小(见 Sec. 4.5)。这是由于选通模块在每个流中选择了数量有限的卷积 filters。

在最后一个卷积层(即第 LL 层)之后,我们得到了 tt 个候选 feature maps 构成的列表和同样多的分类头。所有 feature maps 连接之后输入到任务分类器:

h=i=1t[μ(h^iL+1)],(7)h=\bigoplus_{i=1}^t[\mu(\hat{\boldsymbol{h}}_i^{L+1})],\qquad\qquad(7)

其中,μ\mu 表示空间维度上的全局平均池化(global average pooling)算子,\bigoplus 表示对特征的连接。任务分类器的结构基于浅层MLP,包含一个具有 64 个ReLU units 的隐藏层,后面接着一个预测任务标签的softmax层。我们使用标准的交叉熵目标函数来训练任务分类器。对任务分类器的优化与对任务 t 的类标签的学习一起进行。因此,网络不仅学习区分任务t中的类的特征,而且还学习去区分任务t和所有先前任务的输入数据的区别。

single-head 任务分类器容易遭受灾难性遗忘。最近的论文表明,基于重放的策略是 single-head settings 中最有效的持续学习策略[35]。因此,我们选择通过 rehearsal 来改善问题。 特别是,我们考虑以下方法。

Episodic memory. 先前任务的一小部分样例用于 rehearse 任务分类器。在训练任务 t 的过程中,buffer 保留了来自过去任务 1,...,t11,...,t-1 的C个随机样例(其中C表示固定容量)。对 buffer 和当前 batch(来自任务 t )中的样例进行重新采样,以使任务标签在 rehearsal batch 中的分布均匀。在任务 t 的末尾,对 buffer 中的数据进行二次采样,以使每个过去的任务都包含 m=C/tm = C / t 个样例。 最后,从任务 t 中选择 m 个随机样例进行存储。

Generative memory. 生成模型用于从先前任务中采样伪造的数据。具体来说,我们利用Wasserstein GANs with Gradient Penalty(WGAN-GP [10])。为了克服采样过程中的遗忘,我们使用了多个生成器,每个生成器都对特定任务的样例分布进行建模。

在这两种情况下,replay 仅用于 rehearse 任务分类器,而不用于分类头。概括而言,我们的模型的完整目标为:class level 的交叉熵(Eq. 3 中的pθ(yx,t)p_\theta(y|x,t)),task level 的交叉熵(Eq. 3 中的 pθ(tx)p_\theta(t|x))以及稀疏项(Eq.5 中的 Lsparse\mathcal{L}_{sparse})。

4. Experiments

4.1. Datasets and backbone architectures

我们使用以下数据集进行了实验:

  • Split MNIST:将MNIST手写分类基准[16]分为5个连续类的子集,从而有了5个二分类任务被顺序训练。

  • Split SVHN:与 Split MNIST 采用的分割方法相同,但采用了SVHN数据集[24]。

  • Split CIFAR-10:与 Split MNIST 采用的分割方法相同,但采用的是CIFAR-10数据集[15]。

  • Imagenet-50 [26]:iILSVRC-2012数据集[8]的子集,包含50个随机采样的类,每个类别1300张图像,分为5个连续的十分类问题。图像大小调整为32x32像素。

就 backbone 模型而言,对于MNIST和SVHN基准,我们采用了三层CNN,每层有100个filters 以及 ReLU 激活函数(下文中为 SimpleCNN)。除最后一层外的其它所有卷积后面都有一个 2x2 的 max-pooling layer。在池化层(pooling layer)之后应用门控。最后是全局平均池化(global average pooling),后面接着线性分类器,可得出分类预测。对于CIFAR-10 和 Imagenet-50 基准,我们采用 ResNet-18 [11] 模型作为 backbone。ResNet basic block 的门控版本如 Fig. 3 所示。如图所示,在第一次卷积之后和在残留连接(residual connection)之后分别应用了两组独立的 gates。

所有模型都使用 SGD with momentum 进行训练,直到收敛为止。在完成每次任务后,通过在当前任务的样例构成的 held-out set 上对模型优化相应的目标函数,来对所有模型进行模型选择(即,我们不依赖于过去任务的样例来进行验证)。我们仅在预定数量的 epochs 之后才应用 Sec. 3.2 中介绍的稀疏化目标函数,使模型能够在开始修剪无信息量的 kernel 之前学习meaningful kernels。

4.2 Task-incremental setting

在 task-incremental setting 中,在测试期间任务标签是已知的。因此,我们不依赖于任务分类器,而是利用真实的任务标签来选择应启用的选通模块和分类头。本节验证了所提出的基于数据的门控方案(data-dependent gating scheme)对于持续学习的适用性。我们将模型与几种 competing methods 进行比较:

  • Joint:使用所有任务的所有数据集对 backbone 模型进行联合训练。我们将其性能视为上限。

  • Ewc-On [31]:Elastic Weight Consolidation的在线版本,它依赖于参数的最新MAP估计以及Fisher矩阵的总和。

  • LwF [17]:该方法的任务损失函数由 distillation objective 正则,采用模型在处理当前任务之前的初始状态作为 teacher。

  • HAT [32]:mask-based 的模型,使用任务标签对网络中的 active units 进行限制。尽管与我们的方法最相似,但它只能应用于 task-incremental setting。

Tab. 1 展示了对不同方法在整个训练过程后所有任务的准确性方面的比较。尽管在MNIST上的表现非常相似,但是随着数据集变得越来越具有挑战性,不同模型的 consolidation capability 之间的差距逐渐显现。值得一提的是几种 recurring patterns。首先,当任务数量增加到两个以上时,LwF会遇到困难。尽管它的蒸馏目标函数是防止遗忘的极好的正则项,但它使得模型不具有足够的灵活性来获取新知识。因此,在顺序学习期间,它对最近任务的准确性逐渐降低,而对第一个任务的性能保持很高。此外,Tab. 1 强调了基于门控的方案(HAT和我们的方案)相对于其他 consolidation strategies(如EWC Online)的适用性。前者阻止相关参数的任何更新,而后一种方法仅惩罚对它们的更新,最终导致相当程度的遗忘。最后,Tab. 1 表明,我们的模型在所有数据集上的表现均与HAT相似甚至更好,这表明我们基于数据的选通方案和稀疏化目标函数有着出色的效果。

4.3. Classincremental with episodic memory

接下来,我们讨论 class-incremental setting,在该 setting 下,在测试时不知道任务标签,这大大增加了持续学习问题的难度。在本节中,我们所进行的实验允许存储有限数量的样例(buffer)。 我们与以下方法进行比较:

  • Full replay:可以给网络重放之前任务所有的训练数据,即理论上的性能上界。

  • iCaRL [27] 是一种基于最近邻分类器的方法,利用了 buffer 中的样例。我们给出了原始的buffer-filling strategy (iCaRL-mean) 和用于我们模型的随机算法(iCaRL-rand)。

  • A-GEM [5]:一种 buffer-based 的方法,可对当前任务的参数更新进行修正,以使其与在存储的样例中计算出的梯度不矛盾。

结果汇总在 Fig. 4 中,说明了对于 class-incremental Split-MNIST 和 Split-SVHN 基准,在不同 buffer 大小下所有任务的最终平均准确度。该图突出了几个发现。出人意料的是,A-GEM在MNIST上的性能非常低,而在SVHN上却有更好的表现。对前一个数据集的进一步探究表明,它在最新任务上始终达到 competitive accuracy,而却忘记了先前的大多数任务。另一方面,iCaRL的性能似乎不会因更改其 buffer filling strategy 而受到显著影响。而且,其准确性似乎与所存储样例的数量不成比例。与这些方法相比,我们的模型主要利用一些存储的样例来进行粗粒度任务预测的 rehearsal,同时保留细粒度类预测的准确性。如 Fig. 4所示,在 class-incremental setting with episodic memory,我们的方法始终优于所比较的方法。

4.4. Classincremental with generative memory

接下来,我们继续对 class-incremental setting 进行实验,但是这次不允许任何样例被存储。在此框架中,一种流行的策略是采用生成模型来近似先前任务的分布,并通过采用伪造的训练样本来 rehearse the backbone network。其中,DGM [26]是最先进的方法,它提出了一种 class-conditional GAN 结构,配之以与HAT [32]相似的硬注意力机制。GAN生成器(generator)所伪造的样例将重放到鉴别器(discriminator),该鉴别器包含了提供类预测的辅助分类器。至于我们的模型,如 Sec. 3.3 所述,我们依赖于多个特定于任务的生成器。Tab. 2 比较了DGM和我们的带有 generative memory 的 class-incremental setting的模型的结果。再次证明,我们仅针对任务分类器进行 rehearsal 的方法被证明是有益的。DGM在Split MNIST上的表现特别出色,其中的伪造样例与真实样例几乎没有区别。相反,结果表明,随着模型分布的复杂性增加,class-conditional rehearsal 可能变得毫无用处,并且生成的样本的视觉质量下降。

4.5. Model analysis

Episodic vs. generative memory. 为了理解在处理 class-incremental learning 问题时必须采用哪种 rehearsal strategy,我们提出了以下问题:在有限数量的真实样例与(可能)无限数量的生成样例之间哪个好处更大一些?为了阐明这一点,我们报告了模型在Split SVHN和Split CIFAR-10上的性能与内存预算的关系。具体来说,我们将 episodic memories 的内存消耗计算为所存储样例的累积数量。对于 generative memories,我们考虑了存储其参数(以单精度浮点数格式存储)所需的字节数,丢弃了相应的鉴别器以及采样过程中生成的 inner activations。Fig. 5 给出了分析结果。可以看出,我们的依赖于 memory buffers 的模型变体始终优于依赖于 generative modeling 的模型。在CIFAR-10数据集上,generative replay 的准确性可与≈1.5 MB的 episodic memory 相媲美,后者比前者的生成器小20倍以上。两种策略之间的差距在SVHN上有所缩小,这是因为图像内容更简单,可以从生成器中获得更好的样本。最终,我们的方法基于memory buffers时,不仅需要的内存减少了3.6倍,而且其性能优于Split-SVHN上的DGMw模型[26]。

Gate analysis. 我们对 Fig. 6 中不同任务之间的 the activation of gates 进行了定性分析。具体地说,我们使用 Split MNIST 和 Imagenet-50 的验证集来计算每个门被来自不同任务的图像触发的概率。对 Fig. 6 的分析提供了两个证据:首先,随着观察到更多的任务,先前习得的 features 被重新使用。这种特征表明该模型不会落入退化的解决方案中(例如,将任务完全隔离到不同的子网中)。相反,我们的模型从以前的任务中获取的知识可以用于未来的任务优化。此外,大量的门从未触发过,这表明 backbone 网络容量的相当一部分可用于学习更多任务。此外,我们展示了来自不同任务的能够激活相同filters的图像在 low-level 或语义特征上显示出某种相似之处。

On the cost of inference. 接下来,我们测量模型在任务数量增加时的推理成本。Tab. 3展示了学习完每个任务后在 Split MNIST 和 Split CIFAR-10的测试集上我们模型的multiply-add operations的平均数量(MAC count)。此外,我们展示了 HAT [32] 的 MACs 以及 backbone 网络前向传播的成本。在 task-incremental setting 中,由于基于数据的门控模块仅选择一小部分 filters 来使用,因此我们的模型可节省大量的 operations。相反,在class-incremental setting 中的前向传播需要与到目前为止观察到的任务数量一样多的计算流。但是,由于active的 convolutional units 很少,因此它们每个的开销都很小。如表中所示,在 class-incremental setting 中,operations 的数量永远不会超过 backbone 模型中前向传播的成本。对于 ResNet-18 backbone 在 Split CIFAR-10 上的表现,推断成本的降低尤为显著。

Limitations and future works. 训练我们的模型可能需要大量GPU内存才能容纳更大的 backbones。但是,通过利用 activation maps 的固有稀疏性,可以进行多种优化。 其次,任务分类器容易受到任务之间语义分离程度的影响。例如,在任务语义明确定义的 setting 中,比如 T1 = {cat,dog},T2 = {car,truck}(动物/车辆)更适合于任务分类器,而反之,T1 = {cat,car},T2 = {dog,truck} 则不然。但是,我们的实验中,将类到任务的分配始终是随机的。因此,在任务分野明显的情况下,我们的模型甚至可以表现更好。

5. Conclusions

我们提出了一个基于条件计算的新颖框架,以解决卷积神经网络中的灾难性遗忘。拥有特定于任务的轻型门控模块,使我们能够防止灾难性地忘记先前学到的知识。除了为新任务学习新 features 外,这些门还允许动态使用以前学到的知识来提高性能。在测试过程中,无论有无任务标签,我们的方法都可以使用。在后一种情况下,训练任务分类器来代替任务标签。 通过广泛的实验,我们在 task-incremental 和class-incremental settings 中验证了模型相比于现有方法的性能表现,并在四个连续学习数据集中展示了state-of-the-art results。

优点

本文最大的创新点是将条件计算引入到持续学习问题当中。之前的一些工作解决持续学习问题的思路也是基于 binary mask,但是这些 mask 更倾向于是 pre-defined,而不能在学习过程中去自动地学习。通过引入条件计算,具体而言是 gumbel-softmax,解决了后向传播时离散值的微分问题,使得网络也可以去学习适应于任务的 binary mask。

其次,文章为了避免单个任务使用过多的 filters,在损失函数中增加了稀疏化的正则项,使得单个任务尽可能少地使用 filters,节约了网络容量,使得尽可能多地学习更多的任务。

缺点

本文提出的方法最大的问题是训练阶段的计算开销较大,即便是 task-incremental setting,由于要训练 gates,其成本会相应增加。对于 class-incremental 而言,虽说引入了任务分类器,但就其实质而言,还是用 rehearsal 来做,之前关于 rehearsal 的工作存在的问题,这里依旧,比如:存储开销、生成模型的计算开销、生成模型对于持续学习场景的适用性、数据隐私安全等问题。

启发

本文所承接的研究路线是顺着 PackNet、HAT 等工作的思路来做的,也就是基于 binary mask 的想法。相比于之前的工作,将条件计算引入进来,是本文对这一研究路线的最大贡献。本文着重分析了在卷积层增加 gates 的效果,如何在其它领域应用这一技术也是值得探索的,比如NLP等。

这一类工作的假设是网络大小不变,即如何在固定网络容量的条件下,尽可能持续学习各种任务。我认为,这一研究路线的发展路径是,在网络容量允许的情况下,继续去以 binary mask 分割相应于各任务的参数,而在必要的时候——即网络参数的使用情况已经近乎饱和,应该能够自动地去扩展网络。这一思路的研究已经出现,但是还并不多,也并不成熟。

至近至远东西,至深至浅清溪。至高至明日月,至亲至疏夫妻。