从全局角度概括Transfomer
6个encoder结构是完全相同的(但参数上不同),6个decoder结构是完全相同的(但参数上不同)。
先来介绍下input embedding和output embedding:
input embedding是编码器的输入,output embedding是解码器的输入。
input embedding和output embedding 是通过token embedding matrix 得到的,需要先构建token embedding matrix,维度是vocab_size乘d_model(vocab_size是词汇量的大小,d_model是词向量的长度,也就是说每一个词都用一个d_model维的向量表示,所有的词合起来就构成了这个矩阵),然后用tf.nn.embeddinglookup函数在matrix里按照x查询得到input embedding,x是由词的id构成的向量,设x的长度为T1,那么最终得到的input embedding的维数就是T1乘d_model。output embedding和input embedding的得到方式相同,不同的地方在于把x换成decoder_inputs,以机器翻译为例,要把T1长的英文翻译成T2长的中文,那么x是T1长的英文词id,decoder inputs就是对应T2长的中文词id,所以最终得到的output embedding是T2乘d_model维。
位置编码详细解读
rnn共享一套参数
就算你有100个timestamp(100个字、100个词)但是只有一套参数(U、W、V)
rnn梯度消失:rnn的梯度是梯度和,梯度消失不是变为0而是总梯度被近距离梯度阻挡,远距离梯度忽略不计
rnn的输入有先后,transfomer的输入是一起处理的,这样做增快了速度,但是忽略单词的先后关系,所有transfomer要位置编码
我爱你
pos我,k爱,pos+k你
多头注意力机制详解
Q先和K点乘,反应两个向量之间的相似度
详细介绍一下
attention:将特征和目标进行相似度匹配(Y1和X1~4,Y2和X1~4,Y3和X1~4)
g(x)是一个加和函数
query是汤姆,key1是Tom,key2是Chase,K3是Jerry
value和key是同一个东西
自注意力机制指的是QKV是同一个东西,也就是Tom chase jerry
这里的embedding加上了位置编码
多头将原始信息打到不同的空间
残差详解
残差结构确保不会出现梯度消失
Batch Normal详解
BN在NLP中效果很差,所以大多数情况下使用LN
BN针对所有样本的每一个特征
Layer Normal详解
不能我和今、爱和天、中和天这么做均值和方差(BN)
而应该我爱中国共产党、今天天气真不错做均值和方差(LN)
Decoder详解
因为在预测阶段是没有后面的信息的,所以需要mask
encode的KV,decode的Q