前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >预训练模型中的可插拔式知识融入——利用Adapter结构

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

作者头像
NewBeeNLP
发布于 2020-08-26 08:43:43
发布于 2020-08-26 08:43:43
2.6K0
举报
文章被收录于专栏:NewBeeNLPNewBeeNLP

作者 | 灰墙 编辑 | NewBeeNLP

写在前面

这些天冲浪?了一下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》[1]

Adapter

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

来自论文:Parameter-Efficient Transfer Learning for NLP. ICML 2019.[2]

Motivation

在这个large pre-trained模型盛行的时代,Fine-tune可谓是再正常不过的操作。但实际上 Fine-tune 是一个代价很大的操作,虽然它一般能带来很好的效果。

试想一下,虽然我们用了 Adam 来随机采样一些 train data 来估计全局的梯度,用了很小的 lr.但实际上在每一个 batch 中,对于庞大的预训练模型的每一个参数我们都需要更新。每一个 epoch, 还得存储所有被更新的参数, 完全没有复用性, 这是很低效的。对于低资源的移动端或者高用户特异性的服务提供商 Pass, 这个问题尤为突出。

除了这一点之外:

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

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

  • 每一个 Transformer 结构都有两个 Adapter 模块, 嵌在 LN 之前. 12 × 2
  • 预训练的 Bert 参数固定(Attention, FFN, 除了 Layer Normalization 参数不固定)
  • 每个 Adapter 由两个 FFN, 一个非线性函数组成, 和一个残差连接组成.
  • 残差连接用于保证参数随机初始化时,模型输出与预训练模型输出一致.
  • 这样一个 Adapter 模型需要 (dm+m) + (dm+d)参数
  • 而因为 LN 输入发生了较大的变化,在这里对 LN 的参数也进行 fine-tune, 实际上这部分参数量很小(
y=xE[x]Var[x]+ϵγ+β

)

  • 故总共一层 Transformer 需要增加(2dm+3d+m), 这部分与 m 有关, 但总的参数量大概是预训练模型总参数量的 3%左右。
Experiments

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

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

Parameters

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

这部分对比两个 baseline:

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

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

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

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

除此之外,还测试了

  • 增加 BN/LN
  • 增加每个 Adapter 的层数
  • 更改不同的激活函数

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

PALs

来自论文:BERT and PALs: Projected Attention Layers for Efficient Adaptation in Multi-Task Learning.ICML 2019.[3]

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

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

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

K-Adapter

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

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

所以针对上述问题,本文提出了一个 Adapter-based 的模型来解决上述问题.

通过并行的 Adapter 层来获得不同类型的知识信息,最后通过 concatenate 来输出,互不影响.

  • 相对于前面的 Adapter 结构, K-Adapter 将 Transformer 结构直接嵌入到 Adapter Layer 中。
  • 位置结构发生了变化, Adapter-BERT 是直接改造 Transformer 结构,每个 Transformer Layer 都有两个 Adapter Layer; 而 K-Adapter 则将 Adapter 独立出来与 Pre-trained model 平行操作,通过 Concatenate 传递信息, 也不是每层都配有 Adapter Layer, 本文中是在 RoBERTa Large 的第 0, 11, 23 层之后增加有 Adapter 层。
  • 需要的参数量 远小于 RoBERTa Large 模型中 16355M 的参数量.
  • 相同的 skip-connect 为了初始化时的一致性(Concatenate 传递了 Transformer 的输出)
  • Concatenate 前一 Adapter 的输出和当前层 Transformer 的输出作为当前 Adapter 的输入. (Concatenate 在这里会造成维度不一致,既然之后都是线性层,用加也是等效的,还能降低参数量)
  • 单个 knowledge task 的输出是最后一个 Adapter 的输出和最后一个 Transformer 输出 Concatenate 在一起, 记为 .
  • 当有多个 Knowledge 一起融入时, Concatenate 每个 Knowledge 输出的结果 Concate(, , ...).
  • 这篇文章使用了两种 Adapter: 事实 Adapter, 语言 Adapter
  • 事实 Adapter 训练一个关系分类任务。通过判断三元组中 entity 是否存在相应关系来学习关系的知识。数据集是过滤 entity 出现小于 50 次的 T-RE-rc. 因为 Entity 长度不一,利用 Pooling 来对齐. 该任务训练 5epochs, Batch size 为 128.
  • 语言 Adapter 则是完成预测依存关系中父节点 index 这个任务。数据集是利用 Stanford Parser 标注的 Book Corpus。因为是 token-level 的任务,最后过一个线性层输出到相应的分类。该任务训练 10epochs, Batch size 为 256
  • 需要注意的是 Freeze Pre-trained models 参数只在 pre-trained 知识的过程中,当做下游任务的时候还是和以前一样 fine-tune (Adapter 比不过 Fine-tune 石锤呀, 但挪到 Pre-trained 效果还是挺明显的)
  • 与之前的 Adapter-BERT 相比, K-Adapter 相对于卖知识包, 而 Adapter-BERT 则是卖整套服务.
Baselines

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

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

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

「1、细粒度实体类型预测」

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

在Entity周围加上@来表示边界。

「2、常识 QA 和开放域 QA」

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

「3、关系分类」

问答中在head entity周围加上@来表示边界,tail entity周围加上#

「4、刺探实验: LAMA(常识性填空问答)」

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

本文参考资料

[1]

K-Adapter: Infusing Knowledge into Pre-Trained Models with Adapters: http://xxx.itp.ac.cn/abs/2002.01808

[2]

Parameter-Efficient Transfer Learning for NLP. ICML 2019.: https://arxiv.org/abs/1902.00751

[3]

BERT and PALs: Projected Attention Layers for Efficient Adaptation in Multi-Task Learning.ICML 2019.: https://arxiv.org/abs/1902.02671

[4]

CS224n 2019 Final Project: http://web.stanford.edu/class/cs224n/reports/default/15848417.pdf

[5]

ERNIE: https://arxiv.org/abs/1905.07129

[6]

LIBERT: https://arxiv.org/abs/1909.02339

[7]

SenseBERT: https://arxiv.org/abs/1908.05646

[8]

KnowBERT: https://arxiv.org/abs/1909.04164

[9]

WKLM: https://arxiv.org/abs/1912.09637

[10]

BERT-MK: https://arxiv.org/abs/1912.00147

- END -

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 NewBeeNLP 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【论文笔记】NLP 预训练模型综述
Pre-trained Models for Natural Language Processing: A Survey 花了一上午看完的综述,强烈推荐每个 NLPer 都读一读,很长一段时间内都能当做工具书来用(下一个 break-through 来临前)。
zenRRan
2020/05/18
8730
【论文笔记】NLP 预训练模型综述
预训练模型超全知识点梳理与面试必备高频FAQ
预训练模型(Pre-trained Models,PTMs)的出现将NLP带入了一个全新时代。2020年3月18日,邱锡鹏老师发表了关于NLP预训练模型的综述《Pre-trained Models for Natural Language Processing: A Survey》,这是一篇全面的综述,系统地对PTMs进行了归纳分类。
zenRRan
2020/10/26
2.3K0
预训练模型超全知识点梳理与面试必备高频FAQ
如何提升BERT在下游任务中的性能
随着Transformer 在NLP中的表现,Bert已经成为主流模型,然而大家在下游任务中使用时,是不是也会发现模型的性能时好时坏,甚至相同参数切换一下随机种子结果都不一样,又或者自己不管如何调,模型总达不到想象中的那么好,那如何才能让Bert在下游任务中表现更好更稳呢?本文以文本分类为例,介绍几种能帮你提高下游任务性能的方法。
NewBeeNLP
2021/03/19
1.7K0
如何提升BERT在下游任务中的性能
由浅入深详解NLP中的Adapter技术
每天给你送来NLP技术干货! ---- ©作者 | 吴迪 单位 | UCLA 研究方向 | NLP 排版 | PaperWeekly 前言 在现代自然语言处理(NLP)的应用中,使用预训练的表征进行迁移学习是很重要的一个方法。在深度学习开始被应用之后,迁移学习最早出现在使用预训练的特征向量,以及对预训练语言模型(pre-trained language model,PLM)进行微调(fine-tuning)[1]。基于预训练模型,adapter 给出了一个新的思路,即能否在模型中插入一些少量的参数,在下
zenRRan
2022/07/27
2.3K0
由浅入深详解NLP中的Adapter技术
【综述专栏】超详细的NLP预训练语言模型总结清单!
在科学研究中,从方法论上来讲,都应“先见森林,再见树木”。当前,人工智能学术研究方兴未艾,技术迅猛发展,可谓万木争荣,日新月异。对于AI从业者来说,在广袤的知识森林中,系统梳理脉络,才能更好地把握趋势。为此,我们精选国内外优秀的综述文章,开辟“综述专栏”,敬请关注。
马上科普尚尚
2021/03/17
1.4K0
【综述专栏】超详细的NLP预训练语言模型总结清单!
Google的预训练模型又霸榜了,这次叫做T5(附榜单)
T5 serves primarily as code for reproducing the experiments in Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer. The bulk of the code in this repository is used for loading, preprocessing, mixing, and evaluating datasets. It also provides a way to fine-tune the pre-trained models released alongside the publication.
数据派THU
2019/11/01
1.1K0
一文讲透预训练模型的改进训练算法 ,轻松达到State of the Art
在NLP的预训练语言模型时代,针对已有的两种主流算法NFT-TM和FT-NTM,本文提出了一种新算法FT-TM。它首先在BERT的基础上建立一个上层神经网络(LSTM或者CNN等等),然后在适当的策略下对两者进行同时训练。该算法融合了NFT-TM和FT-NTM两种算法的优势,通过一系列NLP任务的实验结果表明,新算法FT-TM能取得更好的效果,而且在公开的Quora和SLNI两个问题语义等价数据集上,新算法FT-TM的效果都达到了目前的State of the Art。
数据猿
2020/04/07
4550
NLP的12种后BERT预训练方法
论文:A Robustly Optimized BERT Pretraining Approach.
zenRRan
2020/02/24
1.3K0
知识蒸馏相关技术【模型蒸馏、数据蒸馏】以ERNIE-Tiny为例
基于ERNIE预训练模型效果上达到业界领先,但是由于模型比较大,预测性能可能无法满足上线需求。
汀丶人工智能
2022/11/14
1.5K0
【综述专栏】一文回顾Transformer 和 预训练模型
在科学研究中,从方法论上来讲,都应“先见森林,再见树木”。当前,人工智能学术研究方兴未艾,技术迅猛发展,可谓万木争荣,日新月异。对于AI从业者来说,在广袤的知识森林中,系统梳理脉络,才能更好地把握趋势。为此,我们精选国内外优秀的综述文章,开辟“综述专栏”,敬请关注。
马上科普尚尚
2021/05/20
1.7K0
谷歌发表的史上最强NLP模型BERT的官方代码和预训练模型可以下载了
TensorFlow code and pre-trained models for BERT https://arxiv.org/abs/1810.04805
AINLP
2019/10/10
3.3K0
绝对干货!NLP预训练模型:从transformer到albert
语言模型是机器理解人类语言的途径,17年的transformer是语言模型摆脱rnn,lstm建模的一次尝试,后续的bert则是大力出奇迹的代表,用更大的模型和更多的数据将nlp任务的benchmark提高了一大截。gpt在auto-regressive的路上一路走到黑,而xlnet将gpt和bert的优点结合在了一起,然后用更更大的数据吊打了bert。没过多久,bert的增强版roberta用更更更大的数据打败了xlnet。然而当bert的模型达到一定程度后,受到了硬件资源的限制,于是谷歌通过矩阵分解和参数共享压缩了bert的模型大小,因此当albert使用了和bert同样的参数量的时候,推理能力又上了一个台阶。正好最近这几个月也在研究语言模型,就把我对transformer等几个具有代表性的nlp模型的理解记录一下。
新智元
2019/11/11
1.4K0
绝对干货!NLP预训练模型:从transformer到albert
pytorch-pretrained-BERT:BERT PyTorch实现,可加载Google BERT预训练模型
Github上刚刚开源了一个Google BERT的PyTorch实现版本,同时包含可加载Google BERT预训练模型的脚本,感兴趣的同学可以关注:
AINLP
2019/10/10
5.1K0
2021年如何科学的“微调”预训练模型?
笔者刚刚入门NLP的时候,其实还和朋友们调侃过“attention is all you need"这么绝对的标题也敢发出来?当然似乎后来还有一个paper是“cnn is all you need”?但2021年,我再看深度学习领域,无论是自然语言处理、音频信号处理、图像处理、推荐系统,似乎都看到attention混得风生水起,只不过更多时候看到的是它的另一个代号:Transformer。
AI部落联盟
2021/04/23
1.9K0
2021年如何科学的“微调”预训练模型?
ACL 2021中的25个Transformers模型
读者朋友们,多多笔记更新啦。最近事情比较杂乱(花式懒),所以停更了一段时间,不过也重构和基本完成了之前构思的Transformer教程,目前也正在内测,期待更好的她。
AI部落联盟
2021/08/12
1.3K0
ACL 2021中的25个Transformers模型
自然语言处理学术速递[9.8]
【1】 FH-SWF SG at GermEval 2021: Using Transformer-Based Language Models to Identify Toxic, Engaging, & Fact-Claiming Comments 标题:GermEval 2021年的FH-SWF SG:使用基于Transformer的语言模型来识别有毒的、吸引人的和具有事实说服力的评论 链接:https://arxiv.org/abs/2109.02966
公众号-arXiv每日学术速递
2021/09/16
9960
Pytorch版本的BERT
BERT地址:https://github.com/google-research/bert
玖柒的小窝
2021/10/22
1.6K0
自然语言处理学术速递[9.10]
Update!H5支持摘要折叠,体验更佳!点击阅读原文访问arxivdaily.com,涵盖CS|物理|数学|经济|统计|金融|生物|电气领域,更有搜索、收藏等功能! cs.CL 方向,今日共计58篇
公众号-arXiv每日学术速递
2021/09/16
1.5K0
文本分类上分微调技巧实战
Truncation methods 截断法 文章的关键信息位于开头和结尾。 我们可以使用三种不同的截断文本方法来执行 BERT 微调。
致Great
2021/07/29
1.7K0
文本分类上分微调技巧实战
预训练语言模型(PLM)必读论文清单(附论文PDF、源码和模型链接)
[ 导读 ]近两年来,ELMO、BERT等预训练语言模型(PLM)在多项任务中刷新了榜单,引起了学术界和工业界的大量关注。
数据派THU
2019/10/10
1.7K0
预训练语言模型(PLM)必读论文清单(附论文PDF、源码和模型链接)
推荐阅读
相关推荐
【论文笔记】NLP 预训练模型综述
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档