持续学习概览

发布时间 2023-12-26 20:31:10作者: shiiiilong

持续学习

两个主要问题:

  • 灾难性遗忘
  • 稳定性-可塑性权衡

baseline

Finetune

根据任务顺序依次微调
这个方法是持续学习的下界

Multi-task Learning

多任务学习
这个方法是持续学习的上界

基于Replay(回放)的方法

对之前的关键数据,或模型梯度进行存储或压缩存储。在学习新任务时,为减轻遗忘,可以在训练过程中重放先前任务中存储的样本

sample replay

保存一部分old task的数据,在新任务中每过n step就学一个step
计算成本,存储成本高

梯度情景记忆(Gradient Episodic Memory, GEM)

存储旧任务中具有代表性的一些样本
如果直接把之前的样本混入新任务数据,联合训练,会存在数据量不匹配的问题。
所以,在学习新任务时,约束参数更新的方向与之前所有任务的更新方向(保存的数据上的负梯度)比较相似(这可以通过计算梯度的夹角)
image

这种方法的好处是避免了联合训练带来的数据量不匹配,利用类似于方向正则化的方式进行训练。

LAMOL

如果不想保存旧数据,可以用语言模型来生成回放。可以专门训一个回放模型,或者模型自身就可以用来回放(LAMOL)
image

LAMOL:一边训解决这个task的能力,一边训回放这个task的能力

基于正则化(Regularization)的方法

由于隐私政策等原因,往往无法存储之前的任务信息。在这样的场景下,不保存之前数据,设计巧妙的正则化损失以在学习新数据时限制旧知识的遗忘(譬如限制模型参数的变化范围)

Elastic Weight Consolidation

人脑可以通过减少一些对之前任务重要的突触的可塑性,从而进行突触固化来抵抗遗忘,达到持续学习的目的。EWC方法借鉴人脑的突触固化机制,设计了一种类似的参数固定算法来保留知识。具体做法为:在学习新任务时,在对非常影响之前任务表现的重要的参数上施加损失惩罚,即可达到继续学习的效果。

在训练A任务时,记录更新较大的参数,在训练任务B时,更新这些参数时添加惩罚,使网络保留A任务的记忆。

LwF

Learning without Forgetting

假设给每个任务分配单独的prompt(总之模型参数分为share的和不share的)

不保存旧数据,对新数据在旧任务的prompt上产生一个输出,在训练的时候同时优化旧任务和新任务。(其实相当于不保存数据,每次使用新任务的输入,用旧prompt生成旧任务相关的数据(这样一总结感觉变low了。。。)
image

O-lora

Orthogonal Subspace Learning for Language Model Continual Learning
每来个新任务,分配新lora
在训练的时候,约束新lora与旧lora正交,让新lora在旧lora的正交子空间中更新,训完将lora合并到旧lora
image

基于参数隔离(Parameter isolation-based)的方法

通过对每个任务使用不同的参数,来避免遗忘

image

Progressive Networks

Progressive Neural Networks 2016NIPS
为了防止忘记过去的任务策略,每个任务的网络训练完都被保留了下来,同时固定住参数不再更新,再有新任务的时候,就重新实例化一个新的网络,即增加一个column。同时为了利用以前任务的知识训练新任务,将老任务网络的每一层的输出与当前任务网络每一层输出合并,一起输入下一层。

progressive prompts

PROGRESSIVE PROMPTS: CONTINUAL LEARNING FORLANGUAGE MODELS
一个任务一个prompt,训新prompt的时候,fix之前的prompt,相比Progressive Networks,更省资源

EPI

Rehearsal-free Continual Language Learning via Efficient Parameter Isolation
一个任务一个prefix,统计,保存之前任务对应输入的分布(mean,cov),test的时候根据属于每个分布的概率去挑用哪个prefix来推理