RNN的缺陷:梯度消失问题;核心原因:递归的方式
RNN相关算法只能从左向右依次计算或者从右向左依次计算,这种机制带来了两个问题:
1. 时间片 t 的计算依赖 t−1 时刻的计算结果,这样限制了模型的并行能力
2. 顺序计算的过程中信息会丢失,尽管LSTM等门机制的结构一定程度上缓解了长期依赖的问题,但是对于特别长期的依赖现象,LSTM依旧无能为力。
Transformer的优势:
1. 首先它使用了Attention机制,将序列中的任意两个位置之间的距离缩小为一个常量;
2. 其次它不是类似RNN的顺序结构,因此具有更好的并行性,符合现有的GPU框架。
左边是Encoder部分,右边是Decoder部分。
Encoder模块
self-Attention机制
Self-Attention的意思即为“一个句子内的单词,互相看其他单词对自己的影响力有多大。”句子内各单词的注意力,应该关注在该句子内其他单词中的哪些单词上。
Self-Attention的计算机制
x1和x2已经发生了某种程度上的信息交换。
通过全连接层,就能输出该Encoder层的输出r1和r2。
Scaled Dot-Product Attention 缩放点注意力
q就是query,k就是key,v就是值,(k,v)就是键值对。
矩阵乘法:
muti-headed Attention
用不同的WQ, WK, WV,可以让Attention有更丰富的层次。有多个Q、K、V的话,可以分别从多个不同角度来看待Attention。对于不同的multi-headed Attention,就会产生不同的z。
将多个版本的x拼接称为一个长向量,然后用一个全连接网络,即乘以一个矩阵,就能得到一个短的x向量。
词向量Embedding输入
对其进行随机初始化(当然也可以选择Pre-trained的结果),但设为Trainable。这样在training过程中不断地对embeddings进行改进。 即End2End训练方式。
位置编码
输入模型的整个Embedding是Word Embedding与Positional Embedding直接相加之后的结果。
单词坐标
不同位置的Positional Encoding是独特的。
其特点是Encoding向量的点积值对称,随着距离增大而减小。
skip connection 和Layer Normalization
在Selft-Attention的前后和每一个Feed Forwar前后都用了跳跃层,
Encoder模块汇总
Decoder模块
Mask-Muti-Head-Attention输入端
mask: 掩码,对某些值进行掩盖,使其在参数更新时不产生效果。分为 padding mask和sequence mask。
Padding Mask: 对输入序列进行对齐,在较短的序列后面填充0。
Sequence mask: 为了使得Decoder不能看见未来的信息。产生一个上三角矩阵,上三角的值全为0。把这个矩阵作用在每一个序列上,就可以达到我们的目的。
Decoder的Encode-Decode注意力层
Decoder的输出
Decoder和Encoder唯一的区别就是多了一个Encode-Decode注意力层,然后最后一层接了个linear+softmax层,损失函数就是交叉熵损失。
Noam Learning Rate Schedule
Self-Attention 是四个中最好的
Training
在English-to-German翻译任务中,Transformer(big) 建立了28.4的最高BLEU分数。
在English-to-French翻译任务中,Transformer(big) 建立了41.8的最高BLEU分数。
训练成本也很小。
Variations on the Transformer architecture. 架构变体