Transformer是一个 Sequence to Sequence model,应用了 self-attention。 它兼具RNN和卷积网络的优点:并行化和关注全局信息。
结构图如下:
左侧框是Encoder结构,右侧框是Decoder,上侧是分类网络结构。
1 Encoder
单个Encoder单元流程如下:
- 1. 我们可以看到输入.shape=(B, L, D),其中B是batch_size, L是sequence length,D是dim_in。
- 2. 之后进入Multi-Head Attention(多头注意力模型)中,输出的维度仍然是(B, L, D)
- 3. 再将结果与原输入进行相加(借鉴残差结构),用于防止网络退化,输出维度是(B, L, D)
- 4. 再通过Layer normalization,用于对每一层的激活值进行归一化,输出维度是(B, L, D)
- 5. 接着进入前馈神经网络Feed Forword Network,并进行Add和Layer Normalization
其中有几个步骤进行详细的总结一下,包括:
- 1. Layer Normalization
- 2. Feed Forword Network
1.1 Layer Normalization
我们比较熟悉的是批量归一化(Batch Normalization),那么其与Layer Normalization的区别是什么呢?为什么我们这里用Layer…而不用Batch…呢?
Batch Normalization作用与一个batch中的某一个channel,而Layer Normalization作用于batch中的一条样本。
比如我们有一个维度为(batch_size, c, wxh)的输入:
[ [ # batch_size=0 [x11, x12, x13, x14], [x21, x22, x23, x24], [x31, x32, x33, x34], ], [ # batch_size=1 [y11, y12, y13, y14], [y21, y22, y23, y24], [y31, y32, y33, y34], ] ].shape = (2, 3, 4)
如果我们进行Batch Normalization,我们将把x11-x31,y11-y31放在一起进行归一化,而Layer Normalization会把X11-X34即batch_size=0的整个矩阵进行归一化。其中
1.2 Feed Forword Network
Feed Forword Network是一个两层的全连接层,第一层以ReLU作为激活函数,第二层不适用激活函数,其计算公式如下:
其中X是Feed Forword Network的输入,最终的输出与输入X一致。
1.3 xN
上面介绍了一个Encoder单元的工作,其实整个Encoder是多个这种单元嵌套组成的,计算公式如下图:
2 Decoder
输出:位置i的输出词的概率分布
输入:Encoder的输出和第i-1位置Decoder的输出。
编码可以并行计算,一次性全部Encoding出来。但解码不是一次把所有序列解出来的,而是像 一样一个一个解出来的,因为要用上一个位置的输入当作attention的query 。
还是从下往上了解Decoder的结构:
- 1. 第i-1个Decoder的输出输入Mask Multi-Head Attention
- 2. 将第一步中的输出输入到第二个Multi-Head Attention生成矩阵Q,将Encoder的输出输入到第二个Multi-Head Attention生成矩阵K个V,这样每一个单词都可以利用到Encoder的所有单词信息
- 3. 将结果输入到Feed Forward Network网络中,这与Encoder一致
2.1 Masked Multi-Head Attention
相比Multi-Head Attention,这里主要是在Scale之后,Softmax之前进行了一次Mask操作。
主要的作用是使attention只会attend on已经产生的sequence
那么为什么使用mask操作呢?
Decoder 可以在训练的过程中使用Teacher Forcing并且并行化训练,即将正确的单词序列 ( I have a cat) 和对应输出 (I have a cat ) 传递到 Decoder。那么在预测第 i 个输出时,就要将第 i+1 之后的单词掩盖住。
具体如何做的呢,举例子进行说明?
假设我们有一个输入矩阵X=“ I have a cat”,映射为(0, 1, 2, 3, 4),通过Embedding后维度为(5, N)
按照self-attention的操作生成矩阵A(未进行softmax),维度为(5, 5),如下图所示
我们假设有一个Mask矩阵,其大小为(5, 5),如下图所示。
我们将生成的A矩阵按位与Mask相乘,得到遮掩后的矩阵A’。其中单词0只能使用单词0,单词1只能使用单词0和单词1…
将生成的 Mask QK^T与矩阵V相乘,得到只与前i-1个单词相关的矩阵信息
- 接下来的操作与Multi-Head Attention一致
3 Softmax输出预测
通过Feed Forward Network的结果通过一个全连接层得到结果如下:
我们进行softmax预测下一个单词
至此,transformer的网络总结结束,还需要对代码进行总结。
4 参考文章
https://zhuanlan.zhihu.com/p/340149804