transformer中的解码器
解码器层
每个解码器层根据给定的输入向目标方向进行特征提取,即完成解码过程
transformer的解码器也是一个自回归模型,根据编码器的结果以及上一次预测的结果,对下一次可能出现的值进行特征表示。它也是由N层完全相同解码器层堆叠起来的,每个解码器层包括三个子层连接结构:
1. 第一个子层连接结构是一个多头注意力子层和一个规范化层和残差连接的组合;
2. 第二个子层连接结构是一个多头注意力子层和一个规范化层和残差连接的组合;
3. 第三个子层连接结构是一个前馈全连接子层和一个规范化层和残差连接的组合。
第二个多头注意力子层
在解码器层中比较特殊的地方就是第二个子层的多头注意力机制,它的结构与transformer中其他的多头注意力子层没有区别,但是它采用的是普通的注意力机制而不是自注意力机制,即它的输入的,它的K和V都是来自编码器的输出,Q来自于解码器层中第一个子层的输出,并且解码器的多头注意力子层还需要mask遮掩未来信息。
解码器细节
如上图,在解码器通过开始符 <bos> 以及其预测出来的“永 不”后,经过一些操作,预测出“言”,以此类推,在下一个时间步上,就是通过“<bos> 永 不 言”来预测下一个输出“弃”。
对于乱码部分的注意力分数,我们设置为一个非常小的数,使得其e指数接近0,设置后再计算注意力分数,得到以及预测出来部分之间的相互注意力得分。
得到y向量之后,即第一个子层结束,再经过一个子层连接结构之后就进入第二个子层。在第二个子层使用注意力机制(即下图中的Cross Attention)
用编码器输出的K,V与上一个子层输出的Q做注意力计算,同上,最后在经过第三个子层,同样需要先经过一个子层连接结构就完成了解码器层的工作,和编码器部分一样需要经过N层的解码器层堆叠组成解码器部分。在模型的最后需要通过线性层把d_model维度转化回vocab_size的维度再经过softmax和argmax最后得到一个vocab_size维度的独热码,就完成取到“言”的操作,接下去以此类推。
transformer的工作流程
通过 transformer 我们可以完成把 input 的句子翻译成对应的 output 的句子。现在就以这个作为例子,输入经过词嵌入和位置编码后结合在一起作为encoder的输入,这里不再具体讨论encoder内部的具体过程,encoder会输出包含语义信息的张量memory,即下图中的K_encdec和V_encdec,这两个值会输入到decoder中的每一个解码器层中的第二个多头注意力子层。
以上为transformer的大致内容,transformer模型对相对位置和绝对位置都不敏感并且计算的时候没有顺序依赖因此可以并行计算,但是做在self-attention的时候会需要有依赖序列长度的复杂度,即 。
Reference
[模型学习]Transformer机制及其过程_transformer解码过程-CSDN博客
https://arxiv.org/pdf/1706.03762.pdf