Transformer 模型


谷歌团队近期提出的用于生成词向量的BERT[3]算法在NLP的11项任务中取得了效果的大幅提升,堪称2018年深度学习领域最振奋人心的消息。而BERT算法的最重要的部分便是本文中提出的Transformer的概念。
正如论文的题目所说的,Transformer中抛弃了传统的CNN和RNN,整个网络结构完全是由Attention机制组成。更准确地讲,Transformer由且仅由self-Attenion和Feed Forward Neural Network组成。一个基于Transformer的可训练的神经网络可以通过堆叠Transformer的形式进行搭建,作者的实验是通过搭建编码器和解码器各6层,总共12层的Encoder-Decoder,并在机器翻译中取得了BLEU值得新高。

这个博客说的很明白,下面是我的简要概括:

Transformer 总体来说就是个词袋模型,本来没有时序信息,不过作者把位置信息也加入了编码这才有了时序信息。
它的大体结构就是一个encoder-decoder网络,大体结构是这样的:
【笔记】Transformer模型(NLP)

请注意这个结构,它的左边有个Nx,这表示有6个block,即x=6.
左边就是编码网络,右边就是解码网络。
在左边的内部有个Multi-Head,这个就是多个Self-attention的组合,例如8个。
注意Transformer的核心就是这个Self-attention模块。它是怎么构成的呢?

先上图:
【笔记】Transformer模型(NLP)

如图所示,

  1. 将单词输入通过一个嵌入映射成一个嵌入向量X;
  2. 根据词向量生成3个向量分别是:Q(query), K(key), V(value).这三个是啥呢?
    这三个向量长度均为64,它们是通过3个不同的权值矩阵由嵌入向量X乘以三个不同的权值矩 阵WQ,WK,WVW^Q, W^K, W^V得到,其中三个矩阵也是相同的,均是512x64.
  3. 为每个向量计算一个score: score=qkscore = q \cdot k;
  4. 为了梯度的稳定,Transformer使用了score归一化,即除以dk\sqrt{d_k};
  5. 对score施以softmax**函数;
  6. softmax点乘Value值υ\upsilon,得到加权的每个输入向量的评分υ\upsilon
  7. 相加之后得到最终的输出结果 Z=ΣυZ = \Sigma \upsilon;

上面的步骤可以描述为:
【笔记】Transformer模型(NLP)

然后整个self-attention可以形象的总结为这样的:
【笔记】Transformer模型(NLP)

这就是公式
Attention(Q,K,V)=softmax(QKTdk)VAttention(Q, K, V) = softmax(\frac{QK^T}{\sqrt{d_k}})V
的计算。

Encoder

得到Z之后,它被送往encoder的下一个模块,也就是Feed Forward Neural Network。这个全连接有两层,第一层的**函数时ReLU,第二层是一个线性**函数,可以表示为:
FFN(Z)=max(0,ZW1+b1)W2+b2FFN(Z) = max(0, ZW_1 + b_1)W_2 + b_2
一个encoder的结构如下:
【笔记】Transformer模型(NLP)

Decoder

Decoder与Ecoder的不同是它多了一个Encoder-Decoder Attention模块,如下图:

【笔记】Transformer模型(NLP)

两个Attention分别用于计算输入和输出的权值:

  1. Self-Attention:当前翻译和已经翻译的前文之间的关系;
  2. Encoder-Decnoder Attention:当前翻译和编码的特征向量之间的关系。

总结

作者采用Attention机制的原因是考虑到RNN(或者LSTM,GRU等)的计算限制为是顺序的,也就是说RNN相关算法只能从左向右依次计算或者从右向左依次计算,这种机制带来了两个问题:

  1. 时间片tt 的计算依赖t1t-1,这样限制了模型的并行能力;
  2. 顺序计算的过程中信息会丢失,尽管LSTM等门机制的结构一定程度上缓解了长期依赖的问题,但是对于特别长期的依赖现象,LSTM依旧无能为力。

优点
(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结构上的固有缺陷。

相关文章: