Encoder
输入b经过self-attention后得到向量a,运用残差连接,将a加上输入的b,得到最终输出,送入layer-normalization
layer-norm:计算输入向量的均值m和标准差,运用上边的公式将对应的Xi转换,等式右边是Xi,不是
,输出
输出的结果送入fully-connection,同样运用残差连接,加和后的结果再次进行layer-norm,最后输出
Positional Encoding:加上位置信息
Add & Norm:residual + layer-norm
Decoder
decoder首先会接收一个special token:begin作为开始信号
最终的输出由vocabulary+概率决定,上图表格左侧是vocabulary里所有的字,比如语音识别,那么左侧就是所有的中文字,可能有一千个一万个,视具体的业务情况而定。表格右侧是每个字对应的概率,概率最大的那个就是最终的输出,上图机为0.8,其他的都很小,那么就输出机。
vocabulary最后添加一个token:end,代表结束了,decoder看到输入是end,就结束。什么时候输出end是由机器自己决定的,这就叫autoregressiive
所以decoder的输入,除了一开始的begin这个token,其它的都是上一时刻decoder自己输出的向量,此时如果上一个时刻输出了错误的向量,后续就会有问题
Masked Self-attention:计算b1时,只考虑a1,不考虑a2a3a4;计算a2时,只考虑a1a2,不考虑a3a4;计算a4时,考虑a1到a4。因为decoder的输入是顺序生成的,不是同时存在的,所以只能考虑已经存在的
encoder和decoder连接部分
decoder输入的向量,取它的q,从encoder取所有向量的k v,重复自注意力那一套计算attention score,其他的都一样