【论文串讲】从GPT和BERT到XLNet
“ 本文是本专栏即将发表的文本预训练系列里面的一个章节,主要讲了XLNet的思路和具体实现细节,之所以叫XLNet是因为它以Transformer- XL为基础。XLNet是一种广义的自回归预训练模型,它提出了Permuted Language Model的思路,将BERT和GPT的各自优点结合在一起。为了解决实现一个细节上的问题,它还创新地提出了“双流自注意力机制”。那么具体是怎么展开的,就来一起看看吧!。
”
作者:潘小小,字节跳动AI-Lab算法工程师,专注机器翻译,会讲法语,喜欢音乐,写文,记录,无人机航拍(刚入坑)。
本文涉及的论文链接: XLNet: Generalized Autoregressive Pretraining for Language Understanding(https://arxiv.org/abs/1906.08237)
「在开头先列出本文中涉及到的名词缩写:」
「LM」 : Language Model,语言模型
「AR」 : Auto-Regressive,自回归
「AE」 : Auto-Encoding,自编码
「MLM」 : Masked Language Model
「PLM」 : Permuted Language Model
「NLU」 : Natural Language Understanding
「NLG」 : Natural Language Generation
「1. GPT」
「关键词:」 单向信息,NLU的pretrain-finetune差异
优化目标是单向(从左到右或者从右到左)建模序列的联合概率,是传统意义上的语言模型,后预测的词以先预测的词为条件,比较适合文本生成任务,但是缺陷是只使用了单向的语言表征信息,无法获取双向上下文信息表征,而文本理解任务中经常需要用到双向的上下文信息(比如,完形填空),因此,这就带来了pre- train阶段和下游任务的不一致。
「2. BERT」
「关键词:」 双向信息,独立性假设,NLG的pretrain-finetune差异
将一段序列部分“损坏”,优化目标是部分损坏的序列恢复到原始序列的独立概率之积。其优点是获取了双向上下文信息表征,缺点之一是引入了“ 「独立性假设」”,也即每一个被mask的token都是独立被重建的;缺点之二是预训练阶段的[MASK] token在下游任务的finetune中并没有出现过,这也会造成pretrain阶段和下游生成类任务的不一致。
如果当前token被mask,则
否则-
为部分损坏的序列
**3. XLNet (AR + MLM - > PLM) **
GPT和BERT的对比如下图所示
「我们的核心的关注点是: 如何取两者之长,避两者之短」 。首先要提到的就是XLNet这篇工作:XLNet是一种广义的Auto- Regressive模型,它可以看作将序列的联合概率分布按照打乱的顺序重新因式分解,其将LM的 「顺序拆解推广到随机拆解」,token之间的自回归关系不再是基于在 「天然序列」 中的前后顺序,而是基于 「打乱后的序列」 中的前后顺序。
LM顺序拆解(左)和乱序拆解(右)
顺序拆解(左):
乱序拆解(右): ,(
)
正是因为这种“打乱”(permutation)的机制,模型既可以保留AR的优点,规避AE的缺点(独立性假设;引入[MASK]),又可以保留AE的优点: 使得每个位置的token可以获取到双边的信息(因为序列被打乱了)。这样的建模方法,也叫做 「Permuted Language Model」(PLM)。
3.1 通过attention去实现Permutation
在具体的实现上,我们并不需要真正地去打乱序列的顺序,只需记住Transformer框架下的序列中token的位置和它对应的position encoding「唯一绑定」 (请参考 潘小小:【经典精读】Transformer模型深度解读 positional encoding那一节的内容)。所以,只需要设计合适的attention mask就可以实现对因式分解顺序的打乱。
论文里有这么一段,解释了具体是如何去实现"Permutation"的
❝
we 「keep the original sequence order」 , use the 「positional encodings」corresponding to the original sequence, and rely on a 「proper attention mask」 in Transformers to achieve permutation of the factorization order.
❞
举例来详细解释一下,如下的3张图分别对应了不同的permutation,前2张图是同样目标序列输出对应的不同permutation顺序的输入,第3张图(从右向左)和前两张(从左向右)的目标序列不同(注意第3张图的解码实际顺序是it-read-to-like-,不是图中画的从下到上的顺序)。同理我们也可以得出"like-to-read-it-I"->"I-like-to-read-it"等permutation的mask。
作者也提供了一张图来解释这个机制:下图都是同一序列不同因式分解顺序,在解码
时的示意图。
「XLNet的优化目标函数」
sequence 「x」 的长度为
所有permutation的集合是
3.2. Target-aware Representations
「【问题】」 预测乱序中第t个token时,模型并不知道乱序中第t个对应的是原序列中的第几个。
回顾一下XLNet的优化目标函数中的 ,这个部分描述的是在解码permutated sequence中第t个位置的token时的概率
,其中 代表 经过 「按照permutation进行mask」(上一节有讲怎么mask)之后的Transformer输出的hidden representation。
我们注意到 和 的位置(也就是
)没有关系。不管 是1到T中(总长度为T)的哪个, 都完全一样。
「【解决方法】Target-aware Representations」
既然模型不知道将要预测的token在原序列中的位置,那么我可不可以告诉它呢?答案是可以的,这就是Target-aware Representations。具体的做法就是在预测
的时候同时将 作为输入传递给模型。
那么这时候的 就变成了
其中 在 的基础上,加上了关于position
的信息
3.3. 双流自注意力机制(Two-stream Self-attention)
❝
该机制的提出是为了实现上文所述的Target-aware Representations
❞
在考虑到使用上述Target-aware Representations来整个序列的解码过程时,发现了互相矛盾的两点:
预测
时,预测
时, 应该同时使用position 和content
作者的解决思路是提出一种“双流机制”,也就是
Query Representation 只看得到之前的token+position,当前的position,但是看不到当前的token
Content Representation 可以看到之前的token+position,当前的token+position
Query Representations和Content Representations的更新过程如下:
「初始化」
Query Stream初始化为随机初始化:
Content Stream初始化即相应的Word Embedding:
「更新的公式」
如果self-attention有M层,对第m层
在finetune的时候,因为没有了permutation,也就不需要模型去预测
,因此此时只需要使用content stream就可以了。
3.4. 部分打乱
一个长度为
的序列有 中permutation,这会导致训练过程中收敛非常的慢,于是我们采取折中的做法:只对序列的末尾几个token进行打乱,而对前面的部分保留原序列顺序。
往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载机器学习的数学基础专辑获取一折本站知识星球优惠券,复制链接直接打开:https://t.zsxq.com/662nyZF本站qq群1003271085。加入微信群请扫码进群(如果是博士或者准备读博士请说明):
【论文串讲】从GPT和BERT到XLNet相关推荐
- 【视频理解】论文串讲
视频理解论文串讲 2020-视频理解综述-A Comprehensive Study of Deep Video Action Recognition 2014-CVPR-Large-scale Vi ...
- 文章阅读总结:视频理解论文串讲(Li Mu+ Yi zhu)
文章目录 视频理解论文串讲(文章末尾有多数文章的地址) 1. Hand-Craft ===> CNN : DeepVideo 2. Two-Stream 2.1 2014_Two stream ...
- matlab 最小二乘法拟合_计量与论文串讲:最小二乘法
点 为什么要用R 计量经济学作为经济大类下一门非常实用的学科有很强的实践意义.尽管内容庞杂但基本的指导思想却很简单,因此通过一门统计编程语言学习.掌握计量经济学有很大的益处. 目前,市面上已经有多款统 ...
- 100篇论文串讲对话系统前世今生
不可以不可以,都在忙着过年呢,小夕怎么能推这种文章呢╮(╯▽╰)╭ 话说,大年初一你萌怎么能戳进来这种文章!快,赶紧承认你是卖萌屋的真爱粉( ̄∇ ̄)- 小屋今天不卖干货,只送祝福哦-(。・ω・。)ノ♡ ...
- 【论文解读】从BERT和XLNet到MPNet
作者:潘小小,字节跳动AI-Lab算法工程师,专业机器翻译算法,业余法语和音乐. 在这篇文章中,我会介绍一篇最新的预训练语言模型的论文,出自MASS的同一作者.这篇文章的亮点是:将两种经典的预训练语言 ...
- Bert albert xlnet gtp
<GPT,GPT2,Bert,Transformer-XL,XLNet论文阅读速递> Bert缺点 Bert的自编码语言模型也有对应的缺点,就是XLNet在文中指出的,第一个预训练阶段因为 ...
- 词向量, BERT, ALBERT, XLNet全面解析(ALBERT第一作者亲自讲解)
Datawhale Datawhale编辑 现在是国家的非常时期,由于疫情各地陆续延迟复工,以及各大院校延期开学.作为一家 AI 教育领域的创业公司,贪心学院筹划了5期NLP专题直播课程,希望在这个非 ...
- Transformer, BERT, ALBERT, XLNet全面解析(ALBERT第一作者亲自讲解)
现在是国家的非常时期,由于疫情各地陆续延迟复工,以及各大院校延期开学.作为一家AI教育领域的创业公司,我们希望在这个非常时期做点有价值的事情,并携手共渡难关.在疫情期间,我们决定联合国内外顶尖AI专家 ...
- NLP专题直播 | 详谈词向量技术:从Word2Vec, BERT到XLNet
现在是国家的非常时期,由于疫情各地陆续延迟复工,以及各大院校延期开学.作为一家AI教育领域的创业公司,我们希望在这个非常时期做点有价值的事情,并携手共渡难关.在疫情期间,我们决定联合国内外顶尖AI专家 ...
最新文章
- R语言ggplot2可视化:计算dataframe中每个数据列缺失值的个数、使用堆叠的条形图(Stacked Barplot)可视化每个数据列的缺失值的情况(自定义堆叠条形图的形式)
- boost::log::formatting_ostream用法的测试程序
- 用c实现部分java数组功能,很烂,留个参考吧
- WPF自定义控件 —— 装饰器
- LINUX内核之普通自旋锁
- MySQL 高级 —— 深入理解 InnoDB 与 MyISAM
- 【程序猿】2016年自己的十年计划篇
- Spring学习(一)Spring简介、SpringIOC
- jquery常用遍历循环处理
- Java常见排序算法之快速排序详解
- 《Android框架揭秘》读书笔记--在Java中调用C库函数
- linux 爱数备份,爱数安全备份专家
- 如何掌握苹果发布会 PPT 制作要点
- python pdf文件转换word文件
- 打造高效研发团队 (3) —— 绩效考核篇
- 3D游戏角色动画——Elaina(全流程人物建模)
- 科普:什么是权益证明?
- 这键盘得有磨损多厉害?网友:简直就是骨灰级程序员
- 药监局,药品监督管理局
- c++和python哪个好_python和c++哪个好 有什么区别
热门文章
- [android笔记]常用的Uri例子
- 更改IE浏览器默认的源文件编辑器
- 【知识强化】第一章 操作系统概述 1.1 操作系统的基本概念
- 比传统菜单更为方便的系统菜单模式-Spring.Net.Framwork春天快速开发平台-新型菜单...
- Dom4J两种节点添加方法比较
- 自学python接单_Python接私活,兼职也可以月薪过万,会技术就可走遍天下
- 计算机视觉与深度学习 | 复杂环境下的视觉同时定位与地图构建(SLAM)
- 问题 | Spare BA 中的Eigen运行错误
- 多线程编程之二——MFC中的多线程开发
- java io文件操作_java IO 文件操作方法总结