Paper Note: Lifelong Learning of Compositional Structures

Lifelong Learning of Compositional Structures

Jorge A Mendez, ERIC EATON

ICLR 2021

[paper]

Main Idea

本文想要解决的问题是“如何在持续学习中学习 compositional structures”。我们设计了一个通用框架,该框架与具体的学习算法和要学习的结构形式(the form of the structures being learned)无关。该框架体现了将持续学习过程分为两个不同阶段的好处。在第一阶段,learner 通过组合已经获得的现有 components 来努力解决新任务。第二阶段使用新任务中的发现来改进现有 components,并在必要时构建新的 components。

我们提出的框架能够合并各种形式的 compositional structures,以及避免“灾难性遗忘”的不同机制。作为我们框架灵活性的示例,它可以将朴素的 fine-tuning、experience replay、作为知识保留机制的 elastic weight consolidation (Kirkpatrick et al., 2017) 以及线性模型 (Kumar & Daume III, 2012; Ruvolo & Eaton, 2013) 的线性组合、soft layer ordering (Meyerson & Miikkulainen, 2018)、和门控网络的 soft version (Kirsch et al., 2018; Rosenbaum et al., 2018)作为 compositional structures进行合并。

之前的很多工作虽然有效避免了“灾难性遗忘”的问题,但是这些方法并未为发现可重用知识做出实质性努力。有人可能会认为,以一种可在所有任务中重用的方式学习模型参数。但是,尚不清楚这些参数的可重用性意味着什么,此外,重用参数的方式已硬编码到架构设计中。当试图学习具有高度可变性的任务时,后一个问题是一个主要缺点,因为连接任务的确切形式通常是未知的。 我们希望该算法可以自主确定这些连接。

与以前的工作不同,我们的方法在持续学习的 setting 中显式地学习 compositional structures。我们不假设能够接触大量任务,也不假设在单个任务的训练之后具有学习 definitive components 的能力。相反,我们训练少量的初始任务(在我们的实验中为四个任务),然后自动更新现有 components 以适应新任务。我们的框架还允许随着时间的推移合并新的 components。

The Lifelong Compositional Learning Framework

这一部分介绍我们提出的终身学习组件结构(compositional structures)的通用框架。Figure A.1说明了我们提出的框架,该框架分为四个学习阶段:1)组件初始化,2)将新任务与现有组件同化,3)利用新知识对现有组件进行改进,以及4)扩展组件集 。

Figure A.1

我们的框架将知识存储在 kk 个共享组件构成的集合 M={m1,...,mk}M=\{m_1,...,m_k\} 中。每个组件 mi=mϕiMm_i= m_{\phi_i} \in \mathcal{M} 是由 ϕi\phi_i 参数化的、自包含的、可重用的函数,可以与其它组件结合使用。agent 通过特定于任务的结构 s(t):X(t)×MkFs^{(t)}:\mathcal{X}^{(t)}\times \mathcal{M}^k\mapsto \mathcal{F} 重构了每个任务的预测函数 f(t)f^{(t)},其中 Mk\mathcal{M}^kkk 个组件的可能序列的集合,因此有 f(t)(x)=s(t)(x,M)(x)f^{(t)}(\boldsymbol{x})=s^{(t)}(\boldsymbol{x},M)(\boldsymbol{x}) ,其中 s(t)s^{(t)} 被向量 ψ(t)\psi^{(t)} 参数化。注意 s(t)s^{(t)}F\mathcal{F} 得到一个函数。结构函数从 MM 中选择组件,并按照组成它们的顺序来构建每个任务的模型(the f(t)f^{(t)}'s)。

该框架背后的直觉想法是,在任何一个时间点 tt,agent 都能够获得一个组件的集合,以此解决之前所遇到的问题 (T(1),...,T(t1))(\mathcal{T}^{(1)},...,\mathcal{T}^{(t-1)})。如果这些组件在最小程度的修改之下,能够组合起来解决当前的任务 T(t)\mathcal{T}^{(t)},那么 agent 应该首先学习在对组件进行修改之前怎样去重用这些组件。在训练当前任务 T(t)\mathcal{T}^{(t)} 的早期阶段保持组件固定不变的原因在于,agent 在获得足够充分的知识,使之对于 T(t)\mathcal{T}^{(t)} 能有好的表现之前,过早地修改既有组件会对其造成灾难性破坏。当学习得到结构 s(t)s^{(t)},我们认为 agent 对于当前任务已经得到了充分的知识,此时更新组件以更好地运用知识就很合理了。如果无法用现有的组件来处理当前任务,那么就应该添加新的组件。这些概念大致反映了 Piaget’s (1976) 关于智力发展的理论中的同化(assimilation)和适应(accommodation)阶段,因此我们采用了这些术语。我们框架下的算法总结归纳为 Algorithm 1,分为以下几个步骤。

Initialization

组件 MM 应该被初始化,以鼓励跨任务和在任务模型的不同结构配置中的重用性。前者意味着无论任务的目标是什么,组件都应该实现一个特定的子问题。后者意味着组件可以在单个任务模型的结构中多次重用,或者在不同任务中以不同的结构顺序重用。例如,在深度神经网络中,这意味着组件可以在不同的深度使用。我们通过训练 agent 同时遇到的前几个任务来初始化 MM,保持一个固定但随机的结构来重用组件,以鼓励重用性。

Assimilation

寻找组合知识(compositional knowledge)的算法在如何优化每个任务的结构方面各不相同。在模块化网络中,组件选择可以通过强化学习、随机搜索或反向传播来学习。我们的框架将使用这些方法中的任何一种,通过保持组件 MM 固定,只学习结构 s(t)s^{(t)} 来同化(assimilate)当前任务。我们的框架支持的方法必须接受能够将对结构的学习与对组件本身的学习分离。

Accommodation

一个有效的方法应该保持在早期任务上的表现,同时足够灵活地吸收新知识。为了适应当前任务中的新知识,learner 可以 adapt 现有组件或 expand 以包括新组件:

  • Adaptation step 非组件结构(non-compositional structures)的方法是或是使用来自当前任务的数据对模型进行简单的微调(fine-tune),或是施加正则化以选择性地冻结权重,或是存储来自先前任务的部分数据进行 experience replay。一旦当前任务被同化,我们将使用这些方法中的任何一种来实例化我们的框架,以便将新知识容纳到现有组件中。为了实现这一点,我们要求该方法只能选择性地应用于组件参数 ϕ\phi

  • Expansion step 通常,现有的组件即使经过一些调整,也不足以解决当前的任务。在这种情况下,learner 会合并新的组件,这些组件应该编码不同于现有组件的知识,并与这些组件相结合来应对新的任务。发现新组件的能力赋予 learner 终生学习所需的灵活性。为此,我们提出 component dropout,如 Section 4.2 所述。

全文结束