Attention Is All You Need

NIPS 📆 2017

大多数有竞争力的神经序列转导模型具有编码器-解码器结构。

attention

一个 attention 函数可以描述为将一个查询和一组键值对映射为输出。输出通过每个值的加权和计算得出,其中分配给每个值的权重由查询和对应键的一致性函数计算得出。

Transformer 是一个 sequence-to-sequence 模型,一个序列进来,一个序列出去。

attention 三步走

  • query 和 key 进行相似度计算,得到一个query 和 key 相关性的分数;
  • 将这个分数进行归一化(softmax),得到一个注意力的分布;
  • 使用注意力分布和 value 相乘,得到一个融合注意力的更好的 value 值。

The Transformer - model architecture.

为什么 attention 是有效的

学习远程依赖是许多序列建模任务中的一个关键挑战。

两大优点

  1. 可以捕捉长距离依赖关系,使得其在处理序列数据,特别是自然语言处理时,表现出很好的性能。
  2. 并行计算:与 RNN 和 LSTM 等序列模型不同,自注意力机制在处理序列数据时进行并行计算,这大大提高了计算效率。

那为何加了位置编码就能获取数据间位置的特征呢? 在self-attention的结构中,在对每维数据计算权重时,是采用点积的形式,本质上就是计算向量之间的相关性。 而位置编码将临近的数据加上频率接近的位置编码,就是增加了相邻数据的相关性。

self-attention是BERT的重要思想,其与位置编码结合,解决了文本数据的时序相关性的问题,从而一举结束了依靠RNN、LSTM、GRU等之前一直用来解决时序问题的网络模型。

代码实现

https://tunz.kr/post/4
http://nlp.seas.harvard.edu/2018/04/03/attention.html
http://nlp.seas.harvard.edu/annotated-transformer/

References

[1] Peter Bloema, transformers from scratch
[2] Patrick von Platen, Transformers-based Encoder-Decoder Models
[3] 打工仔, 保姆级分析self Attention为何除根号d,看不懂算我的
[4] 奥辰, Transformer算法完全解读