Transformer, Transformer-XL, XLNet: 追溯XLNet的前世今生

前言

正当 GPT-2 还拿着 15 亿参数的模型吊着人们的胃口时,XLNet 带着开源的代码和 20 项 SOTA 的成绩悄悄发布了。从 BERT 到 XLNet,大一统预训练模型的成功,无疑昭示着行业的快速进步。现在是最好的时机。回到正题,本文虽篇幅较长,但能提供不一样的视角,帮你迅速理清模型的细节。废话不多说,笔者这就将带你快速品读,XLNet 诞生之路上最重要的三篇论文:

  • Attention Is All You Need (12 Jun. 2017)
  • Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context (9 Jan. 2019)
  • XLNet: Generalized Autoregressive Pretraining for Language Understanding (19 Jun. 2019)

注:本文为笔者个人原创,转载请注明出处。

一、Attention Is All You Need

论文链接:https://arxiv.org/abs/1706.03762
代码链接:https://github.com/tensorflow/tensor2tensor

这篇论文诞生于 2017 年 6 月,彼时 RNN、LSTM、GRU 早已名扬天下,发迹于 2015 年的 Attention 机制也在经历各种变形的考验,两者相互合作,占据了 NLP 的半边天。循环神经网络最大的缺陷,在于其序列依赖性,上一时刻输出的隐藏状态(以及 LSTM 的记忆细胞)和本时刻的输入共同作为新一轮的单元细胞处理材料,如此往复。出于自回归的特性,单单凭借一到两个矩阵完整而不偏颇地记录过去几十个甚至上百个时间步长的序列信息,显然不太可能,其权重在训练过程中反复调整,未必能刚好应用到测试集的需求上。更不用提训练时梯度消失导致的难以优化的问题。这些缺陷从 LSTM 的单元公式便足以看出。后续新模型的开创者们始终没有推出一个可以完美解决以上问题,同时保证特征抽取能力的方案,直到 Transformer 出现。(下图为应用于文本摘要任务的模型结构示例,结构为双向 LSTM 搭配 Attention 机制)
描述
在各种情景下历经切除试验而始终保持稳健性的 Attention 机制不能抛弃,于是 Transformer 的发明者选择将其保留,而彻底摒弃循环神经网络的设计架构。取而代之的,是回炉再造后焕然新生的 Attention 机制,叫做 Self-Attention,意为 “Attention on oneself”。

Attention机制

在介绍 Self-Attention 前,我们首先回顾一下 Attention 机制的原理,委屈一下对 Attention 机制熟悉的读者。Attention 机制的目的是作为 Encoder 的附加层,提取更为丰富的特征信息。其核心在于三个要素:Query, Key 和 Value,公式如下,
A t t e n t i o n ( Q , K , V ) = S i m i l a r i t y ( Q , K ) V Attention(Q,K,V)=Similarity(Q,K) V Attention(Q,K,V)=Similarity(Q,K)V

计算 Query 和 Key 的相似度,将相似度结果附加在 Value 上,也就成为 Attention 机制的输出特征。我们以 LSTM 搭配 Attention 机制的端对端文档问答系统为例。在原始数据集中,我们的答案所在的文本和问题分别由 M M M N N N 个单词组成,通过将其词向量分别放入两个不同的循环神经网络,我们抽取 M M M N N N 个相关的隐藏状态 h i ∈ R h ( i = 1 , . . . , M ) h_i\in\mathbb{R}^h(i=1,...,M) hiRh(i=1,...,M) h j ∈ R h ( j = 1 , . . . , N ) h_j\in\mathbb{R}^h(j=1,...,N) hjRh(j=1,...,N),进入 Attention 机制。这时,Query 就是我们的 h i h_i hi,而 Key 和 Value 就是我们和问题相关的 h j h_j hj。针对每一个文本相关的 h i h_i hi,我们都将其和每一个问题相关的 h j h_j hj 求一次点积,
α i j = h i T h j ∈ R \alpha_{ij}=h_i^Th_j\in\mathbb{R} αij=hiThjR

那么每一个单词对应的 h i h_i hi 都获得了一个由点积组成的向量 α i = ( α i 1 , . . . , α i N ) ∈ R N \alpha_i=(\alpha_{i1},...,\alpha_{iN})\in\mathbb{R}^N αi=(αi1,...,αiN)RN,里面承载了该单词与所有问题相关单词的相似关系。对该向量进行 Softmax 归一化,得出我们上文所说的相似度:
s i m i l a r i t y ( h i , h j ) = h i T h j ∑ k = 1 N h i T h k ∈ [ 0 , 1 ] similarity(h_i,h_j)=\frac{h_i^Th_j}{\sum_{k=1}^Nh_i^Th_k}\in[0,1] similarity(hi,hj)=k=1NhiThkhiThj[0,1]

相似度也即权重,问题相关的所有隐藏状态经由该权重加权平均,得出的向量便是 Attention 机制下的特征输出,
a i = A t t e n t i o n ( h i , h j , h j ) = ∑ j s i m i l a r i t y ( h i , h j ) h j a_i=Attention(h_i,h_j,h_j)=\sum_jsimilarity(h_i,h_j) h_j ai=Attention(hi,hj,hj)=jsimilarity(hi,hj)hj

将隐藏状态与该输出进行纵向合并,输出的组合向量 c i c_i ci 进入 Decoder 输出层导出最终的模型预测结果:
c i = [ h i ; a i ] ∈ R 2 h c_i=[h_i;a_i]\in\mathbb{R}^{2h} ci=[hi;ai]R2h

如果是双向循环神经网络的设计,这里的 h i h_i hi 也就是 [ h i → ; h i ← ] [\overrightarrow{h_i};\overleftarrow{h_i}] [hi ;hi ],同理 h j = [ h j → ; h j ← ] h_j=[\overrightarrow{h_j};\overleftarrow{h_j}] hj=[hj ;hj ],当然这不是本文的讨论重点。以上仅仅只是 Attention 机制针对该问答任务的设计。泛化来讲,点积求出来以后进行一定程度的缩放,以保证低相似度组合的权重不至于过低 (过低会影响训练时从输出层激活函数传来的梯度更新),这样的 Attention 机制称为 Scaled Dot-Product Attention

在这里插入图片描述 A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) V Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}}) V Attention(Q,K,V)=softmax(dk QKT)V

其中分母的 d k d_k dk 一般为词向量的维度。在此基础上进一步变形,将 Query, Key, Value 经过多组线性变换后分别放入 Scaled Dot-Product Attention,对得出的结果进行合并并进行二次线性变换,这样的 Attention 机制称为 Multi-Head Attention

在这里插入图片描述 M u l t i H e a d ( Q , K , V ) = C o n c a t ( h e a d 1 , . . . , h e a d h ) W O MultiHead(Q,K,V)=Concat(head_1,...,head_h) W^O MultiHead(Q,K,V)=Concat(head1,...,headh)WO

h e a d i = A t t e n t i o n ( Q W i Q , K W i K , V W i V ) head_i=Attention(QW_i^Q,KW_i^K,VW_i^V) headi=Attention(QWiQ,KWiK,VWiV)

在另一方面,以上问答系统案例中的 Query 和 Key 分别来自与文本和问题有关的隐藏状态,而当 Query 和 Key 来自同一组对象时,即计算相似度时我们将词向量与文本本身的其他词向量组合求相似度,不引用任何其他信息,这样的 Attention 机制称为 Self-Attention。自注意力输出的特征直接替换原隐藏状态,不再与其合并。以上四者的结合便是 Attention 机制在 Transformer 中的应用,更多细节我们将在下文中介绍。除以上几者之外,Attention 还有诸多不同的变形方式,包括拼接后导入感知机代替点积进行相似度计算,以及以加权平均的方式代替 Attention 输出特征与 Query 的纵向合并,感兴趣的读者可自行了解。

Transformer

使用循环神经网络搭配 Attention 机制进行各种变形形成 Encoder,再接一个作为输出层的 Decoder 形成 Encoder-Decoder 架构,是 Transformer 诞生前夕各类主流 NLP 神经网络的设计思路。例如动态协同注意网络 (Dynamic Coattention Network, DCN) 使用作为 Encoder 的单向 LSTM + 协同注意力编码器对来自文本和问题的隐藏状态进行多次线性/非线性变换、合并、相乘后得出联合矩阵,再投入由单向 LSTM、双向 LSTM 和 Highway Maxout Networks (HMN) 组成的动态指示解码器 (Dynamic Pointing Decoder) 导出预测结果;双向注意流网络 (Bi-Directional Attention Flow, BiDAF) 除特殊的由循环神经网络构成的结构外,同时使用问题到文本和文本到问题的注意力矩阵提取特征。在问答领域还包括 DrQA、AoA、r-Net 种种变形后表现有所提升的模型,其他领域则更多。但无论如何,始终摆脱不掉 RNN 或 CNN 的影子。

Transformer 超脱于其中,是第一个使用自注意力机制,彻底摆脱循环或卷积神经网络依赖的模型。模型结构如下:

在这里插入图片描述
左侧和右侧分别是基础的 Encoder 单元和 Decoder 单元,两者搭配在一起组成一个 Transformer 层 (Transformer-layer)。为行文清晰,我们将模型细节由浅入深,整理为以下要点:

  • Inputs:模型的训练基于单向 many-to-many,不要求 Inputs 和 Outputs 的长度相等,两者不等长时将空缺部分填充为 0 向量。

  • Outputs (shifted right):在一般任务下,模型训练的目的为预测 next token probability,从而保持 Inputs 和 Outputs 等长,Outputs 取自于文本中相对于 Inputs 右移一个位置,即 shifted right;在进行翻译任务的训练时,则输入一个不等长的句子对。

  • Nx:论文中的 Transformer 深度为六层。在每一层的结尾,Encoder 输送隐藏状态给下一层 Encoder,Decoder 同理。

  • 三个箭头:通向每个注意力层的三个并列的箭头从左到右分别为 Value、Key 和 Query。Encoder 在每一层将隐藏状态通过线性变换分化出 Key 和 Value 输送给 Decoder 的第二个注意力层。

  • Input Embedding:使用预训练词向量表示文本内容,维度为 d m o d e l d_{model} dmodel,论文中 d m o d e l = 512 d_{model}=512 dmodel=512

  • Positional Embedding:依据单词在文本中的相对位置生成正弦曲线,以记录序列长度信息,针对 p o s pos pos 位置上的奇数维和偶数维, P E ( p

  • 13
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值