背景
在seq2seq中,一般是有一个encoder 一个decoder ,一般是rnn/cnn 但是rnn 计算缓慢,所以提出了纯用注意力机制来实现编码解码。
模型结构
,
当生成下一个时,消耗先前生成的符号作为附加输入。
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加权和是输出。
Scaled Dot-Product Attention
相除,然后应用一个softmax函数以获得值的权重。
我们计算输出矩阵为:
| (1) |
虽然两者在理论上的复杂性相似,但在实践中点积attention的速度更快、更节省空间,因为它可以使用高度优化的矩阵乘法代码来实现。
倍。
Multi-Head Attention
。
如果只有一个attention head,它的平均值会削弱这个信息。
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