- 论文:Continual Learning of a Mixed Sequence of Similar and Dissimilar Tasks
- 会议:NIPS 2020
- 作者:
- Zixuan Ke:伊利诺伊大学芝加哥分校,博士生,Bing Liu 的学生;
- Bing Liu:伊利诺伊大学芝加哥分校,教授;
- Xingchang Huang:苏黎世联邦理工大学,博士生。
1 场景
本文的场景就是普通的持续学习,但与其他文章不同的是,其他文章通常只关注如何解决灾难性遗忘,本文认为除了解决灾难性遗忘,还有很多其他的事情要做。
假设已学完任务
- 如果
与 相似,则二者的知识应相互迁移:- 前向迁移(Forward Transfer):用
学到的知识帮助新任务 ; - 后向迁移(Backward Transfer):
学到的知识反过来更新旧任务;
- 前向迁移(Forward Transfer):用
- 如果
与 不相似,则二者蕴含的知识也是不交叉的,所以都应该记住,即在学习新任务 时避免遗忘 的知识。
而其他文章将其一视同仁,都化为第二种情况,干脆都别忘了。
迁移学习要求两个领域有相似性,作者如此分成相似与不相似的任务,前者应用迁移学习,所以本文是一篇典型的持续学习与迁移学习结合的文章。
如果任务
注意本文的场景必须是任务增量(文中称 Task Continual Learning,TCL),任务标识
2 模型
本文模型称为 CAT(Continual learning with forgetting Avoidance and knowledge Transfer)。它由三部分组成:
- 知识库(KB):是一个网络,权重中存储知识,是模型的主要部分。输入即原始输入
,输出为 的一个 Embedding,其后可接分类器分类。 记号: 为第 层神经元个数, 表示第 层到第 层的连接权重; 表示损失函数在权重 上的梯度,二者都是 矩阵; 表示一个输入 在第 层的输出,是 维向量。 - 任务 Mask(TM):为 KB 网络每一层神经元(不是权重)提供 mask,标识了对当前任务的重要程度,它是二值的 0,1。 记号:
表示任务 第 层的 mask,是 维向量。它起到了选择子网络的作用,注意有时我们想要整个网络,则不允许它起作用(或全设为1)。具体的选择作用表现在两个方面:- 选择每一层的输出:一个输入
在通过网络得到 后,还要调整 (效果是把一些输出值置为0),才能继续通过下一层;(最终,加了 mask 后最后一层的输出可看成针对任务 的特征) - 选择更新的权重:选择了输出后,未被选中的神经元后面连接的权重就不必更新了。做法是先将 mask 向量扩展(与 broadcast 类似)为形状同
的 矩阵,再调整梯度 (效果是把置0的神经元后面权重的梯度置为0)。
- 选择每一层的输出:一个输入
- 知识迁移 Attention(KTA):是一个使用了简单的 Soft Attention 机制的网络,负责知识迁移(参考此文章),其目的是把相似任务的结果融合并迁移到新任务上。输入为
过任务 mask 的一系列特征 ,输出它们的某个线性组合,其后可接分类器分类:
系数即 Attention 得分:
参数有公共的
模型如图所示,主网络为 KB + KTA,TM 是嵌入在 KB 里的一个挂件。该网络在完全不需要知识迁移的时候使用 KB 的 embedding 后接分类器分类,而需要迁移的时候将 KB 的 embedding 再通过 KTA 得到进一步的 embedding 后接分类器分类。
由于是任务增量学习,分类问题是几分类是已经知道的,所以分类头的形状是提前固定的。
2.1 Task Embedding
每个任务标识
(合称 ):用于生成 KB 第 层的任务 mask 。二者对应关系为 ( 为超参数),大于 0.5 取 1,反之取 0; :用于输入给 KTA,辅助计算 Attention 得分,其完成知识迁移。
模型输入不只有
3 测试过程
经过
,它包含所有与任务无关的网络参数,如 KB 的权重,KTA 的 以及两个分类头的权重。在训练时,它们不断更新,只用最后任务 的结果;- 每个任务与之前任务的相似性判断结果:每个任务都有两个集合
分别表示相似任务与不相似任务; - 每个任务
的 Task Embedding 和 (后者有的可能没有,也不需要,见下节 tip),前面说过它们是 task-specific 的参数。
测试过程:新来一个测试数据
- 如果有前面的任务与之相似(
),则 通过 KB 在 任务上的 mask 得到一系列特征 ,让它们过 KTA 和后面的分类头,得到分类结果; - 如果没有一个相似,则
通过 生成的该任务的 mask,得到最后一层特征 ,再通过 KB 后面的分类头,得到分类结果。
4 训练过程
任务 0:直接训练
- 数据:
- 损失函数:
- 训练方式:因为是第一个任务,随机初始化
- 要用的结果:训练得到的 KB + 分类头权重
,任务 0 的 Task Embedding (对应的任务 mask 如图右上)
任务 1:首先判断它与任务 0 是否相似。做法是比较两个模型
先训练参考模型(Reference Model)
- 数据:
- 损失函数:
- 训练方式:单独复制出来一份 KB(之前的 KB 是主要的东西,不能覆盖掉),随机初始化
- 要用的结果:用验证集
测试效果
再训练迁移模型(Transfer Model)
- 数据:
- 损失函数:
- 训练方式:固定 KB + mask 部分的权重,分类头随机初始化
- 要用的结果:同上
如果迁移模型比参考模型效果好,任务 1 用 0 的知识都比它自己努力学习知识要好,那么有充分的理由说 0 里包含了与 1 相似的知识。相似与否,决定了任务 1 该如何训练:
若任务 1 与任务 0 不相似,则应该走防止遗忘的路线。先用任务 0 的 mask 屏蔽掉对任务 0 重要的权重,训练任务 1:
- 数据:
- 损失函数:
- 训练方式:固定 KB 属于任务 0 mask 对应的权重,训练其他部分
- 要用的结果:
, (此时任务 mask 如图右中,注意 与 不可能重合)
若任务 1 与任务 0 相似,则应该走知识迁移的路线。与迁移模型道理一样,也是提取任务 0 mask 最后一层输出,但这时要训练不是简单的分类头,而是作者提出的专门负责知识迁移的 KTA + 分类头。另一个不同的是,作者没有固定前面的 KTA + TM,它允许被梯度回传训练,一是为了得到
- 数据:
- 损失函数:两部分
- 训练方式:不要屏蔽任务 0。在 $正常训练即可
- 要用的结果:
, e^{(1)}$(此时 与 可以有重合,因为任务 0,1 是相似的),
任务
首先是判断任务相似。此时要比较任务
对
对
所以,任务
- 数据:
- 损失函数:两部分
- 训练方式:屏蔽任务
,其他正常训练即可 - 要用的结果:
, ,
请注意,
上图最下面的两图,表示任务 2,
总结一下上面,任务 0 相当于不与前面任何相似。任务 1 由于前面只有一个,要么空集,要么全集;中间情况只有任务 2 才可能开始有。任务 0 和 1 的过程都可以统一到任务