Attention is ALL you need!
笔记来源于:zhuanlan.zhihu.com/p/338817680
Embedding的含义(参考:zhuanlan.zhihu.com/p/164502624…):
直译为嵌入式、嵌入层,可以达到降维或者升维的目的。在Embedding层,我们可以将两个无法比较的文字映射成向量,接下来就能实现对他们的计算。
例如:
queen(皇后)= king(国王)- man(男人)+ woman(女人)
这样计算机能明白,“皇后啊,就是女性的国王呗!”
举例子
Transformer有Encoder和Decoder两个部分组成,Encoder和Decoder都包含6个block。
下文是Transformer用于中英文翻译的步骤思路。
-
首先获取单词向量X,X由单词的Embedding(Embedding是从原始数据提取出来的Feature)和单词位置的Embedding相加得到。
-
将得到的单词表示向量矩阵 (如上图所示,每一行是一个单词的表示 x) 传入 Encoder 中,经过 6 个 Encoder block 后可以得到句子所有单词的编码信息矩阵 C。
单词向量矩阵用X_{n×d}表示, n 是句子中单词个数,d 是表示向量的维度 (论文中 d=512)。每一个 Encoder block 输出的矩阵维度与输入完全一致。
-
将 Encoder 输出的编码信息矩阵 C传递到 Decoder 中,Decoder 依次会根据当前翻译过的单词 1~ i 翻译下一个单词 i+1,如下图所示。在使用的过程中,翻译到单词 i+1 的时候需要通过 Mask (掩盖) 操作遮盖住 i+1 之后的单词。
上图 Decoder 接收了 Encoder 的编码矩阵 C,然后首先输入一个翻译开始符 "Begin",预测第一个单词 "I";然后输入翻译开始符 "Begin" 和单词 "I",预测单词 "have",以此类推。这是 Transformer 使用时候的大致流程。
Transformer的输入
Transformer 中单词的输入表示 x由单词 Embedding 和位置 Embedding (Positional Encoding)相加得到。
Self-Attention——自注意力机制
左侧为 Encoder block,右侧为 Decoder block。
红色圈中的部分为 Multi-Head Attention,是由多个 Self-Attention组成的。
Encoder block 包含一个 Multi-Head Attention,而 Decoder block 包含两个 Multi-Head Attention (其中有一个用到 Masked)。
Multi-Head Attention 上方还包括一个 Add & Norm 层,Add 表示残差连接 (Residual Connection) 用于防止网络退化,Norm 表示 Layer Normalization,用于对每一层的激活值进行归一化。
-
Self-Attention 结构
上图为self-attention的结构,在计算的时候需要用到矩阵Q(查询),K(键值),V(值)。在实际中,Self-Attention 接收的是输入(单词的表示向量x组成的矩阵X) 或者上一个 Encoder block 的输出。而Q,K,V正是通过 Self-Attention 的输入进行线性变换得到的。
-
Multi-Head Attention
Multi-Head Attention 是由多个 Self-Attention 组合形成的。
Multi-Head Attention 包含多个 Self-Attention 层,首先将输入X分别传递到 h 个不同的 Self-Attention 中,计算得到 h 个输出矩阵Z,然后Multi-Head Attention 将它们拼接在一起 (Concat),然后传入一个Linear层,得到 Multi-Head Attention 最终的输出Z。