Transformer的详细深入理解

一、前言
网络架构架构由等人在Is All You Need一文中提出 , 并用于的机器翻译任务 。但是该模型并没有用到以往的RNN或CNN网络架构 , 而是采用注意力机制 。这个模型广泛应用于NLP领域 , 例如机器翻译 , 问答系统 , 文本摘要和语音识别等等方向 。
为方便编写 , 以下的模型简称T模型
二、的整体架构
上图就是T模型的大致流程 , 可以看到 , 它分为编码器和解码器 , 其中编码器和解码器中中各有六个Block 。
三、T模型的大致流程如下 3.1第一步
获取输入句子的每一个单词的表示向量 X , 
X由单词的 (就是从原始数据提取出来的) 和单词位置的相加得到 。
图形如下:
【Transformer的详细深入理解】3.2第二步
将得到的单词表示向量矩阵x 传入中 , 经过 6 个block 后可以得到句子所有单词的编码信息矩阵 C , 如下图 。单词向量矩阵用Xn*d 表示 ,  n 是句子中单词个数 , d 是表示向量的维度 (论文中 d=512) 。每一个block 输出的矩阵维度与输入完全一致 。
3.3第三步
第三步:将输出的编码信息矩阵 C传递到中 ,  依次会根据当前翻译过的单词 1~ i 翻译下一个单词 i+1 , 如下图所示 。在使用的过程中 , 翻译到单词 i+1 的时候需要通过 Mask (掩盖) 操作遮盖住 i+1 之后的单词 。
上图接收了的编码矩阵 C , 然后首先输入一个翻译开始符 “” , 预测第一个单词 “I”;然后输入翻译开始符 “” 和单词 “I” , 预测单词 “have” , 以此类推 。这就是T模型的大致流程
四、T模型的详细流程 4.1T模型的输入
4.1.1 单词
单词的有很多种方式可以获取 , 例如可以采用 、Glove 等算法预训练得到 , 也可以在中训练得到 。
4.1.2 位置
中除了单词的  , 还需要使用位置表示单词出现在句子中的位置 。因为不采用 RNN 的结构 , 而是使用全局信息 , 不能利用单词的顺序信息 , 而这部分信息对于 NLP 来说非常重要 。所以中使用位置保存单词在序列中的相对或绝对位置 。
位置用 PE表示 , PE 的维度与单词是一样的 。PE 可以通过训练得到 , 也可以使用某种公式计算得到 。在中采用了后者 , 计算公式如下:
其中 , pos 表示单词在句子中的位置 , d 表示 PE的维度 (与词一样) , 2i 表示偶数的维度 , 2i+1 表示奇数维度 (即 2i≤d, 2i+1≤d) 。
使用这种公式计算 PE 有以下的好处:
使 PE 能够适应比训练集里面所有句子更长的句子 , 假设训练集里面最长的句子是有 20 个单词 , 突然来了一个长度为 21 的句子 , 则使用公式计算的方法可以计算出第 21 位的。
可以让模型容易地计算出相对位置 , 对于固定长度的间距 k , PE(pos+k) 可以用 PE(pos) 计算得到 。因为 Sin(A+B) = Sin(A)Cos(B) + Cos(A)Sin(B), Cos(A+B) = Cos(A)Cos(B) - Sin(A)Sin(B) 。
将单词的词和位置相加 , 就可以得到单词的表示向量 x , x 就是的输入 。
4.2Self-(自注意力机制)
上图是论文中的内部结构图 , 左侧为block , 右侧为block 。但这不是T模型的结构图 , 它只是一个Block , 而T模型里面共有12个Bolck
红色圈中的部分为 Multi-Head  , 是由多个 Self-组成的 , 可以看到block 包含一个 Multi-Head  , 而block 包含两个 Multi-Head(其中有一个用到 ) 。Multi-Head上方还包括一个 Add & Norm 层 , Add 表示残差连接 ( ) 用于防止网络退化 , Norm 表示 Layer  , 用于对每一层的激活值进行归一化 。