What's the Transformer

简单讲一下Transformer的原理

Overview

Transformer 由且仅由自注意力(Self-Attenion) 和前馈神经网络(Feed Forward Neural Network)组成。Transformer 的本质上是一个 Encoder-Decoder 的结构,

image-20210522002930282.png

Transformer 的提出解决了上面两个问题,首先它使用了 Attention 机制,将序列中的任意两个位置之间的距离是缩小为一个常量;其次它不是类似 RNN 的顺序结构,因此具有更好的并行性,符合现有的 GPU 框架。

作者的实验是通过搭建编码器和解码器各 6 层,总共 12 层的 Encoder-Decoder,并在机器翻译中取得了 BLEU 值得新高。

Self-Attention

输入 \(X\)

权重矩阵 \(W^Q\)\(W^K\)\(W^V\)

\(q = X \times W^Q\)

\(k = X \times W^K\)

\(v = X \times W^V\)

preview

  1. 为每个向量计算一个 score: \(score=q * k\)
  2. 为了梯度的稳定,Transformer 使用了 score 归一化,即除以 $ (d_k)$;
  3. 对 score 施以 softmax 激活函数;
  4. softmax 点乘 Value 值 \(v\) ,得到加权的每个输入向量的评分 \(v\)
  5. 相加之后得到最终的输出结果 \(z=\sum v\)

preview

以上过程为向量形式运算,实际以矩阵形式运算。

preview

以上全过程为 \[ Attention(Q, K, V) = softmax(\frac{QK^T}{\sqrt(d_k)})V \]

在 self-attention 需要强调的最后一点是其采用了残差网络 [5] 中的 short-cut 结构,目的当然是解决深度学习中的退化问题,得到的最终结果如图。注意下面两图中的残差连接。

preview

Snipaste_2021-05-22_00-35-46.png

Query,Key,Value 的概念取自于信息检索系统,举个简单的搜索的例子来说。当你在某电商平台搜索某件商品(年轻女士冬季穿的红色薄款羽绒服)时,你在搜索引擎上输入的内容便是 Query,然后搜索引擎根据 Query 为你匹配 Key(例如商品的种类,颜色,描述等),然后根据 Query 和 Key 的相似度得到匹配的内容(Value)。

self-attention 中的 Q,K,V 也是起着类似的作用,在矩阵计算中,点积是计算两个矩阵相似度的方法之一,因此使用了 \(QK^T\) 进行相似度的计算。接着便是根据相似度进行输出的匹配,这里使用了加权匹配的方式,而权值就是 query 与 key 的相似度。

Multi-Head Attention

Multi-Head Attention 相当于 \(h\) 个不同的 self-attention 的集成(ensemble),在这里我们以 \(h=8\) ! 举例说明。Multi-Head Attention 的输出分成 3 步:

  1. 将数据 \(X\) 分别输入到图 13 所示的 8 个 self-attention 中,得到 8 个加权后的特征矩阵 \(Z_i, i\in\{1,2, ...., 8\}\)
  2. 将 8 个 \(Z_i\) 按列拼成一个大的特征矩阵;
  3. 特征矩阵经过一层全连接后得到输出 \(Z\)

整个过程如下图所示:

v2-c2a91ac08b34e73c7f4b415ce823840e_r.jpg

同 self-attention 一样,multi-head attention 也加入了 short-cut 机制(见第一幅图)。

Encoder-Dcecoder attention

在解码器中,Transformer block 比编码器中多了个 encoder-cecoder attention。在 encoder-decoder attention 中, \(Q\) 来自于解码器的上一个输出, \(K\)\(V\)则来自于与编码器的输出。其计算方式完全和图 10 的过程相同。

由于在机器翻译中,解码过程是一个顺序操作的过程,也就是当解码第 \(k\)个特征向量时,我们只能看到第 \(k-1\)及其之前的解码结果,论文中把这种情况下的 multi-head attention 叫做 masked multi-head attention。

Loss Layer

解码器解码之后,解码的特征向量经过一层激活函数为 softmax 的全连接层之后得到反映每个单词概率的输出向量。此时我们便可以通过 CTC 等损失函数训练模型了。

而一个完整可训练的网络结构便是 encoder 和 decoder 的堆叠(各 \(N\) 个, \(N=6\)) ),我们可以得到首图的完整的 Transformer 的结构(即论文中的图 1)。

Position Embedding

截止目前为止,我们介绍的 Transformer 模型并没有捕捉顺序序列的能力,也就是说无论句子的结构怎么打乱,Transformer 都会得到类似的结果。换句话说,Transformer 只是一个功能更强大的词袋模型而已。

为了解决这个问题,论文中在编码词向量时引入了位置编码(Position Embedding)的特征。具体地说,位置编码会在词向量中加入了单词的位置信息,这样 Transformer 就能区分不同位置的单词了。

Deep Thinking

优点:(1)虽然 Transformer 最终也没有逃脱传统学习的套路,Transformer 也只是一个全连接(或者是一维卷积)加 Attention 的结合体。但是其设计已经足够有创新,因为其抛弃了在 NLP 中最根本的 RNN 或者 CNN 并且取得了非常不错的效果,算法的设计非常精彩,值得每个深度学习的相关人员仔细研究和品位。(2)Transformer 的设计最大的带来性能提升的关键是将任意两个单词的距离是 1,这对解决 NLP 中棘手的长期依赖问题是非常有效的。(3)Transformer 不仅仅可以应用在 NLP 的机器翻译领域,甚至可以不局限于 NLP 领域,是非常有科研潜力的一个方向。(4)算法的并行性非常好,符合目前的硬件(主要指 GPU)环境。

缺点:(1)粗暴的抛弃 RNN 和 CNN 虽然非常炫技,但是它也使模型丧失了捕捉局部特征的能力,RNN + CNN + Transformer 的结合可能会带来更好的效果。(2)Transformer 失去的位置信息其实在 NLP 中非常重要,而论文中在特征向量中加入 Position Embedding 也只是一个权宜之计,并没有改变 Transformer 结构上的固有缺陷。

Reference

[1] Vaswani A , Shazeer N , Parmar N , et al. Attention Is All You Need[J]. arXiv, 2017.

[2] 大师兄. 详解 Transformer (Attention Is All You Need)[EB/OL]. 2021. https://zhuanlan.zhihu.com/p/48508221


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!