[NLP]Transformer-XL论文解读
关于Transformer的具体内容,可以访问:https://www.cnblogs.com/mj-selina/p/12369797.html
简介
Transformer是Google Brain2017年提出的一种模型,它的编码能力超越了RNN,但是对于长距离依赖的建模能力依然不足。为解决长距离依赖问题,Google Brain提出了Transformer-XL模型(XL是extra long的意思),不仅能够获取长距离依赖,而且解决了文本碎片化的问题。Transformer-XL是基于vanilla Transformer进行创新的,它不仅能比vanilla Transformer处理4.5倍长的长距离依赖关系,而且在评估期间要比vanilla Transformers快1800倍。
注1:文本碎片化是vanilla Transformer中会遇到的问题,因为vanilla Transformer只能处理固定长度的序列,如果序列过长,会将其切割成两个或者多个序列,如果序列之间存在语义关系,而vanilla Transformer在编码的时候会丢失这种语义关系(在编码时,序列与序列之间不产生信息交换),产生文本碎片化问题。
Vanilla Transformer
VanillaTransformer输入固定长度的序列,如果输入序列比规定的长度长,则会将输入序列不考虑语义的切割成多个segment,如下图(a)所示。这种不考虑语义的切割方法,会导致文本碎片化问题,每个segment只能获取到自己的语义信息,而丢失之前segment的语义信息。
而在评估时,vanilla模型只会考虑同样长度的segment,一般它会取最后一个位置的隐向量作为输出。如下图(b)所示,在预测输出时,模型每次会向右移动一步,并根据新的segment片段预测此刻的单词。这种使用当前序列重新预测的方法,会导致计算量大增,预测速度较慢,且不能利用更早的信息。

Transformer-XL
1、片段级递归机制(segment-level recurrence mechanism):在Transformer中引入了循环机制,在训练当前segment的时候,会保存并使用上一个segment每一层的输出向量。这样就可以利用之前segment的信息,提高Transformer长期依赖的能力,在训练时前一个segment的输出只参与前向计算,而不参与反向传播。

如上图所示,可以看出,在训练当前segment时,Transformer-XL会利用前一个segment的信息(图中绿色线段)。如果GPU内存允许,可以使用前多个segment的信息。
循环机制的另一个优点是测试速度快,它每次可以前进一个segment的距离,而不是像vanilla一样,一次只能前进一个表征。
2、相对位置编码(Relative Positional Encodings):Transformer中使用一个序列的绝对位置计算positional encoding,再与单词的encoding相加即可。但是Transformer-XL中,将序列分成多个segment,每个segment都会存在相同位置的Embedding,positional encoding的位置信息就失去了意义。因此Transformer-XL提出了相对位置编码,在计算当前位置隐向量的时候,考虑其互相依赖的token的位置关系。具体做法是,在计算attention score的时候,只考虑query向量与key向量的相对位置关系,并将这种相对位置关系加入到每一层Transformer的attention的计算中,具体的计算法师如下:
(1)内容权重:没有添加原始位置编码的原始分数
(2)相对于当前内容的位置偏差:指从前一个seglment的第一个位置(假设index为0)到当前segment的当前word的位置(假设index为k),则位置偏差为k-t,并对位置偏差使用正弦函数进行位置向量计算
(3)可学习的全局内容偏差:该模型添加了一个可学习的向量,用于调整其他表征内容(Kj)的重要性
(4)可学习的全局偏差:另一个可学习向量,仅根据表征之间的距离调整重要性(例如,最后一个词可能比前一个segment中的词更重要)
关于相对位置的具体计算方法,可以看[4]
参考资料:
[1] https://zhuanlan.zhihu.com/p/70745925
[2] https://www.infoq.cn/article/wt-KaTfcsAv9E7exzIkF
[3] https://zhuanlan.zhihu.com/p/84159401
[4] http://www.linzehui.me/2019/05/07/%E4%BB%A3%E7%A0%81%E7%9B%B8%E5%85%B3/%E5%85%B3%E4%BA%8Etransformer-xl%E4%B8%ADrel-shift%E5%AE%9E%E7%8E%B0%E7%9A%84%E8%A7%A3%E8%AF%BB/
[NLP]Transformer-XL论文解读的更多相关文章
- NLP论文解读:无需模板且高效的语言微调模型(上)
原创作者 | 苏菲 论文题目: Prompt-free and Efficient Language Model Fine-Tuning 论文作者: Rabeeh Karimi Mahabadi 论文 ...
- [论文解读] 阿里DIEN整体代码结构
[论文解读] 阿里DIEN整体代码结构 目录 [论文解读] 阿里DIEN整体代码结构 0x00 摘要 0x01 文件简介 0x02 总体架构 0x03 总体代码 0x04 模型基类 4.1 基本逻辑 ...
- 注意力论文解读(1) | Non-local Neural Network | CVPR2018 | 已复现
文章转自微信公众号:[机器学习炼丹术] 参考目录: 目录 0 概述 1 主要内容 1.1 Non local的优势 1.2 pytorch复现 1.3 代码解读 1.4 论文解读 2 总结 论文名称: ...
- 论文解读丨表格识别模型TableMaster
摘要:在此解决方案中把表格识别分成了四个部分:表格结构序列识别.文字检测.文字识别.单元格和文字框对齐.其中表格结构序列识别用到的模型是基于Master修改的,文字检测模型用到的是PSENet,文字识 ...
- 人工智能论文解读精选 | PRGC:一种新的联合关系抽取模型
NLP论文解读 原创•作者 | 小欣 论文标题:PRGC: Potential Relation and Global Correspondence Based Joint Relational ...
- itemKNN发展史----推荐系统的三篇重要的论文解读
itemKNN发展史----推荐系统的三篇重要的论文解读 本文用到的符号标识 1.Item-based CF 基本过程: 计算相似度矩阵 Cosine相似度 皮尔逊相似系数 参数聚合进行推荐 根据用户 ...
- CVPR2019 | Mask Scoring R-CNN 论文解读
Mask Scoring R-CNN CVPR2019 | Mask Scoring R-CNN 论文解读 作者 | 文永亮 研究方向 | 目标检测.GAN 推荐理由: 本文解读的是一篇发表于CVPR ...
- AAAI2019 | 基于区域分解集成的目标检测 论文解读
Object Detection based on Region Decomposition and Assembly AAAI2019 | 基于区域分解集成的目标检测 论文解读 作者 | 文永亮 学 ...
- Gaussian field consensus论文解读及MATLAB实现
Gaussian field consensus论文解读及MATLAB实现 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 一.Introduction ...
- zz扔掉anchor!真正的CenterNet——Objects as Points论文解读
首发于深度学习那些事 已关注写文章 扔掉anchor!真正的CenterNet——Objects as Points论文解读 OLDPAN 不明觉厉的人工智障程序员 关注他 JustDoIT 等 ...
随机推荐
- 剑指offer-面试题31-栈的压入弹出序列-栈
#include<iostream> #include<string.h> #include<algorithm> #include<cmath> #i ...
- py二级习题(猜猜我心中的数字)
import random number = random.randint(1,100) while True: inputnumber = int(input("请输入你心中的数字:&qu ...
- AMCL论文及源码解析--参数(持续更新中)
整理内容来自:http://wiki.ros.org/amcl 1.AMCL订阅的节点: scan (sensor_msgs/LaserScan):激光数据 tf (tf/tfMessage):各种转 ...
- 关于JavaScript的原型继承与原型链
在讨论原型继承之前,先回顾一下关于创建自定义类型的方式,这里推荐将构造函数和原型模式组合使用,通过构造函数来定义实例自己的属性,再通过原型来定义公共的方法和属性. 这样一来,每个实例都有自己的实例属性 ...
- Turtle模块基本方法和使用(画布)
方法 简写 描述 例子 移动和绘制 forward() fd() 前进 turtle.forward(10):前进10个单位 backward() bk().back() 后退 turtle.ba ...
- jQuery---清空节点和删除节点
清空节点和删除节点 //可以清空一个元素的内容 //清理门户 $("div").empty(); //完全移除元素 $("div").remove(); $(f ...
- contos7 用户管理相关操作命令
# 查看用户列表 cut -d : -f 1 /etc/passwd # 查看可以登录系统的用户 cat /etc/passwd | grep -v /sbin/nologin | cut -d : ...
- eclipse配置tomcat,并部署一个Java web项目到tomcat上
引用链接:https://blog.csdn.net/cincoutcin/article/details/79408484 eclipse配置tomcat 1.windows——preference ...
- Verilog-异步FIFO
参考博文:https://blog.csdn.net/alangaixiaoxiao/article/details/81432144 1.概述 异步FIFO设计的关键是产生“写满”和“读空”信号,这 ...
- SQL语句中count(1)count(*)count(字段)用法的区别(转)
SQL语句中count(1)count(*)count(字段)用法的区别 在SQL语句中count函数是最常用的函数之一,count函数是用来统计表中记录数的一个函数, 一. count(1)和cou ...