持续学习
两个主要问题:
- 灾难性遗忘
- 稳定性-可塑性权衡
baseline
Finetune
根据任务顺序依次微调
这个方法是持续学习的下界
Multi-task Learning
多任务学习
这个方法是持续学习的上界
基于Replay(回放)的方法
对之前的关键数据,或模型梯度进行存储或压缩存储。在学习新任务时,为减轻遗忘,可以在训练过程中重放先前任务中存储的样本
sample replay
保存一部分old task的数据,在新任务中每过n step就学一个step
计算成本,存储成本高
梯度情景记忆(Gradient Episodic Memory, GEM)
存储旧任务中具有代表性的一些样本
如果直接把之前的样本混入新任务数据,联合训练,会存在数据量不匹配的问题。
所以,在学习新任务时,约束参数更新的方向与之前所有任务的更新方向(保存的数据上的负梯度)比较相似(这可以通过计算梯度的夹角)
这种方法的好处是避免了联合训练带来的数据量不匹配,利用类似于方向正则化的方式进行训练。
LAMOL
如果不想保存旧数据,可以用语言模型来生成回放。可以专门训一个回放模型,或者模型自身就可以用来回放(LAMOL)
LAMOL:一边训解决这个task的能力,一边训回放这个task的能力
基于正则化(Regularization)的方法
由于隐私政策等原因,往往无法存储之前的任务信息。在这样的场景下,不保存之前数据,设计巧妙的正则化损失以在学习新数据时限制旧知识的遗忘(譬如限制模型参数的变化范围)
Elastic Weight Consolidation
人脑可以通过减少一些对之前任务重要的突触的可塑性,从而进行突触固化来抵抗遗忘,达到持续学习的目的。EWC方法借鉴人脑的突触固化机制,设计了一种类似的参数固定算法来保留知识。具体做法为:在学习新任务时,在对非常影响之前任务表现的重要的参数上施加损失惩罚,即可达到继续学习的效果。
在训练A任务时,记录更新较大的参数,在训练任务B时,更新这些参数时添加惩罚,使网络保留A任务的记忆。
LwF
Learning without Forgetting
假设给每个任务分配单独的prompt(总之模型参数分为share的和不share的)
不保存旧数据,对新数据在旧任务的prompt上产生一个输出,在训练的时候同时优化旧任务和新任务。(其实相当于不保存数据,每次使用新任务的输入,用旧prompt生成旧任务相关的数据(这样一总结感觉变low了。。。))
O-lora
Orthogonal Subspace Learning for Language Model Continual Learning
每来个新任务,分配新lora
在训练的时候,约束新lora与旧lora正交,让新lora在旧lora的正交子空间中更新,训完将lora合并到旧lora
基于参数隔离(Parameter isolation-based)的方法
通过对每个任务使用不同的参数,来避免遗忘
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来推理