【论文阅读笔记|ACL2022】Continual Sequence Generation with Adaptive Compositional Modules

论文题目:Continual Sequence Generation with Adaptive Compositional Modules

论文来源:ACL2022

论文链接:https://aclanthology.org/2022.acl-long.255.pdf

代码链接:GitHub - SALT-NLP

0 摘要

当需要快速地使模型适应新的任务,而不忘记旧任务的知识时,持续学习这个任务是很重要的。现有的连续序列生成工作要么总是重用现有参数来学习新任务,而新任务在不同任务上容易发生灾难性遗忘,要么盲目地为每个新任务添加新参数,这可能会阻止相似任务之间的知识共享。

在这项工作中,提出使用自适应组合模块进行连续序列生成,以在transformer架构中自适应地添加模块,并为新任务组成新旧模块。还结合了伪经验回放,以促进这些共享模块中的知识转移。对不同生成任务序列的实验结果表明,我们的框架可以基于任务相似性自适应地添加模块或重用模块,在性能和参数效率方面都优于最先进的基线。

1 引言

目前最先进的语言生成模型可以在广泛的序列生成任务上实现良好的性能与静态数据分布。然而,现实世界的场景经常发生变化,这需要模型使用动态数据分布进行学习。在这种数据分布发生变化的情况下,现在的模型经常遭受灾难性的遗忘:模型在学习新信息时突然忘记以前学到的信息。持续学习(CL)已经被引入来通过减少遗忘和促进知识转移来提高模型在stream中学习任务的能力,然而,持续序列生成的研究相对较少。

与对文本分类和QA的持续学习相比,连续的序列生成更具挑战性,因为输出不再是离散的标签,而是不同风格/领域的连续文本数据。如何在学习新任务的同时保留旧知识,现有的连续序列生成方法可以分为两类。

  1. 第一个是不断学习旧参数上的新任务(图1a),通过经验回放和正则化来保持旧知识。然而,由于所有任务共享相同的参数,任务之间一定程度的干扰是不可避免的。
  2. 另一种是不断地将新的特定于任务的模块插入到每个新任务的每个transformer层中,同时冻结旧任务使用的预先训练的模型和模块(图1b),这可能会阻止任务之间的知识转移,并引入可能的参数冗余。

我们的目标是两全其美:即如何鼓励模型尽可能地重用以前任务中的模块,并且只在需要时添加新模块? 为此,提出使用自适应组合模块进行连续序列生成,如图1c所示。

为每一个即将到来的新任务引入了两个阶段的过程:决策阶段和训练阶段。

  • 在决策阶段,我们将决定要重用哪些模块,以及我们是否需要添加一个新的模块。
  • 在训练阶段,确定并固定模型的体系结构。

通过伪经验重放来增强新任务的训练过程,以进一步减少遗忘,并促进这些共享层中的知识转移。我们的模型体系结构是自适应的,因为它可以自动地为不同的任务添加新的模块,并为相似的任务重用模块,从而使其对不同的持续学习场景具有鲁棒性。此外,它是组合性的,因为对于每一个新任务的新体系结构都是由来自旧任务的重用模块和新添加的模块组成的,这允许知识的重用和转移。

为了评估上述自适应组合框架,我们在之前的工作之后,实验了四个具有代表性的序列生成任务:自然语言生成、SQL查询生成、摘要面向任务的对话进入stream中。与之前只在极短任务序列上测试的方法工作不同,我们在包含不同相似度的不同任务的长序列上验证了我们的方法。

我们认为,这是可以用来来验证该模型减轻遗忘的能力和它促进知识转移的能力。

总之,这项工作做出了两个关键的贡献:

  1. 提出使用自适应组合模块进行连续序列生成,通过模块重用来最大限度地转移知识,同时自适应地添加新模块,以减轻任务干扰和灾难性遗忘。
  2. 对更长和更多任务序列的实验表明,我们的方法以更高的参数效率优于基线。

2 相关工作

持续学习

在没有为新任务分配新参数的情况下,之前的工作主要利用经验回放和正则化来减轻灾难性遗忘在经验回放中,模型在学习新任务的同时,对以前任务中的旧例子进行重新训练。这些旧例通常存储在一个固定的大小或扩展内存缓冲区。除了replaying旧例外,还可以进一步添加隐藏状态的正则化或参数,以防止严重失真。

另一件工作线是为新任务创建新的参数,同时冻结旧任务使用的参数。在计算机视觉中,渐进式神经网络不断地为具有横向连接的新图像分类任务添加新的参数分支,以促进前向知识转移。动态可扩展网络通过使用正则化来限制添加的神经元的数量,在神经元水平上扩展了神经网络。在提前分配一个大网络的同时,PackNet通过网络剪枝不断地为每个任务分配一个参数子集。也可以采用神经结构搜索在学习新任务之前对新任务的结构进行优化。

在语言领域,之前的工作经常使用adapter,即插入到冻结transformer层的具有特定任务的mlp。但是,由于所有adapter模块只为一个特定任务设计,在这种情况下不允许直接知识转移。额外的模块,如注意力模块、capsule networkhyper network,都被证明有利于知识转移,但它们需要引入额外的参数,而没有考虑任何可重用或组合模块。

为了避免隐私问题,这项工作还遵循了一系列不存储真实示例的工作,例如通过GAN生成示例,通过模型反演来综合例子,在学习环境中使用未标记的数据。在语言领域,LAMOL训练语言模型解决当前任务并同时生成当前训练样例,然后,该模型可以生成“伪”旧示例,以便在任何新任务之前进行重播。我们采用这种伪经验重放来减轻我们方法中共享模块的遗忘。

对序列生成的持续学习

LAMOL基于自回归语言模型,有人对连续序列生成进行了初步探索。

在LAMOL的基础上,知识蒸馏通过改变任务的同时改进知识转移,被证明是有效的。

ARPER结合了参数上的正则化和带有优先级的范例重放。

也可以为每个任务添加了任务特定的模块以及基于困惑的分类器,而没有考虑到不同任务之间知识转移的潜力。

我们的方法不是盲目地为新任务添加新模块,而是可以检测可重用模块,并策略性地在那些层中添加新的adapter模块,其中重用旧模块将导致严重的遗忘。不引入额外的知识转移模块,我们的方法通过模块共享实现知识转移

任务特定模块

传统的微调方法通常在学习下游任务时修改大型预训练模块中的所有参数。最近,有人提出了一系列工作,通过插入特定任务的模块来提高微调的参数效率。

adapter在每个transformer层中插入MLP层。预固定调整将每个transformer层的键值对作为激活。之前的工作也表明,这些特定于任务的模块可能会受益于更具适应性的使用。

  1. 例如,AdapterDrop 表明,从较低的transformer层移除adapter几乎可以保持原始的性能,同时减少计算开销。
  2. Guo等人(2021)利用潜在变量来决定是否跳过某些transformer层中的adapter模块,以加快解码速度。

我们的方法超越了“特定于任务”的概念,重新组合来自不同任务的可重用模块,并为即将到来的新任务学习组合体系结构。

3 背景

持续生成公式

假设多个序列生成任务到达stream,每个任务Ti都有一组训练例子,其中Pji表示任务i中的一个(input, output) 对。在学习任务Ti(i > 2)时,无法访问以前任务中的示例。最终的目标是在对整个序列进行训练后,优化模型在所有任务上的平均性能。

微调

为了将不同的序列生成任务集成到一个单一的框架中,使用微调作为一般策略。在自回归语言模型的基础上,其核心思想是提供模型输入,并训练模型后续生成相应的输出。为了区分任务,我们在每个输入之后添加额外的问题来描述每个任务的目的。例如,自然语言生成任务的问题是自然语言是什么形式?形式上,对于每个(input, question, output)三元组,模型被优化,以output给定的input和question的相应的输出:

其中,表示input, question和output的连接,表示inputquestion

适配器(adapter)

在我们的框架中使用的模块是adapter,即将特定的模块插入到每个冻结的预训练transformer层。除了residual connection和层归一化外,transformer层还包含两个主要子层:一个注意力层和一个前馈层。

adapter模块由两个多层感知器(MLP)组成,

  1. 跟随多层注意力层组成
  2. 跟随前馈层组成

4 两阶段方法

受使用adapter将新的adapter模块插入到每个新任务的每个transformer 层中的启发,我们建议在对每个新任务进行训练之前,从战略上决定是否可以重用旧任务中的一些adapter模块,分为两个阶段:决策阶段训练阶段,前者确定新任务的体系结构,后者训练模型。

4.1 决策阶段

决策阶段旨在回答两个问题:

  1. 是否需要在这个层中添加一个新的模块?
  2. 如果没有,应该重用哪些旧的模块?

受基于interpolation的数据增强和神经结构搜索的启发,利用隐藏状态混合进行模块选择。假设有几个模块作为潜在的候选模块,在分别计算它们的输出后,计算它们的加权平均值作为总体输出,然后将其传递到模型的下一部分(见图2的左侧)。在端到端训练整个模型后,假设学习权重最大的模块是最有用的模块,因此将被选择进行重用。

形式上,假设已经在第1个transformer层中插入了k个模块,每个模块由两个mlp组成:(MLP_{MH}^{1,l},MLP_{FF}^{1,l})...(MLP_{MH}^{k,l},MLP_{FF}^{k,l})

在决策阶段开始时,再添加一个模块(MLP_{MH}^{k+1,l},MLP_{FF}^{k+1,l})。给定这些可学习的权重系数[\lambda _{1,l}^{},...,\lambda _{k+1,l}^{}],多头注意层输出o_{mh}^{l},前馈层输出o_{ff}^{l},我们混合隐藏状态如下:

其中,都被输入到它们下面的Add & Norm中。为了确保,使用softmax功能 从 产生: 

在每个transformer层中使用这种混合方法,使用Ltrain(见第4.2节)为新任务优化我们的模型,并为每一层找到最合适的模块。

请注意

  1. 在此过程中,预训练好的模型和所有旧模块都被冻结,只学习混合系数和新添加的模块。
  2. 计算加权平均值是一次使用一个adapter的convenient approximation,这是在训练阶段和推理期间的真实设置。
  3. 与图1中的其他基线相比,引入决策阶段来决定体系结构是否会引入额外的计算,而在一个位置的不同mlp的计算是可并行化的,以加快速度。

为了避免学习到的权重系数在某些层中不能太接近均匀分布,进一步在中添加了一个额外的正则化项,它是每个离散概率分布的熵之和

其中,γ是一个被调整为超参数的系数。

在这个阶段,一个简单的解决方案可能是在每个层中分配一个新模块,而不管旧模块是否可重用。为了避免这个琐碎的解决方案并尽可能地重用可共享的模块,我们设计了一个使用系数权值初始化的先验。对于每一个被初始化为c(c > 0),而被初始化为−c。在softmax后,每个旧模块的重量为乘以新模块的重量,增加了重用旧模块的趋势。

4.2 训练阶段 

进一步结合了伪经验重放,以减少遗忘和促进这些共享模块中的知识转移。其主要思想是教生成模型来解决当前的任务,并同时生成当前任务的例子。然后,在对每个新任务进行训练之前,可以生成一组伪旧例,并在训练过程中replay它们。

因此,除了在解决每个任务时产生的微调损失外,我们还为模型引入了额外的损失Lgen来生成当前任务的示例。形式上,给定x={input,question,output}的整个序列,首先在x的开始处添加一个特殊的标记[GEN],形成一个新的序列x0,然后对模型进行优化如下:

请注意,对不同的任务使用不同的特殊标记,因此我们可以为指定的任务生成示例。结合微调损失,整体训练损失为:

 其中η是Lgen损失权重。

一旦模型有能力从旧任务中生成“伪”示例,另一个问题是何时生成“伪”示例?由于这些“伪”示例用于旧任务和当前任务之间的共享模块, 我们只生成它们,而一些旧的模块被重用,用于当前的任务。在这种情况下,使用Ltrain在当前数据集和生成的示例上训练我们的模型。否则,就不需要伪例回放,只是在当前数据集上使用Ltrain来训练我们的模型。

5 实验

5.1 数据集

我们对四个具有代表性的序列生成任务评估了我们的方法:自然语言生成、SQL查询生成、摘要和面向任务的对话建模

在两种常见的场景下测试我们提出的方法:

1 在相似任务上的CL:在这种情况下,新的任务通常与学习的任务共享相同的任务模式,但来自不同的领域。

我们使用E2ENLG和RNNLG的4个不同领域((restaurant, hotel, tv, laptop)形成5个类似的任务。然后,使用这些任务的四个不同顺序作为测试任务序列。

2 对不同任务的CL:在这种情况下,新任务和旧任务之间的分布转移可能相对较大,所以主要的挑战是在学习新任务时尽可能多地保留旧知识。

在这种情况下,进一步合并了WikiSQL(SQL查询生成)、CNN/DailyMail(新闻文章摘要)、MultiWOZ(语义状态序列生成)到我们的任务序列1。随机选择四个不同的顺序作为我们的测试任务序列。总之,我们使用了8个不同的任务序列(表1)来评估我们的模型。每个数据集的统计数据/度量和细化结果在附录A中。

5.2 基线任务

我们将我们提出的模型与以下基线进行了比较

  1. Finetune:在几个任务上依次微调GPT-2模型。
  2. EWC根据参数对旧任务的重要性,对这些参数进行了正则化。
  3. LAMOL在伪经验重放的帮助下,不断细化整个GPT-2模型。
  4. adapter+CL将adapter模块插入到每个GPT-2层的每个任务中。
  5. adapter+Drop:我们基于adapter+CL从GPT-2的前三层中删除了所有这些adapter模块。
  6.  Adapter+LAMOL:在第一个任务中,我们只将adapter模块插入到每个转换器层中,然后使用这些adapter模块通过伪体验回放来学习整个任务序列。

请注意,ARPER(Mi等人,2020年)也解决了连续序列生成的问题,但它需要一个额外的内存缓冲区来存储来自旧任务的示例,这与我们的任务不同。

我们使用GPT-2作为我们的骨干和adapter实现。更多细节见附录A。

6 结果及分析

对于每个场景(相似的任务和不同的任务),报告所有序列的平均分数的平均值作为一个总体度量。还提供了(i)使用几何平均值的评估结果,以及(ii)附录a中每个任务的最终表现。

表2总结了所有8个任务序列的最终表现。我们观察到,无论在相似或不同的任务上,微调都会遭受非常严重的遗忘,这凸显了持续学习工作的重要性。虽然EWC可以显著地提高微调的性能,但它的性能仍然远远落后于LAMOL,这突出了体验重放的重要性。

对于包含相似任务的序列,即使有更多的可学习参数,adapter+CL的性能也不如adapter+LAMOL。这说明,当任务相似时,共享参数和经验重放可以进一步促进知识的传递。在伪体验重放的前提下,我们的方法的性能优于adapter+LAMOL,证明了我们的自适应组合体系结构的有效性。我们的方法也实现了比adapterCL和adapter+Drop更高的参数效率。对于包含不同任务的序列,其中可转移知识有限,参数共享可能导致退化,adapter+CL和adapter+Drop似乎比adapter+LAMOL和LAMOL鲁棒性更强,因为它们通过参数隔离避免了灾难性遗忘。使用与adapter+Drop相似数量的参数,我们的方法在所有任务序列上始终优于adapter+CL,这证实了我们的方法可以在减少参数冗余的同时防止不同任务之间的干扰。

6.1 消融研究

我们从相似的任务中随机选择任务序列#1,从不同的任务序列中随机选择序列#8作为我们的消融研究。

每个组件的重要性

为了检验每个组件在我们的方法中的重要性,我们在不同的设置下进行实验:

不使用熵损失(w/o Entropy loss),初始化所有权重系数(w/o Weight Ini ),不重播伪数据(w/o Pseudo ER)。

 如表3所示,我们发现

(i)在去除熵损失后,通过使用更多的参数,几乎保持了序列#1的性能。同时,在使用相同数量的参数时,序列#8的性能显著下降。这一观察结果表明,熵损失有利于在添加参数和保持良好性能之间实现更好的权衡。

(ii)当我们用零初始化所有的权值系数时,并没有重复使用旧例子的明确倾向。在这种情况下,创建了许多冗余模块,从而防止了知识转移,从而导致两个序列的性能下降。序列#1的下降更严重,因为在类似的任务之间有更多的可转移知识。因此,我们得出结论,权重初始化对于实现相似任务之间的知识转移很重要。

(iii)删除伪体验重放会导致两个序列上最严重的性能下降。虽然我们的方法可以战略性地检测哪些模块可以被重用,直接训练他们完成新任务而不保护旧知识将导致灾难性的遗忘。

任务序列长度的影响

先前关于持续学习的工作表明,序列长度的差异可能会影响持续学习的表现。为此,我们进一步研究了表4中序列长度的影响,其中我们报告了每一步的平均性能,并计算了Lopez-Paz和Ranzato(2017)之后的反向转移:

其中,为第j个任务训练后的第j个任务的表现得分。

我们发现,在序列#1上,adapter+LAMOL和我们的方法在所有阶段都始终优于adapter+CL,这可以通过多个任务之间更好的知识转移来解释。除此之外,我们的方法在大多数情况下都优于adapter+LAMOL,展示了自适应添加模块的好处。在序列#8上,当任务序列的长度变长时,适adapter+LAMOL就会苦苦挣扎。随着越来越多的任务的到来,任务差异和分布转移的影响更大,这是伪体验回放无法应对的。在这种情况下,有有限的反向转移,但有严重的遗忘。相比之下,adapter+CL和我们的方法在在流中学习更多的任务后证明了它们的鲁棒性。我们的方法在整个学习过程中也优于adapter,证明了即使任务之间的相似性有限,我们也可以实现知识转移。

案例研究

我们选择了序列1中的e2e和序列8中的wiki作为两个具有代表性的任务,以说明表5中不同方法生成的最终输出。经过对整个序列的训练,Adapter+LAMOL不能正确地传递输入中提供的信息,容易产生语法错误和遗漏关键点。这可能归因于学习新的新任务的干扰。虽然adapter+CL通过参数隔离成功地缓解了这个问题,但我们的方法同样使用更少的参数,并在没有冗余信息的情况下生成更好的序列。

6.2 组成模块的增长

为了说明添加/重用模块的过程,我们在图3中使用序列#4描述了每个阶段的模型体系结构,根据表2,这是包含类似任务的最具挑战性的序列。由于第二个任务(e2e)和第一个任务(酒店)之间的相似性很低(见附录A中的图4),在进行第二个任务的训练之前,我们的框架会自动学习在第6、8、9、10、11}层中添加额外的adapter模块。当第三个任务(rest)到达时,鉴于它与第一个任务的高度相似性,我们的方法正确地决定重用第一个任务中使用的所有模块。有趣的是,第四个任务的体系结构是由共享模块组成的,前3个任务位于层{1、2、3、4、5、7、12}中,与第6层的第2个任务共享模块,与第8层的第1和第3个任务共享模块,并为{9,10,11}层的第4个任务添加新的模块。对于第五个任务,由于第四个任务的高度相似性,我们的方法重复使用了所有模块。这表明,我们的方法能够适应不同的传入任务,并能够从不同的旧任务中为新任务组成模块。我们还在附录B中提供了一个比较,以演示重用来自不同transformer层的模块的效果。

7 结论

本研究研究了自适应组合模块的连续序列生成,我们提出了隐藏状态混合自适应地组合新任务的新旧模块,并利用伪经验重放来促进知识转移。在不同序列生成任务上进行的实验表明,无论是该方法在相似的任务序列和不同的任务序列上,都比现有的基线具有更高的性能。我们的工作也受到了一些限制,比如引入了额外的训练时间。在未来,我们计划研究如何进一步更有效地加快决策阶段,并将当前的框架推广到更多样化的NLP任务,如文本分类和机器翻译。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值