Transformer理论阶段
Transformer
Transformer分为两个部分,一个是编码器,一个是解码器,左侧是编码器,右边是解码器。
Transformer是一个seq2seq模型,是由一个序列到一个序列的模型,输入一个词向量到编码器得到更好的词向量,输入到解码器最终输出出一个个词。
编码器
左侧是编码器的基本组成单位,编码器是由多个ENCODER组成的,一般是6个。
如图是一个ENCODER。
首先得到
X
1
,
X
2
X_1,X_2
X1,X2两个词向量输入,加上黄色的
X
1
,
X
2
X_1,X_2
X1,X2(位置编码)得到了含有位置信息的词向量。
输入self-attention,给词向量的更多信息(句法特征,语义特征)。
做归一化和残差网络,归一化是为了Feed Forward服务的,控制输入数据的范围,使Feed forward激活函数的非线性变化程度更大。残差网络是为了防止Feed forward梯度消失。
做feed forward,其实就是
R
e
l
u
(
W
(
W
∗
X
+
b
)
+
b
)
Relu(W(W*X+b)+b)
Relu(W(W∗X+b)+b)
多层叠加得到更好的词向量。
解码器
右图是解码器的一个单位,多层DECODER组成解码器,第一层self-attention层实际上是Mask self-attention层。
第二层是交叉自注意力机制,KV同源,Q不同源。Q来自上一层Mask self-attention,KV来自ENCONDER。
第三层feed forward。
为什么需要Mask self-attention
训练阶段,已知目标向量,输入的就是目标向量,self-attention就可以解决,测试阶段,不知道目标向量,生成一个输入一个,由于训练和测试的区别,就直接用Mask self-attention
为什么KV来自ENCONDER
Q的含义是查询变量,通过K来做自注意力机制得到在Q看来,V哪个更重要。
Transformer生成一个单词就放入目标向量中,要看对于这个新词中,后面哪个词的概率更大,所以,输入的新词要做Q即Mask self-attention得到的词向量,KV来自encoder。
Transformer总和
输入X加上位置编码,通过多层encoder层得到更好的词向量,把KV输入解码器的每一个decoder里面的Encoder-Decoder self-attention。
每生成一个词,加入目标向量,输入Decoder。
接下来将用pytorch实现Transformer。敬请期待。