前言

长期做预训练的小伙伴,可以关注一下这个技术点即adapter,最近关于这方面的工作还挺多的,其是这样一个背景:在不遗忘以前学到知识前提下,怎么向大模型中持续性注入知识。

今天就给大家带来两篇最新的相关工作,开拓一下思路~,感兴趣的小伙伴可以去查更多相关的paper。

当然了该想法也不是特别新鲜,之前已经有很多类似的想法工作了,所以大家在看的时候一方面是学习一下其设计的思路,另一方面更重要的是学习其要解决什么问题以及可以思考的大方向,总之不要被目前的adapter研究束缚了,正如笔者在文末也给出了一些讨论,其实本篇一开始题目并不是想写“Adapter-适配预训练持续学习的一种技术”,而是想写模型持续性学习这一大方向,但是这个方向很大,且本篇介绍的paper都是adapter思想(其中一种解决思路吧),所以就往小写了写,后续有时间再专门写一篇“模型持续性学习”,而且笔者认为这才是将来需要研究最本质问题的出发点,甚至目前大火的多模态模型都只是一种尝试,其解决不了本质问题(理由见文末,仅代表个人观点)

准确来说看完本篇后希望您不是学到了个什么具体模型设计,而是收获到:了解了还有这么一个可以研究的方向即预训练模型持续性知识学习。如果您能激发出一个好的idea,那就是本篇文章最大的意义。

问题

在开始之前我们先来理一理这个需求背景下存在的主要问题是什么?之前基本上都是通过多任务学习来达到向模型注入新知识或者说是课程学习(多阶段学习),比如对话模型PLATO-2中就采用了多阶段学习等等,但是这里几个明显缺点如下:

(1)无法持续性注入知识,比如之前我们有一个训练好的模型,那么当来了一个新知识需要注入的话怎么办呢?如果只在该新知识的数据集上面训练,那势必会让模型无限拟合当前数据集,进而导致遗忘掉之前已经学习到的知识,通常为了解决这个问题,我们将之前的数据集和现在的数据集混在一起,重新训练整个模型,这是可以的,例如ERNIE-2就是这样做的,但是缺点也是显而易见的,那就是成本太高,每新来一种知识,都需要带上之前所有的知识重新更新整个模型。

(2)模型表示耦合严重,这里是说多个知识表示耦合在一起难以研究各个知识之间的影响,相信大家也看到了现在的模型大一统趋势,狭义上从单模态模型看大一统:将各种任务集于一身,比如NLP领域将ner、情感分类甚至表格等各类任务的数据集收集起来,训练一个大一统模型;广义上从多模态模型看大一统:将图片、文本甚至语音数据统一收集起来训练一个大一统模型。总之不管三七二十一,就是把能收集到的数据收集起来,训练一个大模型,即靠大数据和大模型堆出来一个通融各种知识的智能模型。扯远了,扯远了,感兴趣的小伙伴,可以看博主之前写过的一篇如下。回到本篇的主题,在这个趋势下,研究各个知识之间的关系也就显得比较重要了,而要研究关系,第一步就是要想办法对各个知识表征进行解耦。


大体上明白了需求后下面我们通过两篇论文看看adapter的解决思路。

如果非要用一句大白话来总结的话,笔者认为是:按住大头,训练小头。

K-adapter


预训练权重文件 预训练权重是什么_预训练权重文件

不遗忘之前的知识却又不想带着之前的数据重新训练,要达到这个效果最容易想到的就是不能改变已经训练的好的权重,不改变权重那知识就还在!!!

基于这一大思路逻辑,我们就可以想到把之前的权重固定住,然后新来的知识只训练自己对应的新增一部分模型权重即可。也就是开始说的“按住大头,训练小头”。

说到这里,有的小伙伴是不是笑了,这不就类似pretrain+fintune吗?是的没错,按住“之前的权重”这个大头不变,只训练你自己的那一部分权重,而这部分权重通常不会太大,论文中将这部分模型就叫做adapter,相当于每个任务都有自己的adapter来适配。

从上图我们也可以看到(a)就代表的是多任务学习,即将所有数据一起学习,(b)就是本文提到的方法,可以看到有 Adapter1,Adapter2多个适配机制。

到这里其实就可以结束了,核心思想我们已经学到了,只不过下面就是讲adapter是怎么设计的,论文给出了一种思路,你可以不用甚至设计自己的一些模型都是可以的。

预训练权重文件 预训练权重是什么_预训练权重文件_02

具体的可以看到就是N 个transformer层,2 个映射层和1 个残差连接组合结构,每个adapter其实是包含了K个这样的组合,这也是论文题目K-adapter的由来。 关于实验和更多细节,大家可以去看原论文。

Adapter-Bot


预训练权重文件 预训练权重是什么_计算机视觉_03

该篇论文是将adapter思想应用到对话模型中。他的背景是这样的:对话数据集有很多种,比如基于知识的对话技巧,基于情感的对话技巧等等,每一种数据就可以理解为一种知识,本文要解决的就是怎么训练一个融合多种知识的对话模型


大的思路还是不变的,按住大头,训练小头。

具体的大头就是一个frozen backbone对话模型;小头就是一组可训练的独立残差residual adapters和一个可训练的对话管理器dialogue manager。

如果类比K-adapter的话,residual adapters就是K-adapter,只不过这里的设计采用的是残差。

这里所谓的对话管理器其实就是一个分类任务,用来分类当前对话属于哪种对话技巧数据集,作用就是监督residual adapters们更好的拟合自己的数据分布。

总结

(1)按住大头不动,只更新小adapter这一思路固然可以解决不遗忘的问题,但是这里也不是100%可以解决,大头之所以能够成为大头的资本就在于其足够权威,或者说在训练第一版大头的时候已经包含了很多知识,假设你的大头一开始就不是很牛的话,现在新来一个知识,这个知识非常大,非常难学,那么其实之前的大头就没有资格当大头了,还是需要重新学的。所以你手上的这个大头是不是足够强就就显得非常重要了。

(2)注意这里探讨的问题和多任务学习(包括多模态学习等等)即有区别又有联系,多任务学习研究者给出的一个理由中通常有一个是:多个任务可以彼此影响即通过别的相关任务影响提高自己的性能,所以要一起学习,互相影响,而我们这里好像是保持了其他任务权重不变。这里其实没什么纠结的,本来就是两个事情,大家可以仔细理一理。

(3)再多谈一点:不知道大家有没有感觉上面提到的adapter其实真不一定是一种最好的方式,就拿我们人类来说,一出生是一张白纸,然后后天一点点来学习积累知识,最后变得愈来愈强。那么我们是不是不应该以一个大模型为基础,在上面小堆叠,而是跳出这个思维,把这个问题再往大看,那就是我们(一开始就很渺小)现在已经有很多各种能力的模型了,那么怎么去将这些模型融合到一起,或者说怎么让系统持续不断的能够学习这些模型,注意这里提到的和上面的adapter想法还是有本质区别的,adapter前提是假设在大的上面推小的知识,而实际上不应该有大小区分,设计的模型应该是具备不断融合大模型知识能力的,所以这块的想象空间非常大,甚至可以借鉴蒸馏思想等等,adapter的概念也绝不是狭义的,知识融合是一个很有价值的课题,现在的多模特本质上也是开局一把梭哈即在一开始就尽可能的准备好各种知识数据,但是笔者认为这样终究是治标不治本的,因为每天都会有源源不断的知识数据出现,在这个信息爆炸的年代,靠提前准备是永远不可能枚举完的,就要要具备不断学习能力,所以研究模型可持续性学习是非常有价值的,也真诚希望将来看到更多该方面的成果。