论文:https://arxiv.org/abs/1706.03762
架构
编码器(左边)和解码器(右边)
![](https://i-blog.csdnimg.cn/blog_migrate/b57acbbcf00f14d90b33493680e91b38.png)
子编码器
左边的编码器一共有N = 6个子编码器,图中仅显示一个。
每一个子编码器都有两层,一层是Multi-Head Attention (多头自注意机制),另一层是 Feed Forward(全连接的前馈网络)。这两层都使用一个恒等映射(残差结构),然后进行层归一化。每一层的输出表示为 LayerNorm ( x + Sublayer ( x ) ) \text{LayerNorm}(x + \text{Sublayer}(x)) LayerNorm(x+Sublayer(x))其中 Sublayer ( x ) \text{Sublayer}(x) Sublayer(x)为Multi-Head Attention 或者 Feed Forward。
为了方便这些残差连接,模型中的所有的层以及嵌入层产生维度为 d m o d e l = 512 d_{model}= 512 dmodel=512 的输出。
子解码器
右边的解码器一共有N = 6个子解码器,图中仅显示一个。
每一个子解码器都有三层,子解码器的上两层和子编码器差不多,将编码器的输出一分为二作为子解码器中间层的输入。
子解码器第一层。因为预测是一个前向过程,所以为了防止该位置对后续位置的注意(确保了位置i的预测只能依赖于小于i位置的已知输出),需要对输出进行掩盖。
Multi-Head Attention
子编码器和子解码器的 Multi-Head Attention
Multi-Head Attention允许模型同时关注不同位置的不同表示子空间的信息。如果只有一个attention head,平均就会抑制这一点。
在上一张架构图中可以看到,输入经过输入嵌入和位置嵌入后一分为三,(下图)从右到左分别为查询、键、值(Q、K、V)。
Multi-Head Attention 一共有h层,将Q、K、V一分为h,Q、K、V分别经过一个线性映射,再经过Scaled Dot-Product Attention,合并h层,最后经过一个线性映射。
head i \text{head}_i headi:
where head i = Attention ( Q W i Q , K W i K , V W i V ) \text{where head}_i= \text{Attention}(QW_i^Q, KW_i^K, V W_i^V) where headi=Attention(QWiQ,KWi