趋近智
编码器将输入序列处理成丰富的表示,而解码器的作用通常是生成输出序列,每次一个元素(自回归地)。为达此目的,每个解码器层会整合先前生成的输出元素和编码器堆栈产生的最终表示的信息。
单个解码器层由三个不同的子层组成,每个子层之后都跟着一个残差连接和层归一化步骤,这与编码器中的结构相似,但在注意力机制上存在显著差异。
标准Transformer解码器层内的组成部分有:
遮蔽多头自注意力: 这个子层允许解码器输入(部分生成的输出序列)中的每个位置关注解码器输入中所有及自身之前的位置。这里的重要补充是“遮蔽”。在序列生成的训练和推理过程中,解码器必须仅依赖于先前生成的词元。遮蔽确保自注意力机制不能“提前看”输出序列中的未来词元,从而保持了逐步生成序列所需的自回归属性。这通常通过在softmax操作之前,向与未来位置对应的注意力分数添加一个大的负值(接近负无穷大)来实现,从而有效地将它们的概率归零。底层多头注意力计算方式与第三章中描述的相同。
多头交叉注意力(编码器-解码器注意力): 这是解码器整合来自输入序列信息的地方。与自注意力中查询 (Q)、键 (K) 和值 (V) 都源自同一序列不同,交叉注意力运作方式有别。查询 (Q) 源自前一个解码器子层(遮蔽自注意力层)的输出。然而,键 (K) 和值 (V) 直接来自编码器堆栈最后一层的输出。这个机制使解码器输出序列中的每个位置都能关注输入序列中的所有位置,从而使其在生成下一个输出词元时,能够集中于输入语境中最相关部分。这个子层对于机器翻译等需要输入和输出词对齐的任务而言非常基本。
逐位置前馈网络(FFN): 这个子层在结构和功能上与编码器层中的FFN相同,它由两个线性变换和一个非线性激活函数(通常是ReLU或GeLU)组成。它独立应用于从交叉注意力子层产生的每个位置向量。这提供了额外的建模能力,并使网络能够更有效地处理从注意力机制中收集的信息。
这三个子层中的每一个都有一个残差连接,之后是层归一化。子层输出的公式可以表示为:
层归一化(x+子层(x))其中 x 是子层的输入,ext子层(x) 是子层本身实现的函数(例如,遮蔽自注意力、交叉注意力或FFN)。这些“添加与归一化”步骤对于训练深度Transformer模型非常重要,它们通过改善梯度流和稳定层输入来帮助训练。
以下图表说明了单个解码器层内的数据流:
标准Transformer解码器层内的数据流。输入代表目标序列嵌入(加位置编码)或前一个解码器层的输出。编码器输出为交叉注意力提供键和值。每个子层(遮蔽自注意力、交叉注意力、FFN)之后是添加与归一化。
理解这种分层结构很基本。遮蔽自注意力处理目前已生成的序列,交叉注意力通过编码器整合来自输入序列的语境,前馈网络提供进一步的变换。多个相同的解码器层随后堆叠起来,形成Transformer的完整解码器部分。后续章节将更详细地查看遮蔽注意力、交叉注意力、FFN和“添加与归一化”操作的具体细节。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造