第一次写综述的小记,也将是我读完的第一篇综述(
最开始因为可乐老师的原因,接触到了持续学习,然后从一开始的音频到自己读了一些ICLR的paper找idea做NLP的持续学习,然后做了自己第一个粗糙的工作,在杰哥的帮助下,完成了第一次投稿。之前跟杰哥聊天的时候他就提到了持续学习的创始人大牛就是他们UIC的,十几万引用,没想到不到两个月他母校UIC就出了这么一篇NLP综述,赶紧来拜读一下
持续学习的定义
持续学习被定义为一系列的任务 1 , . . . , τ 1,...,\tau 1,...,τ,并且每当一个任务完成训练之后,它的训练数据就不再可见。
持续学习的目标
持续学习有两个主要的目标:
- 克服灾难性遗忘
- 知识迁移
下文中都用 CL (continual learning) 代替持续学习,KT (knowledge transfer) 代替知识迁移
灾难性遗忘是指在学习新任务时,系统需要更新从先前任务中学习到的现有网络参数,这可能会降低先前任务的性能
KT是指将过去学到的知识转移到新任务学习(正向转移)的能力,还期望使新任务学习能够改进先前任务的模型(向后转移)
有两种CL模式:离线CL和在线CL
在离线CL中,一项任务的所有训练数据都可以提前获得,并且训练可以花费任意数量的时间。
在在线CL中,每个任务的数据都来自一个数据流。每当一批数据在流中累积时,都会在一次迭代中进行训练。所以在线CL只在一个时期内训练。
持续学习的几种基本设定
1.Task-incremental learning (TIL) & Task incremental learning without task-id in testing(TILw)
任务中的类别(如果有的话)可能是不相交的(例如,一个任务对不同类型的政治文件进行分类,而另一个任务则对包括政治类在内的不同广泛主题的文件进行分类)。当类不相交时,测试中需要任务id。最近的一些方法已经可以防止TIL的CF。主要挑战是KT
两种任务的区别在与 task-id在测试中是否可见
2.Class-incremental learning (CIL)
task-id 在测试中不可见
CIL主要用于有监督的最终任务学习,其中每个任务都有一组不重叠的类
只为所有学习的类别建立了一个模型。在测试中,可以呈现任何类的测试实例以进行分类。
CIL比TIL更具挑战性,因为系统需要区分不同的任务
3.Domain-incremental learning (DIL) & Domain-incremental learning without task-id in testing (DILw)
DIL假设所有任务(来自不同域)的类标签相同。模型中只使用一个分类头
生成任务符合DIL设置,因为LM头具有相同数量的“类”(词汇tokens)
两种任务的区别在与 task-id在测试中是否可见
Approaches for Continual Learning
虽然所有调查都遵循已建立的方法家族,, regularization-based, replay-based and parameteriso-lation based来处理CF,但我们又添加了一个专门针对NLP的家族 (i.e., instruction-CF based). 。我们进一步总结了旨在鼓励KT的5种不同方法。为了让NLP社区受益更多,我们还讨论了基于NLP的CL系统与基于CV的CL系统是如何相似或不同的
Approaches for Overcoming CF
Regularization-CF Based Methods
这类方法通常添加惩罚或正则化,以惩罚在学习新任务时对先前任务学习的重要参数的更改。这种方法的主要缺点是它在新的任务学习和防止遗忘之间引入了一种权衡
- Regularizing the loss based on parameter importance.
EWC使用之前任务的梯度作为之前任务的重要程度,标记为 F k τ F_{k}^{\tau} Fkτ(fisher信息矩阵,k是参数的索引),然后将其乘以旧参数和新参数之间的差。所得正则化项被添加到损失中,以惩罚对重要参数所做的更改。
RMR-DSE 将 F k τ F_{k}^{\tau} Fkτ 改为一个超参数,使得在训练每个任务后没有额外的backward pass
AEWC 使用改进的EWC算法,使重要度变为可在线计算,其主要思想是用重要性估计器替换fisher矩阵,以便可以去除额外的重新训练和点估计
SRC 持续更新带正则化的句编码器,惩罚通过矩阵概念器计算,矩阵概念器捕获每个语料库的特定特征
- Regularizing the loss based on distillation.
这种方法蒸馏之前模型学到的知识,需要copy并保存一份之前模型的参数
这种方法使从cv的 LwF 中第一次使用
ExtendNER , CFID, CID , PAGeR 应用KL散度来实现蒸馏
LFPT5 将KL散度应用到旧和新的prompt上
目前的NLP模型只正则loss,但是cv的模型还将正则加到了梯度上。OWM 在与旧任务的输入正交的方向上投影梯度。将梯度映射到先前任务的空间,以减轻CF。一些其他任务正则化学习速率,以减缓参数更新或控制局部最小值的几何结构
Replay-based Methods
基于replay的方法有两种,1. 保存之前task的子集,2. 用模型生成伪样本,并且将这些样本一起加入到当前的dataset中一起训练
CFID 用动态加权重放原始样本以控制样本权重
CID 进一步考虑了丰富的新数据和小的旧数据之间的不平衡。CID还利用了不平衡学习社区中的思想(类间边际损失和余弦归一化)来缓解回放中的数据不平衡问题
Continual-T0 保存1%之前的样本
ELLE 使用巨大的buffer来保存样本(1G)
IDBR 用k-means来挑选样本(实测没屁用)
MBPA ++ 和 Meta-MBPA ++ 在推断中有选择地使用保存的旧样本。在推断过程中,测试样本的表示用于检索回放存储器中最近保存的K个样本。基于K个样本,执行梯度更新以实现样本特定的微调。然后使用微调网络输出测试样本的最终预测
MeLL 存储用于元学习的类原型表示
PCLL 使用prompt 和 条件变分自编码器来生成之前的样本,它为每个任务保存特定于任务的提示,以便在生成以前的任务样本时,可以使用保存的以前的任务提示来帮助调整LM
PAGeR 用hard-prompt来生成样本
LAMOL 和 ACM 将任务都变成生成式的,训练一个语言模型(GPT-2),使得既能学习又能生成样本。与LAMOL不同,ACM利用适配器并选择性地共享它们,以进一步支持KT
LFPT5 使用 prompt and T5
一些CV模型提出生成features
Parameter-isolation Based Methods
基于参数隔离的方法将不同的参数分配给不同的任务,以防止后续任务干扰先前学习的参数。该系列在培训和测试中都需要任务id,因此它主要用于TIL和DIL设置。这类方法通常也有容量问题,这使得KT面临挑战(说白了,单纯隔开就是屁都不是,相当于训练多个模型)
task masking 在反向传播的时候冻结一部分参数
Parameter generation 使用一个网络来生成另外一个网络的模型参数
DEMIX 使用一个适应器,在测试中,测试实例的预测由所有预训练适配器的加权和(根据困惑程度)给出。ELLE 每当新任务来临时都会扩展层。它使用大量回放数据,以确保LM能够处理所有以前和当前的任务
C-PT 给每个任务一个prompt
TPEM 每当有一个任务到来就扩展网络
AdapterCL 为每个任务添加一组适配器。它通过困惑进一步推断测试中的任务id
ProgM 为每个新任务扩展网络,并将所有学习到的知识转移到扩展组件
Parameter pool 该方法初始化参数池并进行参数选择。CV中的L2P初始化prompt池,并基于余弦相似度为不同任务选择不同的prompt
ConTinTin 针对不同的任务使用不同的instruction来调节语言模型
ENTAILMENT 输入句子和意图标签词作为指令,并将意图分类转换为二进制分类
Approaches for Knowledge Transfer
KT有向后和向前转移,向后转移的关键是决定可以更新以前任务中的哪些知识,以便改进以前和现在的任务。这与防止CF不同,因为CF的重点是如何有效地减少对先前重要任务参数的更改(解决稳定性-可塑性困境)
向后转移非常困难,因为我们没有以前的任务数据,任何错误的更新都可能导致严重的CF。另一方面,向前转移更容易,因为我们可以简单地固定以前的知识,并利用它来帮助学习新任务
与基于正则化CF的方法不同,正则化在这里解开了任务共享知识和任务特定知识边缘。通常需要重放记忆来学习任务共享知识
IDBR 用额外的任务来encourage语言模型学习general knowledge
ACM 学习每个任务的适配器并训练混合系数以检测新任务可以重用哪个适配器。ACM通过伪重放方法防止CF
胶囊网络:由两个胶囊层组成。第一层存储低级特征图,第二层生成每个胶囊对应于一个类别的分类概率
CapsNet使用动态路由算法,使每个较低级别的封装将其输出发送到一个类似的或“商定的”(通过点积计算)较高级别的封装
CTR 和 B-CL 通过胶囊网络来比较任务相似度
CLASSIC 通过自我注意力从所有先前任务中生成增强视图,并使用对比损失来帮助学习共享知识
MeLL 使用记忆网络作为θ,使用LM作为w。记忆包含所有学习的类原型表示。它的输出与LM的输出连接,并被馈送到融合网络以执行分类。在内部loop中,更新当前任务在内存网络中的类原型。在外loop中,LM被微调
LM学习通用/共享信息(用于KT),而存储器网络学习任务特定信息(用于处理CF)
Meta-MBPA++ 在内部loop中使用额外的网络作为θ从重放存储器中检索样本。LM作为文本编码器用作w,可以很好地概括外部loop中的所有任务
Continual Learning Evaluation
CL评估主要评估
- 所有学习任务的平均表现
- 遗忘率和
- 知识转移的效果
Reference Baselines
Naive continual learning (NCL)
不使用任何机制来阻止遗忘,被视为CL的下界
Train a separate model for each task (ONE)
使用一个独立的模型分别训练不同的任务一次,被视为一个持续学习系统CF和KT的表现
Multi-task learning (MTL)
多任务训练的效果被视为持续学习的上界
Evaluation Metrics
Average Accuracy
每个任务的平均准确率
Average Incremental Accuracy
它只是每个任务(CIL中的一组类)的平均精度的平均值。也可以选择将每个任务的平均精度曲线化为一个图,而不是给出单个数量的平均增量精度
Forgetting Rate
学习一个新任务后,之前任务的表现和训练当前任务之前的差值的比例
Observations and Future Directions
Knowledge transfer is the major issue in TIL and DIL.
当前一些持续学习模型的性能已经接近了多任务训练,这说明CF是可以解决的,但是KT(知识迁移)仍然是一个高度挑战性的难题
KT的难题主要在与,任务之间的相似度没有ground truth,难以衡量
Forgetting prevention is still a major issue in settings other than TIL and DIL.
Cpre and Cpost are still in their infancy.
Online CL of an LM still cannot be achieved.
理性情况下,语言模型应该实时的更新新出现的词,但是现在的工作还不能做到
CL in NLP still has no established benchmark datasets that are used by most systems.
目前没有一个权威的NLP持续学习数据集,这也是我之前跟一聪聊过的一个问题:数据集不够,然后我想我们一起合作来弄一个持续学习的数据集,大一统评估所有NLP的持续学习的任务,看之后缘分和努力了
Conclusion
如果人工智能智能体没有持续学习(CL)能力来学习和积累知识,并利用过去学习的知识来实现更好的未来学习,那么它就不能被认为是真正的智能体。因此,CL对于任何领域都是必要的。本文综述了自然语言处理中CL的最新进展。我们发现,许多NLP问题已被制定为CL任务
已经介绍了基于两个主要目标(CF和KT)的现有CL设置和方法。最后,我们还提出了未来的研究方向。我们希望这项调查将激励CL和NLP社区的研究人员设计更好的算法
Remark
可以看出来,持续学习目前在NLP领域的发展还很少,个人认为这个community目前最需要的还是一个像imageNet,coco等cv那边大而全的数据集,多模态的持续学习就更加是一片蓝海了,希望自己能成为一名优秀的worker or player