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
Abstract
当针对一系列学习问题进行优化时,卷积神经网络会遭遇“灾难性遗忘”:当它们满足当前训练样例的目标时,它们在先前任务上的表现将急剧下降。在这项工作中,我们引入了一个新框架,通过条件计算(conditional computation)解决这个问题。我们为每个卷积层添加了 task-specific gating modules,用来选择对于给定输入使用哪些 filters。
依照这种方法,我们实现了两个吸引人的特性。首先,gates 的执行模式允许识别和保护重要的 filters,从而确保先前学习的任务的模型性能不会损失。其次,通过使用稀疏化目标,我们可以减少所选用的 kernels 的数目,从而保留足够的模型容量来消化新任务。
现有的解决方案属于 task incremental learning 的范畴。但是,在许多实际情况下,在 inference 的时候可能无法知晓样例是属于哪个任务。因此,我们另外引入了一个任务分类器,该分类器可预测每个样例的任务标签,以此解决在 inference 时不能知道样例属于哪个任务的情况(也就是将 task incremental 的方法改造成了 class incremental 的方法)。
我们在四个持续学习数据集上验证了我们的想法。结果表明,无论是否存在 task oracle(即inference时样例的任务标签),我们的模型始终优于现有方法。值得注意的是,在 Split SVHN 和 Imagenet-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)。
2. Related work
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
我们有一个参数模型(比如:神经网络),称作 backbone 或 learner 网络,该网络将要去学习一系列的 个任务,即:。每个任务 是一个分类问题, ,其中 ,并且 。
task-incremental setting 是对下面的式子进行优化:
其中 为 learner network 的参数, 分别为每个样例的 observation,标签以及所对应的任务。这样的最大化问题受到持续学习的约束:当模型顺次观察任务时,Eq.1 中外层期望难以计算或近似。值得注意的是,该 setting 需要假设每个样例所属的任务的标签在训练和测试阶段都是已知的。在实际中,可以利用这些信息来隔离分类器的相关输出单元,从而防止通过同一 softmax 层(multi-head)的属于不同任务的类之间发生竞争。
class-incremental 模型是对下面的式子进行优化:
缺少任务标签限制了模型中任何形式的已知任务类型情况下的推理。该 setting 需要将输出单元合并到单个分类器(single-head)中,来自不同任务的类在其中相互竞争,这通常会导致更严重的遗忘[35]。尽管模型在训练阶段可以基于任务信息进行学习,但是在推理过程中任务标签是不可知的。
为了处理来自未知任务的样例,同时保留 multi-head settings 的优势,我们将联合优化类预测和任务预测,如下所示:
Eq. 3 描述了两重目标。一方面, 负责 class classification given the task,与 Eq. 1 中的 multi-head objective 相似。另一方面, 旨在从所观察到的样例来 predicting the task。这种预测依赖于一个任务分类器,该任务分类器以 single-head 方式进行增量训练。值得注意的是,Eq. 3 中的目标将 single-head 复杂性从类预测转移到任务预测级别,具有以下好处:
-
给定任务标签,类预测准确性不会下降;
-
来自不同任务的类在训练和测试期间都不会相互竞争;
-
具有挑战性的 sing-head 预测步骤已从类级别转移到任务级别;由于任务和类形成两级层次结构,因此前者的预测可以说更容易(因为它在较粗略的语义级别上起作用)。
3.2 Multihead learning of class labels
在本节中,我们介绍了我们所使用的条件计算模型。 Fig. 1 说明了我们框架中使用的门控(gating)机制。我们对门控机制的讨论将仅限于卷积层的情况,但是它也适用于其他参数化映射,例如全连接层或残差块(residual blocks)。 表示 -th 卷积层的输入 feature maps, 表示 -th 卷积层的输出 feature maps。但是,我们不直接使用 ,而是通过剪除掉没有什么信息量的 channels,前向传播一个稀疏的 feature map 。在训练任务 的过程中,由gating module 决定激活哪些 channels:
其中 ,其中 表示 channel-wise 的乘法。为了符合增量设定,每次模型观察到来自新任务的样例时,我们都会实例化一个新的 gating module。每个 module 被设计为轻量级网络,其计算成本和参数数量可忽略不计。具体来说,每个 gating module 均包括一个多层感知器(MLP),其中包含一层具有16个单元的单层隐藏层,后面接着一个 batch normalization layer [12] 和ReLU激活函数。最终的线性映射为卷积的每个输出通道提供了对数概率。

伴有 gates 的反向传播梯度具有挑战性,因为要采用不可微分的阈值来进行二进制开/关决策。因此,我们依赖于Gumbel-Softmax采样[13, 19],并使用 straight-through estimator[4]获得了梯度的有偏估计。具体来说,我们在前向传播过程中采用硬阈值(以零为中心),而在后向传播中采用 sigmoid 函数(温度参数 )。
此外,我们以稀疏化目标惩罚了活跃卷积核的数量:
其中 是 gated layers 的总数,而 是控制稀疏度的系数。稀疏化目标指示每个 gating module 选择最少的 kernels 集,从而使我们可以保留 filters 以优化将来的任务。此外,它使我们能够根据任务的难度和目前观察到的样例,有效地调整已经分配的网络的容量。这种数据驱动的模型选择与其它采用固定比率进行模型增长[30]或权重修剪[21]的持续学习策略形成对比。
在对任务 结束优化的时候,我们通过在一个验证集 上估计 gates 打开状态的概率,对 -th 层的每一个 unit 计算一个关联分数 :
其中 为指示函数, 为概率分布。通过对这些分数进行阈值处理(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 层须要应用哪个选通模块 ,其中 表示未知任务。 我们的解决方案是采用所有选通模块 ,并将所有选通层(gated layer)的输出 前向传播。 依次地,下一层 从第 层接收 gated outputs 列表,应用其选通模块 并产生输出列表 。这种机制在网络中生成并行的计算流,共享相同的层,但为每个层选择不同的 sets of units 进行激活(Fig. 2)。尽管并行流的数量随任务的数量而增长,但我们发现我们的解决方案在计算上比 backbone 网络开销更小(见 Sec. 4.5)。这是由于选通模块在每个流中选择了数量有限的卷积 filters。

在最后一个卷积层(即第 层)之后,我们得到了 个候选 feature maps 构成的列表和同样多的分类头。所有 feature maps 连接之后输入到任务分类器:
其中, 表示空间维度上的全局平均池化(global average pooling)算子, 表示对特征的连接。任务分类器的结构基于浅层MLP,包含一个具有 64 个ReLU units 的隐藏层,后面接着一个预测任务标签的softmax层。我们使用标准的交叉熵目标函数来训练任务分类器。对任务分类器的优化与对任务 t 的类标签的学习一起进行。因此,网络不仅学习区分任务t中的类的特征,而且还学习去区分任务t和所有先前任务的输入数据的区别。
single-head 任务分类器容易遭受灾难性遗忘。最近的论文表明,基于重放的策略是 single-head settings 中最有效的持续学习策略[35]。因此,我们选择通过 rehearsal 来改善问题。 特别是,我们考虑以下方法。
Episodic memory. 先前任务的一小部分样例用于 rehearse 任务分类器。在训练任务 t 的过程中,buffer 保留了来自过去任务 的C个随机样例(其中C表示固定容量)。对 buffer 和当前 batch(来自任务 t )中的样例进行重新采样,以使任务标签在 rehearsal batch 中的分布均匀。在任务 t 的末尾,对 buffer 中的数据进行二次采样,以使每个过去的任务都包含 个样例。 最后,从任务 t 中选择 m 个随机样例进行存储。
Generative memory. 生成模型用于从先前任务中采样伪造的数据。具体来说,我们利用Wasserstein GANs with Gradient Penalty(WGAN-GP [10])。为了克服采样过程中的遗忘,我们使用了多个生成器,每个生成器都对特定任务的样例分布进行建模。
在这两种情况下,replay 仅用于 rehearse 任务分类器,而不用于分类头。概括而言,我们的模型的完整目标为:class level 的交叉熵(Eq. 3 中的),task level 的交叉熵(Eq. 3 中的 )以及稀疏项(Eq.5 中的 )。
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 分割相应于各任务的参数,而在必要的时候——即网络参数的使用情况已经近乎饱和,应该能够自动地去扩展网络。这一思路的研究已经出现,但是还并不多,也并不成熟。