0%

Attention is All You Need

Attention is All You Need 是谷歌发表的文章,针对nlp里的机器翻译问题,提出了一种被称为”Transformer”的网络结构,基于注意力机制。文章提出,以往nlp里大量使用RNN结构和encoder-decoder结构,RNN及其衍生网络的缺点就是慢,问题在于前后隐藏状态的依赖性,无法实现并行,而文章提出的”Transformer”完全摒弃了递归结构,依赖注意力机制,挖掘输入和输出之间的关系,这样做最大的好处是能够并行计算了。

Transformer完整实现:https://github.com/yuanxiaosc/Transformer_implementation_and_application

论文精要

自注意力机制机制



$Attention(Q, K, V)=softmax(\dfrac{QK^T}{\sqrt{d_k}})V$

1
2
3
Q: [batch_size, num_heads, Q_sequence_length, Q_depth]
K: [batch_size, num_heads, K_sequence_length, K_depth]
V: [batch_size, num_heads, V_sequence_length, V_depth]

需要满足两点:

  1. Q_depth = K_depth;
  2. K_sequence_length = V_sequence_length

第一点保证可以通过$QK^T$计算当前查询Q对应的K键,第二点保证K和V一一对应(选择一个K那么就能找到k对应的v)。

$MultiHead(Q, K, V)=Concat(head_1,…,head_h)W^o $
$where head_i=Attention(QW^Q_i, KW^K_i, VW^V_i)$

The attention function used by the transformer takes three inputs: Q (query), K (key), V (value). The equation used to calculate the attention weights is:

The dot-product attention is scaled by a factor of square root of the depth. This is done because for large values of depth, the dot product grows large in magnitude pushing the softmax function where it has small gradients resulting in a very hard softmax.

For example, consider that Q and K have a mean of 0 and variance of 1. Their matrix multiplication will have a mean of 0 and variance of dk. Hence, square root of dk is used for scaling (and not any other number) because the matmul of Q and K should have a mean of 0 and variance of 1, so that we get a gentler softmax.

The mask is multiplied with -1e9 (close to negative infinity). This is done because the mask is summed with the scaled matrix multiplication of Q and K and is applied immediately before a softmax. The goal is to zero out these cells, and large negative inputs to softmax are near zero in the output.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
def scaled_dot_product_attention(q, k, v, mask):
"""Calculate the attention weights.
q, k, v must have matching leading dimensions.
k, v must have matching penultimate dimension, i.e.: seq_len_k = seq_len_v.
The mask has different shapes depending on its type(padding or look ahead)
but it must be broadcastable for addition.

Args:
q: query shape == (..., seq_len_q, depth)
k: key shape == (..., seq_len_k, depth)
v: value shape == (..., seq_len_v, depth_v)
mask: Float tensor with shape broadcastable
to (..., seq_len_q, seq_len_k). Defaults to None.

Returns:
output, attention_weights
"""

matmul_qk = tf.matmul(q, k, transpose_b=True) # (..., seq_len_q, seq_len_k)

# scale matmul_qk
dk = tf.cast(tf.shape(k)[-1], tf.float32)
scaled_attention_logits = matmul_qk / tf.math.sqrt(dk)

# add the mask to the scaled tensor.
if mask is not None:
scaled_attention_logits += (mask * -1e9)

# softmax is normalized on the last axis (seq_len_k) so that the scores
# add up to 1.
attention_weights = tf.nn.softmax(scaled_attention_logits, axis=-1) # (..., seq_len_q, seq_len_k)

output = tf.matmul(attention_weights, v) # (..., seq_len_v, depth_v)

return output, attention_weights

As the softmax normalization is done on K, its values decide the amount of importance given to Q.

The output represents the multiplication of the attention weights and the V (value) vector. This ensures that the words we want to focus on are kept as is and the irrelevant words are flushed out.

多头自注意力机制

深入解析 Attention is All You Need 中自注意力机制

标题 说明 时间
The Illustrated Transformer 对论文解析的最好的一篇博文,制作精美,它的中文版本BERT大火却不懂Transformer?读这一篇就够了 20190228
标题 说明 时间
Attention Is All You Need 原始论文 20170612
The Annotated Transformer harvard NLP 解读原文 20180403
Transformer Translation Model TensorFlow 官方模型复现 长期更新
Transformer Translation Model TensorFlow NVIDIA模型复现 长期更新
attention-is-all-you-need-keras Keras 论文复现 201807
Attention Is All You Need code we used to train and evaluate our models is available at https://github.com/tensorflow/tensor2tensor 原始论文模型评估
基于注意力机制,机器之心带你理解与训练神经机器翻译系统 复现论文+ 解析 20180512
大规模集成Transformer模型,阿里达摩院如何打造WMT 2018机器翻译获胜系统 论文实际应用 201806
attention_keras.py 论文注意力机制(部分)复现 20180528
“变形金刚”为何强大:从模型到代码全面解析Google Tensor2Tensor系统 Google Tensor2Tensor系统是一套十分强大的深度学习系统,在多个任务上的表现非常抢眼。尤其在机器翻译问题上,单模型的表现就可以超过之前方法的集成模型。这一套系统的模型结构、训练和优化技巧等,可以被利用到公司的产品线上,直接转化成生产力。本文对Tensor2Tensor系统从模型到代码进行了全面的解析,期望能够给大家提供有用的信息。 20181106
碎碎念:Transformer的细枝末节 20190902
从语言模型到Seq2Seq:Transformer如戏,全靠Mask 张俊林 解读 20190918

序列到序列任务与Transformer模型

序列到序列任务与Encoder-Decoder框架

序列到序列(Sequence-to-Sequence)是自然语言处理中的一个常见任务,主要用来做泛文本生成的任务,像机器翻译、文本摘要、歌词/故事生成、对话机器人等。最具有代表性的一个任务就是机器翻译(Machine Translation),将一种语言的序列映射到另一个语言的序列。例如,在汉-英机器翻译任务中,模型要将一个汉语句子(词序列)转化成一个英语句子(词序列)。

目前Encoder-Decoder框架是解决序列到序列问题的一个主流模型。模型使用Encoder对source sequence进行压缩表示,使用Decoder基于源端的压缩表示生成target sequence。该结构的好处是可以实现两个sequence之间end-to-end方式的建模,模型中所有的参数变量统一到一个目标函数下进行训练,模型表现较好。图1展示了Encoder-Decoder模型的结构,从底向上是一个机器翻译的过程。

Encoder和Decoder可以选用不同结构的Neural Network,比如RNN、CNN。RNN的工作方式是对序列根据时间步,依次进行压缩表示。使用RNN的时候,一般会使用双向的RNN结构。具体方式是使用一个RNN对序列中的元素进行从左往右的压缩表示,另一个RNN对序列进行从右向左的压缩表示。两种表示被联合起来使用,作为最终序列的分布式表示。使用CNN结构的时候,一般使用多层的结构,来实现序列局部表示到全局表示的过程。使用RNN建模句子可以看做是一种时间序列的观点,使用CNN建模句子可以看做一种结构化的观点。使用RNN结构的序列到序列模型主要包括RNNSearch、GNMT等,使用CNN结构的序列到序列模型主要有ConvS2S等。

神经网络模型与语言距离依赖现象

Transformer是一种建模序列的新方法,序列到序列的模型依然是沿用了上述经典的Encoder-Decoder结构,不同的是不再使用RNN或是CNN作为序列建模机制了,而是使用了self-attention机制。这种机制理论上的优势就是更容易捕获“长距离依赖信息(long distance dependency)”。所谓的“长距离依赖信息”可以这么来理解:1)一个词其实是一个可以表达多样性语义信息的符号(歧义问题)。2)一个词的语义确定,要依赖其所在的上下文环境。(根据上下文消岐)3)有的词可能需要一个范围较小的上下文环境就能确定其语义(短距离依赖现象),有的词可能需要一个范围较大的上下文环境才能确定其语义(长距离依赖现象)。

举个例子,看下面两句话:“山上有很多杜鹃,春天到了的时候,会漫山遍野的开放,非常美丽。” “山上有很多杜鹃,春天到了的时候,会漫山遍野的啼鸣,非常婉转。”在这两句话中,“杜鹃”分别指花(azalea)和鸟(cuckoo)。在机器翻译问题中,如果不看距其比较远的距离的词,很难将“杜鹃”这个词翻译正确。该例子是比较明显的一个例子,可以明显的看到词之间的远距离依赖关系。当然,绝大多数的词义在一个较小范围的上下文语义环境中就可以确定,像上述的例子在语言中占的比例会相对较小。我们期望的是模型既能够很好的学习到短距离的依赖知识,也能够学习到长距离依赖的知识。

那么,为什么Transformer中的self-attention理论上能够更好的捕获这种长短距离的依赖知识呢?我们直观的来看一下,基于RNN、CNN、self-attention的三种序列建模方法,任意两个词之间的交互距离上的区别。图2是一个使用双向RNN来对序列进行建模的方法。由于是对序列中的元素按顺序处理的,两个词之间的交互距离可以认为是他们之间的相对距离。W1和Wn之间的交互距离是n-1。带有门控(Gate)机制的RNN模型理论上可以对历史信息进行有选择的存储和遗忘,具有比纯RNN结构更好的表现,但是门控参数量一定的情况下,这种能力是一定的。随着句子的增长,相对距离的增大,存在明显的理论上限。

图3展示了使用多层CNN对序列进行建模的方法。第一层的CNN单元覆盖的语义环境范围较小,第二层覆盖的语义环境范围会变大,依次类推,越深层的CNN单元,覆盖的语义环境会越大。一个词首先会在底层CNN单元上与其近距离的词产生交互,然后在稍高层次的CNN单元上与其更远一些词产生交互。所以,多层的CNN结构体现的是一种从局部到全局的特征抽取过程。词之间的交互距离,与他们的相对距离成正比。距离较远的词只能在较高的CNN节点上相遇,才产生交互。这个过程可能会存在较多的信息丢失。

图4展示的是基于self-attention机制的序列建模方法。注意,为了使图展示的更清晰,少画了一些连接线,图中“sentence”层中的每个词和第一层self-attention layer中的节点都是全连接的关系,第一层self-attention layer和第二层self-attention layer之间的节点也都是全连接的关系。我们可以看到在这种建模方法中,任意两个词之间的交互距离都是1,与词之间的相对距离不存在关系。这种方式下,每个词的语义的确定,都考虑了与整个句子中所有的词的关系。多层的self-attention机制,使得这种全局交互变的更加复杂,能够捕获到更多的信息。

综上,self-attention机制在建模序列问题时,能够捕获长距离依赖知识,具有更好的理论基础。

Attention Is All You Need

Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Lukasz Kaiser, Illia Polosukhin
(Submitted on 12 Jun 2017 (v1), last revised 6 Dec 2017 (this version, v5))

The dominant sequence transduction models are based on complex recurrent or convolutional neural networks in an encoder-decoder configuration. The best performing models also connect the encoder and decoder through an attention mechanism. We propose a new simple network architecture, the Transformer, based solely on attention mechanisms, dispensing with recurrence and convolutions entirely. Experiments on two machine translation tasks show these models to be superior in quality while being more parallelizable and requiring significantly less time to train. Our model achieves 28.4 BLEU on the WMT 2014 English-to-German translation task, improving over the existing best results, including ensembles by over 2 BLEU. On the WMT 2014 English-to-French translation task, our model establishes a new single-model state-of-the-art BLEU score of 41.8 after training for 3.5 days on eight GPUs, a small fraction of the training costs of the best models from the literature. We show that the Transformer generalizes well to other tasks by applying it successfully to English constituency parsing both with large and limited training data.

Comments: 15 pages, 5 figures
Subjects: Computation and Language (cs.CL); Machine Learning (cs.LG)
Cite as: arXiv:1706.03762 [cs.CL]
(or arXiv:1706.03762v5 [cs.CL] for this version)

论文模型图片

论文结果可视化

seq2seq_example


编码器 - 解码器架构 - :编码器将源句子转换为“含义”向量,该向量通过解码器以产生翻译。

NMT-Keras

Attentional recurrent neural network NMT model

Transformer NMT model

本站所有文章和源码均免费开放,如您喜欢,可以请我喝杯咖啡