Transformer 解码器架构原理与核心机制详解
Transformer 架构相对于早期的 RNN 显著提高了自然语言任务的性能,以其独特的注意机制和并行处理能力而闻名。作为理解和生成人类语言的创新飞跃,其准确性和效率前所未有。本文深入回顾 Transformer 经典架构的解码器原理、内部组件及在生成式模型中的应用。
解码器结构概述
解码器是 Transformer 架构中负责构建文本序列的核心组件。与编码器相似,解码器配备了一组类似的子层,但其设计目标不同:编码器关注理解输入上下文,而解码器关注基于已生成的内容预测下一个 token。
解码器包含两个多头注意力层(Multi-Head Attention),一个前馈神经网络层(Feed-Forward Network),并在每个子层后都包含残差连接(Residual Connection)和层归一化(Layer Normalization)。
这些组件的功能类似于编码器层,但有一个关键变化:解码器中的每个多头注意力层都有其独特的任务。Transformer 解码器具有专门设计的结构,可以逐步解码编码信息以生成输出序列。
解码器以自回归的方式运行,通过启动标记(Start Token)来启动其过程。它巧妙地使用先前生成的输出列表作为其输入,与来自编码器的输出一起使用。编码器的输出富含来自初始输入的注意力信息,解码过程一直持续到解码器输出创建结束标记(End Token)。
工作流分解
1. 输出嵌入 (Output Embeddings)
嵌入过程与编码器的过程相似,同样发生在最底层的解码器中。在这里,输入首先经过嵌入层。输入通常是上一时刻预测出的 token ID,通过查找表转换为稠密向量表示。这一过程将离散的符号映射到连续的向量空间,使得模型能够捕捉语义信息。
2. 位置编码 (Positional Encoding)
在嵌入之后,输入经过位置编码层,产生这个序列的位置嵌入。由于 Transformer 不包含循环或卷积结构,无法天然感知序列顺序,因此必须显式注入位置信息。
原始 Transformer 论文使用了正弦和余弦函数生成位置编码,公式如下:
PPE(pos, 2i) = sin(pos / 10000^(2i/d_model))
PPE(pos, 2i+1) = cos(pos / 10000^(2i/d_model))
这些位置嵌入被导入到解码器的第一个多头注意力层中,那里会精确计算与解码器输入相关的注意力分数,确保模型知道当前预测的是序列中的第几个词。
3. 解码器层的堆栈结构
解码器由一堆相同的解码器层组成(原始 Transformer 模型中有 6 层)。每一层都有 3 个主要的子组件,按顺序执行。
掩码自注意力机制 (Masked Multi-Head Attention)
这类似于编码器中的自注意力机制,但有一个关键的区别:掩码自注意力机制阻止位置关注后续位置。这意味着序列中的每个单词不受未来标记的影响。这种掩码通常是一个下三角矩阵,确保特定位置的预测只能依赖于它之前位置的已知输出。这是实现自回归生成的关键,防止了训练时的数据泄露。
交叉注意力机制 (Cross-Attention)
在解码器的第二个多头注意力层中,我们看到编码器和解码器组件之间独特的相互作用。在这里,编码器的输出扮演查询 (Query, Q) 的角色,而关键字 (Key, K) 和值 (Value, V) 则来自解码器第一个多头注意力层的输出。
注:此处需修正逻辑以符合标准 Encoder-Decoder 架构描述,但在 Decoder-only 架构(如 GPT)中,此层不存在。鉴于原文提及'编码器的输出',我们按 Encoder-Decoder 架构解释,同时补充 Decoder-only 的差异。
Encoder-Decoder 模式下的交叉注意力: 在这个子层中,Q 来自前一个解码器层,而 K 和 V 来自编码器的输出。这使得解码器中的每个位置都可以关注输入序列中的所有位置,有效地将编码器中的信息与解码器中的信息整合在一起。这对于翻译等任务至关重要,因为它允许模型根据源语言的所有部分来决定目标语言的下一个词。


