趋近智
编码器的作用是处理整个输入序列并构建有用的表示,而解码器的职责是逐个元素地生成输出序列。这种生成过程通常是自回归的,这意味着在预测下一个元素(例如翻译中的一个词)时,解码器会考虑编码器的输出以及它已经生成的元素。
解码器由N个相同的层堆叠而成。其每一层的结构都较为复杂,因为它需要处理两种类型的注意力机制。
让我们分析一个解码器层内部的组成部分。第一个解码器层的输入是目标序列嵌入(右移,我们稍后会讨论)加上位置编码。后续层的输入是来自前一个解码器层的输出。重要的是,每个解码器层还会接收来自最终编码器层的键(K)和值(V)矩阵。
单个解码器层由三个主要子层组成,每个子层后面都跟着一个“Add & Norm”(加和归一化)步骤(残差连接加上层归一化):
遮蔽多头自注意力: 该子层运行方式与编码器中的自注意力机制类似,但有一个重要的修改:遮蔽。在训练期间,解码器接收完整的输出序列作为输入(具体来说,是向右移动一个位置的版本,因此对位置 i 的预测仅依赖于到 i−1 的输出)。然而,为了保持自回归特性并防止模型通过“偷看”它应该预测的未来令牌来“作弊”,我们应用了注意力遮罩。这个遮罩在softmax计算之前,将后续位置的注意力分数有效设置为负无穷大,确保未来令牌的注意力概率变为零。这使得解码器中的每个位置只能关注输出序列中的先前位置(包括当前位置)。该子层的查询(Q)、键(K)和值(V)向量源自前一个解码器层的输出(或第一个层的目标序列嵌入)。
多头编码器-解码器注意力(交叉注意力): 这是解码器与编码器堆栈的输出进行交互的地方。该子层使得解码器能够聚焦于输入序列的相关部分,以帮助预测下一个输出令牌。工作方式如下:
位置前馈网络: 该子层结构上与编码器层中的相同。它由两个线性变换组成,中间带有ReLU激活函数:
FFN(x)=max(0,xW1+b1)W2+b2该网络独立应用于每个位置,处理来自编码器-解码器注意力子层的输出。它提供额外的非线性变换,以进一步细化每个位置的表示。
这三个子层中的每一个都带有残差连接,后面跟着层归一化,就像编码器中一样。这有助于梯度流动并稳定深度模型的训练。
单个Transformer解码器层内部的数据流。它包含遮蔽自注意力、编码器-解码器注意力(使用编码器输出)和一个前馈网络,每个都紧接着加和归一化。
堆栈中最终解码器层的输出代表了处理过的目标序列信息,该信息受到输入序列(通过编码器)和先前生成的目标令牌的影响。这个输出张量随后通常会传递给一个最终的线性层和一个softmax函数,以生成词汇表上的概率分布,用于预测下一个令牌,这部分我们将在后面介绍。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造