预训练模型中的可插拔式知识融入-利用Adapter结构

这些天冲浪 🏄 了一下 Arxiv,粗翻了一下二月之后 public 的 NLP 文章(有很大一部分是准备投 ICML 的)。
也拜读了 张驰原 dalao 的新作《Exploring the Memorization-Generalization Continuum in Deep Learning》. (实验真的做的很漂亮,但感觉有点 data-special 不知道能不能推广到 NLP)

今天来讨论一下段楠老师和周明老师的这篇《K-Adapter: Infusing Knowledge into Pre-Trained Models with Adapters》

Adapter

为了讲清楚这篇文章,我们先来看下什么是 Adapter

Parameter-Efficient Transfer Learning for NLP. ICML 2019.

Motivation

在这个 large pre-trained 模型盛行的时代,Fine-tune 可谓是再正常不过的操作。
但实际上 Fine-tune 是一个代价很大的操作,虽然它一般能带来很好的效果。
试想一下,虽然我们用了 Adam 来随机采样一些 train data 来估计全局的梯度,用了很小的 lr.
但实际上在每一个 batch 中,对于庞大的预训练模型的每一个参数我们都需要更新.
每一个 epoch, 还得存储所有被更新的参数, 完全没有复用性, 这是很低效的。
对于低资源的移动端或者高用户特异性的服务提供商 Pass, 这个问题尤为突出。

除了这一点之外:

  1. Cloud Service (Pass)
  2. 使用 Multi-task 来 fine-tune 时, 如果增加新的任务,则需要重新训练过所有之前的子任务(需要相应的数据).
  3. 而使用 连续学习则会在 re-training 的时候遗忘之前学到的知识.
  4. 希望能在尽可能减少参数的情况下, 提高性能,接近 Multi-task 的结果.

Detail

image

于是一个很直观的想法, 能不能把最后的 task-special layer 放到模型中间,然后冻住预训练模型参数.

  1. 每一个 Transformer 结构都有两个 Adapter 模块, 嵌在 LN 之前. 12 × 2
  2. 预训练的 Bert 参数固定(Attention, FFN, 除了 Layer Normalization 参数不固定)
  3. 每个 Adapter 由两个 FFN, 一个非线性函数组成, 和一个残差连接组成.
  4. 残差连接用于保证参数随机初始化时,模型输出与预训练模型输出一致.
  5. 这样一个 Adapter 模型需要 (dm+m) + (dm+d)参数
  6. 而因为 LN 输入发生了较大的变化,在这里对 LN 的参数也进行 fine-tune, 实际上这部分参数量很小(y=\frac{x - \mathrm{E}[x]}{ \sqrt{\mathrm{Var}[x] + \epsilon}} * \gamma + \beta)
  7. 故总共一层 Transformer 需要增加(2dm+3d+m), 这部分与 m 有关, 但总的参数量大概是预训练模型总参数量的 3%左右。

Experiments

在模型的最后一层接一个线性层, 在分类任务 GLUE 和一些额外的分类任务上测试,基本上结果很接近 Fine-tune 的结果.

image

当然只在比较简单的 Classify Task 上测试, 说服力没有那么强。

Parameters

既然两者结果很接近 是不是 Fine-tune 实际上并不需要更新那么多参数也能有那么好的结果呢?

这部分对比两个 baseline:

  1. 只 Fine-tune Top N 层 Transformer 的参数.
  2. 只更新 LN 的参数(Ablation)
image
  1. 当我们减少 Fine-tune 层数的时候, 模型的准确率急剧下降;
  2. 而 Adapter 则具有很好的鲁棒性.
  3. Fine-tune LN 参数基本没用

Does every Adapter layers are significant?

实际上,我们一口气给 24(BERT large)个 Transformer Layer 都加上了 Adapter, 那是不是每一个 Adapter 都很重要?

image

上述 Ablation 实验结果,我们可以发现:

  1. 去除单层 Adapter 基本上对结果没有影响;
  2. 低层,尤其是 0-4 层对结果影响不大;
  3. 低层蕴含的信息更多是任务通用的,而高层更多是任务特殊的知识;
  4. 初始化参数的方差不能过大.

除此之外,还测试了

  1. 增加 BN/LN
  2. 增加每个 Adapter 的层数
  3. 更改不同的激活函数

等等修改,但是发现结果基本没有影响

PALs

BERT and PALs: Projected Attention Layers for Efficient Adaptation in Multi-Task Learning. ICML 2019.

同期还有一篇工作也是想尽可能减少 Fine-tune 时参数的更新量, 其将 Task-special Layer 移至 Transformer 两个 LN 之间。

image

通过先投影到到一个小维度,再连接 Attention 或者其他结构来完成 Fine-tune 的任务.

CS224n 2019 Final Project 中有两位同学对上述两种方法在 SQuAD 2.0 上做了相应的测试, 结果显示 PALs 结果掉的有点多, 而 Adapter-BERT 结果很接近 Fine-tune 结果.

image

K-Adapter

而这篇文章更侧重于改进预训练过程中 Multi-task 这个过程

image

Motivations

  1. 预训练模型中嵌入知识信息是很有必要的.
    1. 基于无监督学习的大规模预训练模型更倾向于学习共现信息,而忽略了低频但重要的知识信息。
    2. 在推理任务上效果较差, (Not, reasoning task)
  2. Multi-task 会造成知识遗忘, 而且参数计算代价是巨大的
    1. 先前的 KB-based 的 pre-trained LM 大多是基于 multi-task 的
    2. 当融合多种知识的时候 multi-task 代价大,也容易遗忘之前学习过的任务

Details

所以针对上述问题,本文提出了一个 Adapter-based 的模型来解决上述问题.
通过并行的 Adapter 层来获得不同类型的知识信息,最后通过 concatenate 来输出,互不影响.

image
  1. 相对于前面的 Adapter 结构, K-Adapter 将 Transformer 结构直接嵌入到 Adapter Layer 中。
  2. 位置结构发生了变化, Adapter-BERT 是直接改造 Transformer 结构,每个 Transformer Layer 都有两个 Adapter Layer; 而 K-Adapter 则将 Adapter 独立出来与 Pre-trained model 平行操作,通过 Concatenate 传递信息, 也不是每层都配有 Adapter Layer, 本文中是在 RoBERTa Large 的第 0, 11, 23 层之后增加有 Adapter 层。
  3. 需要的参数量 3(FFN + Transformer) = 3(2dm + d +m) + (3m^2 + m^2 + 8m^2 + 2m)) = 47M 远小于 RoBERTa Large 模型中 16355M 的参数量.
  4. 相同的 skip-connect 为了初始化时的一致性(Concatenate 传递了 Transformer 的输出)
  5. Concatenate 前一 Adapter 的输出和当前层 Transformer 的输出作为当前 Adapter 的输入. (Concatenate 在这里会造成维度不一致,既然之后都是线性层,用加也是等效的,还能降低参数量)
  6. 单个 knowledge task 的输出是最后一个 Adapter 的输出和最后一个 Transformer 输出 Concatenate 在一起, 记为 O_k.
  7. 当有多个 Knowledge 一起融入时, Concatenate 每个 Knowledge 输出的结果 Concate(O_1, O_2, ...).
  8. 这篇文章使用了两种 Adapter: 事实 Adapter, 语言 Adapter
  9. 事实 Adapter 训练一个关系分类任务。通过判断三元组中 entity 是否存在相应关系来学习关系的知识。数据集是过滤 entity 出现小于 50 次的 T-RE-rc. 因为 Entity 长度不一,利用 Pooling 来对齐. 该任务训练 5epochs, Batch size 为 128.
  10. 语言 Adapter 则是完成预测依存关系中父节点 index 这个任务。数据集是利用 Stanford Parser 标注的 Book Corpus。因为是 token-level 的任务,最后过一个线性层输出到相应的分类。该任务训练 10epochs, Batch size 为 256

Baselines

实验对比了最近提出的一些列将知识融入预训练模型的方法.

image
  1. ERNIE: 对齐 WikiData 中的三元组到 Wikipedia 的句子中, 将用 TransE 预训练的 entity 信息加入到对应的 token 中.
  2. LIBERT: 增加 Lexical Relation Classification(LRC)任务,判断上下谓词.
  3. SenseBERT: Mask token 使其预测相应的词及其对应的 supersense(类似一个 POS 再加上细粒度的 entity)
  4. KnowBERT: 交替训练 BERT 和 Entity Link 任务(freeze)
  5. WKLM: 将实体替换为 WikiData 中相同类型的其他实体.
  6. BERT-MK: 结构与 ERNIE 相同, 将 TransE 替换为 GATs.

Experiment

相对于之前那篇 Adapter-BERT, 这篇的实验设计更能说明学习到知识的能力,实验结果也好于之前的工作(原先只是想接近 Fine-tune, 现在是超越)

  1. 细粒度实体类型预测

细粒度对于学习到词的表征要求提高了不少,需要模型能分辨出上下文结构对词义造成的差异.

image
  1. 常识 QA 和开放域 QA

印象里,RoREATa 在常识问答中比 BERT Large 能高 10 多个点,对比 Multi-task 的结果虽然提升不是很大,但还是有明显的提升.

image
  1. 关系分类
image
  1. 刺探实验: LAMA(常识性填空问答)
image

虽然比 RoBERTa 提升明显,但结果低于 BERT Large.
文中解释到, 主要是因为 RoBERTa 使用 byte-level 的 BPE, 而 BERT 使用 char-level 的 BPE.(但为什么之前都都好,就只有这个任务上会)

References

  1. K-Adapter: Infusing Knowledge into Pre-Trained Models with Adapters.
  2. Parameter-Efficient Transfer Learning for NLP. ICML 2019.
  3. BERT and PALs: Projected Attention Layers for Efficient Adaptation in Multi-Task Learning. ICML 2019.
  4. BERT-A: Fine-tuning BERT with Adapters and Data Augmentation. CS224n 2019 FP.
  5. ERNIE: Enhanced Language Representation with Informative Entities. ACL 2019.
  6. Informing Unsupervised Pretraining with External Linguistic Knowledge.
  7. Sensebert: Driving some sense into bert.
  8. Knowledge Enhanced Contextual Word Representations. EMNLP 2019.
  9. Pretrained Encyclopedia: Weakly Supervised Knowledge-Pretrained Language Model. ICLR 2020.
  10. Integrating Graph Contextualized Knowledge into Pre-trained Language Models.
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容

  • 这里可以参考CSDN上的文章-BERT原理和实践:https://blog.csdn.net/jiaowoshou...
    HsuanvaneCHINA阅读 1,470评论 0 3
  • 本文上两篇系列 NLP的巨人肩膀(上) NLP的巨人肩膀(中) 4.6 Bidirectional Encoder...
    weizier阅读 6,333评论 1 22
  • 本文另两篇系列 NLP的巨人肩膀(上) NLP的巨人肩膀(下) 3. 梯子的一级半 除了在word级别的embed...
    weizier阅读 6,526评论 0 18
  • 社会好像和自己想象的不太一样,说话随意,大大咧咧,喜欢玩篮球,喜欢跑步,喜欢一个人想干啥干啥,不喜欢熟人太多热闹的...
  • 生活中有很多事情,发生的时候,会因为当时环境的窘迫而不知所措。一旦此事过后留下的无非就是遗憾,再讲给他人听,...
    君子的流年故事阅读 177评论 0 1