关于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论文解读的更多相关文章

  1. NLP论文解读:无需模板且高效的语言微调模型(上)

    原创作者 | 苏菲 论文题目: Prompt-free and Efficient Language Model Fine-Tuning 论文作者: Rabeeh Karimi Mahabadi 论文 ...

  2. [论文解读] 阿里DIEN整体代码结构

    [论文解读] 阿里DIEN整体代码结构 目录 [论文解读] 阿里DIEN整体代码结构 0x00 摘要 0x01 文件简介 0x02 总体架构 0x03 总体代码 0x04 模型基类 4.1 基本逻辑 ...

  3. 注意力论文解读(1) | Non-local Neural Network | CVPR2018 | 已复现

    文章转自微信公众号:[机器学习炼丹术] 参考目录: 目录 0 概述 1 主要内容 1.1 Non local的优势 1.2 pytorch复现 1.3 代码解读 1.4 论文解读 2 总结 论文名称: ...

  4. 论文解读丨表格识别模型TableMaster

    摘要:在此解决方案中把表格识别分成了四个部分:表格结构序列识别.文字检测.文字识别.单元格和文字框对齐.其中表格结构序列识别用到的模型是基于Master修改的,文字检测模型用到的是PSENet,文字识 ...

  5. 人工智能论文解读精选 | PRGC:一种新的联合关系抽取模型

    NLP论文解读 原创•作者 | 小欣   论文标题:PRGC: Potential Relation and Global Correspondence Based Joint Relational ...

  6. itemKNN发展史----推荐系统的三篇重要的论文解读

    itemKNN发展史----推荐系统的三篇重要的论文解读 本文用到的符号标识 1.Item-based CF 基本过程: 计算相似度矩阵 Cosine相似度 皮尔逊相似系数 参数聚合进行推荐 根据用户 ...

  7. CVPR2019 | Mask Scoring R-CNN 论文解读

    Mask Scoring R-CNN CVPR2019 | Mask Scoring R-CNN 论文解读 作者 | 文永亮 研究方向 | 目标检测.GAN 推荐理由: 本文解读的是一篇发表于CVPR ...

  8. AAAI2019 | 基于区域分解集成的目标检测 论文解读

    Object Detection based on Region Decomposition and Assembly AAAI2019 | 基于区域分解集成的目标检测 论文解读 作者 | 文永亮 学 ...

  9. Gaussian field consensus论文解读及MATLAB实现

    Gaussian field consensus论文解读及MATLAB实现 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 一.Introduction ...

  10. zz扔掉anchor!真正的CenterNet——Objects as Points论文解读

    首发于深度学习那些事 已关注写文章   扔掉anchor!真正的CenterNet——Objects as Points论文解读 OLDPAN 不明觉厉的人工智障程序员 ​关注他 JustDoIT 等 ...

随机推荐

  1. canvas-画圆心的算法

    公式为x=16sin~3t,y=(13cost-5cos2t-2cos3t-cos4t) x+r(16Math.pow(Math.sin(t),3)) y-r(13Math.cos(t)-5Math. ...

  2. UVA750回溯法典例-八皇后

    文章代码选自UVA750-8 Queens Chess Problem的部分代码 vj题目链接:https://vjudge.net/problem/UVA-750 由于UVA中要求按照字典序输出,下 ...

  3. SDN的深入思考(1):SDN的核心本质到底是什么?

    原文链接:https://blog.csdn.net/maijian/article/details/41744535 SDN的概念从提出到现在已经过了4年多了,但是关于SDN最基本的问题,“什么是S ...

  4. Python该怎么入门?Python入门教程(非常详细)

    Python要学多久可以学会,达到精通呢? 任何知识都是基础入门比较快,达到通晓的程序是需求时日的,这是一个逐渐激烈的进程. 通晓任何一门编程语言,都需求通过大量的实践来积累经验,解决遇到的各种疑难问 ...

  5. JavaScript权威指南第6版

    描述网页内容的html,描述网页样式的css,描述网页行为的JavaScript js,适合面向对象和函数式编程风格 es5新特性 第二章 词法结构 1.JavaScript程序是用Unicode字符 ...

  6. Win10安装3 —— U盘启动工具安装

    本文内容皆为作者原创,如需转载,请注明出处:https://www.cnblogs.com/xuexianqi/p/12364593.html 一:准备一个空U盘 U盘容量推荐至少8个G,先提前备份好 ...

  7. sql 注释解释

    1 2 3 4 CREATE TABLE groups(   gid INT PRIMARY KEY AUTO_INCREMENT COMMENT '设置主键自增',   gname VARCHAR( ...

  8. 洛谷P1093 奖学金

    https://www.luogu.org/problem/P1093 #include <bits/stdc++.h> using namespace std; struct Node{ ...

  9. macaron 根目录默认为templates文件夹,所以如果启动目录同目录下有templates目录,要给它指定另一个文件夹

    m *macaron.Macaron //随便指向一个目录,因为web没用到模板,不能使用默认值templates,因为这个目录被其他模板占用了m.Use(macaron.Renderer(macar ...

  10. mysql 中LIKE 与FIND_IN_SET 与关联表left join 速度效率比较

    有一张表Table有IDStr字段,如下只显示二个字段还有很多其他字段 方式一 字段逗号分割,直接用UserIDStr字段,里面存多个ID用逗号分割 UUID UserIDStr 1111 1,2,3 ...