transformer再记(解码器)

transformer再记(解码器)_第1张图片

上一篇:transformer再记(编码器)

解码器与编码器在细节上有差异。

transformer再记(解码器)_第2张图片

解码器的Attention

decoder第一级自注意力的key, query, value均来自前一层decoder的输出,但加入了Mask操作,即我们只能attend到前面已经翻译过的输出的词语,因为翻译过程我们当前还并不知道下一个输出词语,这是我们之后才会推测到的。

而decoder第二级注意力也被称作encoder-decoder attention layer,即它的query来自于之前一级的decoder层的输出,但其key和value来自于encoder的输出,这使得decoder的每一个位置都可以attend到输入序列的每一个位置。

总结一下,k和v的来源总是相同的,q在encoder及decoder自注意力层中与k,v来源相同,在encoder-decoder attention layer中与k,v来源不同。


编码器解码器连接:

编码器通过处理输入序列开启工作。顶端编码器的输出之后会变转化为一个包含向量K(键向量)和V(值向量)的注意力向量集 。这些向量将被每个解码器用于自身的“编码-解码注意力层”,而这些层可以帮助解码器关注输入序列哪些位置合适。

解码器解码:

在完成编码阶段后,则开始解码阶段。解码阶段的每个时间步都会输出一个输出序列的元素(在这个例子里,是英语翻译的句子)

transformer再记(解码器)_第3张图片

接下来的每个时间步重复了这个过程,直到到达一个特殊的终止符号,它表示transformer的解码器已经完成了它的输出。每个时间步的输出在下一个时间步被提供给底端解码器并且就像编码器之前做的那样,这些解码器会输出它们的解码结果 。另外,就像我们对编码器的输入所做的那样,我们会将上个时间步的输出嵌入并添加位置编码,来表示每个单词的位置。

而那些解码器中的自注意力层表现的模式与编码器不同:在解码器中,自注意力层只被允许处理输出序列中更靠前的那些位置。在softmax步骤前,它会把后面的位置给隐去(Masked)。

解码器中的“编码-解码注意力层”工作方式基本就像多头自注意力层一样,只不过它是通过在它下面的解码层来创造查询矩阵(Q),并且从编码器的输出中取得键(V)/值矩阵(K)。



最终的线性变换和Softmax层

线性变换:

解码器最终会输出一个实数向量。解码器输出后的线性变换层是一个简单的全连接神经网络,它可以把解码组件产生的向量投射到一个比它大得多的(字典维度),被称作对数几率(logits)的向量里。不妨假设我们的模型从训练集中学习一万个不同的英语单词(我们模型的“输出词表”)。因此对数几率向量为一万个单元格长度的向量,其中每个单元格对应某一个单词的分数。

softmax层:

Softmax 层便会把那些分数变成概率(都为正数、和为1)。概率最高的单元格被选中,并且它对应的单词被作为这个时间步的输出。 

transformer再记(解码器)_第4张图片
以解码器组件产生的输出向量开始,之后它会转化出一个输出单词。

你可能感兴趣的:(transformer再记(解码器))