背景

在seq2seq中,一般是有一个encoder 一个decoder ,一般是rnn/cnn 但是rnn 计算缓慢,所以提出了纯用注意力机制来实现编码解码。

 

模型结构

<<attention is all you need>>速读笔记

当生成下一个时,消耗先前生成的符号作为附加输入。

 Encoder and Decoder Stack

 Encoder

    6个完全相同的层组成,每层包含2个sub层,分别是multi-head self-attention mechanism 、position wise fully connected feed-forward network. 

用residual connection 连接2个sub层,再加入normalization.所以最后每层的输出是是由子层本身实现的函数。 

= 512。

decoder

   除了每个编码器层中的两个子层之外,解码器还插入第三个子层,该层对编码器堆栈的输出执行multi-head attention。 

我们还修改解码器堆栈中的self-attention子层,以防止位置关注到后面的位置。

i 的已知输出。

  

Attention

输出为value的加权和,其中分配给每个value的权重通过query与相应key的兼容函数来计算。

query 与key 的match 度得到权重,权重加在val 上 ,val加权和是输出。

<<attention is all you need>>速读笔记

Scaled Dot-Product Attention

相除,然后应用一个softmax函数以获得值的权重。

我们计算输出矩阵为:

(1)

 

虽然两者在理论上的复杂性相似,但在实践中点积attention的速度更快、更节省空间,因为它可以使用高度优化的矩阵乘法代码来实现。

倍。

 

Multi-Head Attention

 

如果只有一个attention head,它的平均值会削弱这个信息。

 <<attention is all you need>>速读笔记

 



dmodel

 

3.2.3 Applications of Attention in our Model

 

Transformer使用以3种方式使用multi-head attention:

  • 9]。
  • 编码器中的每个位置都可以关注编码器上一层的所有位置。
  • .

 

它由两个线性变换组成,之间有一个ReLU激活。

(2)

 

= 2048。

 

3.4 Embeddings and Softmax

 

3.5 Positional Encoding

9]。

在这项工作中,我们使用不同频率的正弦和余弦函数:

 

)    
)    

pos的线性函数。

我们选择了正弦曲线,因为它可以允许模型推断比训练期间遇到的更长的序列。

每个位置对应一个向量,不可训练的。

对于每个句子,位置向量是相同的。

参考:

https://www.yiyibooks.cn/yiyibooks/Attention_Is_All_You_Need/index.html

https://www.jianshu.com/p/3f2d4bc126e6

相关文章: