RNN应用中存在的问题是,每一个RNN Cell的state都取决于前一个RNN Cell的state,因此RNN很难采用并行计算,计算的速度往往较慢。但是RNN的优势是,能够依据attention利用输入句子的全部信息。所以就有人提出,如果只用attention,不用RNN是否可行,这就是2017年的一篇论文提出的解决方案(原文)。
Transformer:NLP中RNN的替代方案
该神经网络的优势是,采用了非Recurrent的Encoder-decoder结构,这样就可以在GPU中充分利用并行计算的优势提高运算速度。

  1. 首先的input向量和其对应的output向量都要经过Positional Encoding,Positional Encoding相当于给每个向量附加上了位置信息,即
    PE(pos,i)={sin(pos/10000i/dmodel)i为偶数cos(pos/10000(i1)/dmodel)i为奇数 PE(pos, i)=\begin{cases} sin(pos/10000^{i/d_{model}}) & \text{i为偶数} \\ cos(pos/10000^{(i-1)/d_{model}}) & \text{i为奇数} \end{cases}
    其中pos为向量在句子中的第几个位置,dmodeld_{model}为词向量的维度,ii为对应的在词向量的第几个位置。
  2. Multihead attension是整个模块的关键。该模块会将输入的分量中内部多个不同的词之间进行相关性的计算。这个和RNN里的attention机制是类似的。首先看attention。
    Transformer:NLP中RNN的替代方案
    其中,attention会将输入的三个分量Q,K,V\mathbf{Q, K, V}进行运算,得到
    A(Q,K,V)=softmax(QKTdk)V A(\mathbf{Q, K, V})=softmax(\frac{\mathbf{QK}^T}{\sqrt{d_k}})\mathbf V
    这里Q\mathbf Q可以看成query,K,V\mathbf{K,V}看成一个(key,value)的pair。对于Q\mathbf Q的每一行的分量q\mathbf q,实际上计算的是
    A(q,K,V)=ieqkiTjeqkiTvi A(\mathbf{q, K, V})=\sum_i \frac{e^{\mathbf{qk_i^T}}}{\sum_j e^{\mathbf{qk_i^T}}}\mathbf v_i
    即对V\mathbf V的每一行求了一个加权平均,而加权平均的权重取决于query和key的相关度。同时为了避免q\mathbf q的长度dkd_k过长,导致和qviT\mathbf {qv_i^T}的某些值太大,因此取了一个normalization。而"Multihead"的attention,则是为Q,K,V\mathbf{Q, K, V}提供了多种“体位”下的attention,即
    Transformer:NLP中RNN的替代方案
    即对Q,K,V\mathbf{Q, K, V}进行了多种方式的线性变换,得到Qi,Ki,Vi\mathbf{Q_i, K_i, V_i}。再对每一组ii,进行attention,得到输出结果,再Concat起来。
  3. Add的操作和ResNet类似,将输出和模块的输入进行相加,解决深层网络的梯度消失的问题。LayerNorm则是对输出的每一个句子的每一个词的向量进行了标准化。
  4. FeedForward是一个简单的fully connected network。
  5. 对于每一个Encoder,multihead attention+Add&Norm+Feed Forward+Add&Norm共同构成了一个Encoder的子层,然后再构建NN个这样这样的子层。在论文里,N=6N=6。将最高的子层的输出作为Decoder的一个输入。
  6. Decoder端和Encoder相似,有两个模块是专门处理Output的,而中间的模块则是“合并”Encoder的输出和Output的,这三个模块共同组成了一个子层。在论文里,同样Decoder也有N=6N=6个这样的子层。

这里Decoder的训练和测试输入是不相同的。训练时,Decoder的输入是Input的batch对应的output的batch。而测试时,Decoder先输入一个句子的开始标志,算出句子的一个单词是哪一个。然后再将开始标志和输出的单词共同再组成Decoder的输入,依次类推,直到达到最大的句子长度或输出结束标志为止。这种做法是的RNN是很接近的。

除了上述之外,论文也做了其它的优化,这里就不再详述了。

相关文章:

  • 2021-09-29
  • 2021-09-23
  • 2021-11-12
  • 2022-12-23
  • 2021-12-21
  • 2021-08-31
  • 2022-01-21
猜你喜欢
  • 2021-08-14
  • 2021-06-01
  • 2021-08-17
  • 2022-12-23
  • 2021-07-02
  • 2021-08-18
  • 2022-12-23
相关资源
相似解决方案