基于注意力机制的Transformer编码器-解码器架构的完整前向传播与自回归生成过程
字数 3329 2025-12-19 11:21:41

基于注意力机制的Transformer编码器-解码器架构的完整前向传播与自回归生成过程

题目描述
Transformer模型彻底改变了序列到序列(Seq2Seq)学习领域,其核心摒弃了传统的循环结构,完全依赖自注意力(Self-Attention)前馈网络(Feed-Forward Network) 来建模序列信息。本题目旨在详细拆解Transformer的编码器-解码器架构,深入讲解其完整的前向传播过程,以及在推理阶段如何利用编码器输出和解码器的自回归(Autoregressive) 机制生成目标序列的每一步。我们将从输入表示开始,逐步经过编码器栈、解码器栈,直至最终输出概率分布,并剖析其中的掩码(Masking)技术与自回归生成逻辑。

解题过程
让我们从数据如何流入模型开始,一步步拆解其计算图。

步骤1:输入表示与位置编码
模型的输入包括源语言序列(例如一句英文)和目标语言序列(例如对应的法文)。但在训练和推理阶段,解码器的输入处理方式不同。

  1. 词嵌入:将源序列的每个词(Token)通过一个可学习的嵌入矩阵转换为一个d_model维的向量(例如512维),得到源序列嵌入矩阵 X_src ∈ ℝ^(N × d_model),其中N是源序列长度。同理,目标序列在训练时使用整个序列,在推理时使用已生成的部分序列,得到目标序列嵌入矩阵 X_tgt ∈ ℝ^(M × d_model),M是目标序列长度。
  2. 位置编码:由于自注意力机制本身是位置无关的(置换等价),必须显式注入序列的顺序信息。Transformer使用正弦和余弦函数来生成固定的位置编码向量 PE(pos, 2i) = sin(pos / 10000^(2i/d_model))PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model)),其中pos是位置,i是维度索引。最终,编码器输入 E_in = X_src + PE_src解码器输入 D_in = X_tgt + PE_tgt。这确保了模型能感知每个词在序列中的绝对位置。

步骤2:编码器(Encoder)栈的前向传播
编码器由L个完全相同的层堆叠而成,每层包含两个核心子层。

  1. 多头自注意力子层
    • 查询、键、值投影:对于第l层的输入H^(l-1)(第0层为E_in),分别通过三个不同的线性层投影得到查询(Q)键(K)值(V) 矩阵,每个头的维度为d_k = d_model / hh为头数)。
    • 缩放点积注意力:计算 Attention(Q, K, V) = softmax( (Q K^T) / √d_k ) V。这个操作让序列中的每个词都能基于键-值对与所有其他词(包括自身)进行交互,通过注意力权重聚合信息。在编码器中,这是一个全局注意力,没有掩码,每个词能看到整个源序列的上下文。
    • 多头拼接与线性变换h个头的输出被拼接起来,再通过一个线性层W^O投影回d_model维,得到多头注意力输出MultiHead(Q, K, V)
    • 残差连接与层归一化Z = LayerNorm( H^(l-1) + MultiHead(Q, K, V) )。这有助于缓解深层网络中的梯度消失问题。
  2. 前馈网络子层FFN(x) = max(0, x W_1 + b_1) W_2 + b_2,这是一个两层全连接网络,中间使用ReLU激活。它独立地应用于Z的每个位置。
  3. 再次残差连接与层归一化H^(l) = LayerNorm( Z + FFN(Z) )
    经过L层的处理后,我们得到编码器的最终输出 H_enc = H^(L) ∈ ℝ^(N × d_model),它融合了源序列所有词之间的丰富上下文信息。

步骤3:解码器(Decoder)栈的前向传播与掩码机制
解码器同样由L个相同的层堆叠,但每层包含三个子层,且其自注意力子层是掩码的

  1. 掩码多头自注意力子层(第一个子层):
    • 输入是解码器的嵌入与位置编码之和D_in(训练时为完整目标序列,推理时为已生成的序列)。
    • 与编码器自注意力类似,但计算注意力权重时,必须防止当前位置“看到”未来的信息(即自回归属性)。这是通过在softmax之前,在(Q K^T)矩阵的上三角部分(不包括对角线右侧,具体实现时可能包含当前位置自身)加上一个极大的负值(如-1e9)来实现的,称为因果掩码(Causal Mask)。这样,在计算第t个位置的输出时,它只能关注到位置1t(包括t自身)的信息。此步骤旨在让解码器在生成过程中,仅基于已生成的部分来构建其内部表示。
    • 同样经过残差连接和层归一化,输出记为M
  2. 编码器-解码器注意力子层(第二个子层,或称交叉注意力):
    • 此子层的查询(Q) 来自于上一步的输出M,而键(K)值(V) 则来自于编码器的最终输出 H_enc
    • 计算 CrossAttention(Q, K, V) = softmax( (Q K^T) / √d_k ) V这里没有因果掩码,因为编码器的输出H_enc代表了完整的源序列信息,解码器的每个位置都可以访问所有这些信息。这个机制允许解码器在生成目标序列的每个词时,都能“有选择地关注”源序列的不同部分,实现对齐。
    • 同样经过残差连接和层归一化,输出记为C
  3. 前馈网络子层(第三个子层):与前一步骤相同,FFN(C)后再经过残差连接和层归一化,得到当前解码器层的输出H_dec^(l)
    经过L层解码器处理后,得到解码器的最终输出 H_dec = H_dec^(L) ∈ ℝ^(M × d_model)。

步骤4:输出层与自回归生成

  1. 线性投影与Softmax:解码器的最终输出H_dec通过一个线性层(其权重矩阵通常与目标词嵌入矩阵共享,以节省参数并提升效果)投影到目标词汇表大小的维度V。然后,对这个V维向量应用softmax函数,得到当前步在整个词汇表上的概率分布 P = softmax(H_dec * W_out) ∈ ℝ^(M × V)。
  2. 训练阶段:对于完整的目标序列,我们同时计算所有M个位置的概率分布,并与真实的“下一个词”进行交叉熵损失计算,这称为“教师强制”(Teacher Forcing)。
  3. 推理/生成阶段(自回归):这是关键的不同点。
    • 从起始符<sos>开始,将其作为初始解码器输入(序列长度为1)。
    • <sos>的嵌入向量(加上位置编码)送入解码器。解码器利用编码器输出的H_enc和因果掩码的自注意力,计算出第一步的隐藏状态,并通过输出层得到第一个词在词汇表上的概率分布P_1
    • 根据P_1,通过贪婪搜索(取概率最大的词)或束搜索(维护多个概率高的候选序列)选择第一个生成的词y_1
    • <sos>, y_1拼接,作为新的解码器输入序列(长度为2),重复上述过程,计算第二步的概率分布P_2,并选择y_2
    • 以此类推,每次生成都将之前所有已生成的词作为输入,直到生成结束符<eos>或达到最大生成长度。这个“基于历史生成未来”的过程就是自回归生成

总结
Transformer通过编码器利用全局自注意力对源序列进行深度编码,生成富含上下文的表示H_enc解码器则通过掩码自注意力确保自回归性,再通过编码器-解码器注意力(交叉注意力)桥接源序列信息,最后通过线性层和softmax产生目标词的概率分布。在推理时,模型以自回归的方式,将上一步的输出作为下一步的输入,逐步生成整个目标序列。这个过程完全并行化了训练,并在推理时高效地利用了缓存机制,是Transformer强大能力的基础。

基于注意力机制的Transformer编码器-解码器架构的完整前向传播与自回归生成过程 题目描述 Transformer模型彻底改变了序列到序列(Seq2Seq)学习领域,其核心摒弃了传统的循环结构,完全依赖 自注意力(Self-Attention) 和 前馈网络(Feed-Forward Network) 来建模序列信息。本题目旨在详细拆解Transformer的编码器-解码器架构,深入讲解其 完整的前向传播过程 ,以及在推理阶段如何利用编码器输出和解码器的 自回归(Autoregressive) 机制生成目标序列的每一步。我们将从输入表示开始,逐步经过编码器栈、解码器栈,直至最终输出概率分布,并剖析其中的掩码(Masking)技术与自回归生成逻辑。 解题过程 让我们从数据如何流入模型开始,一步步拆解其计算图。 步骤1:输入表示与位置编码 模型的输入包括 源语言序列 (例如一句英文)和 目标语言序列 (例如对应的法文)。但在训练和推理阶段,解码器的输入处理方式不同。 词嵌入 :将源序列的每个词(Token)通过一个可学习的嵌入矩阵转换为一个 d_model 维的向量(例如512维),得到 源序列嵌入矩阵 X_src ∈ ℝ^(N × d_ model),其中 N 是源序列长度。同理,目标序列在训练时使用整个序列,在推理时使用已生成的部分序列,得到 目标序列嵌入矩阵 X_tgt ∈ ℝ^(M × d_ model), M 是目标序列长度。 位置编码 :由于自注意力机制本身是位置无关的(置换等价),必须显式注入序列的顺序信息。Transformer使用 正弦和余弦函数 来生成固定的位置编码向量 PE(pos, 2i) = sin(pos / 10000^(2i/d_model)) 和 PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model)) ,其中 pos 是位置, i 是维度索引。最终, 编码器输入 E_in = X_src + PE_src , 解码器输入 D_in = X_tgt + PE_tgt 。这确保了模型能感知每个词在序列中的绝对位置。 步骤2:编码器(Encoder)栈的前向传播 编码器由 L 个完全相同的层堆叠而成,每层包含两个核心子层。 多头自注意力子层 : 查询、键、值投影 :对于第 l 层的输入 H^(l-1) (第0层为 E_in ),分别通过三个不同的线性层投影得到 查询(Q) 、 键(K) 、 值(V) 矩阵,每个头的维度为 d_k = d_model / h ( h 为头数)。 缩放点积注意力 :计算 Attention(Q, K, V) = softmax( (Q K^T) / √d_k ) V 。这个操作让序列中的每个词都能基于 键-值对 与所有其他词(包括自身)进行交互,通过注意力权重聚合信息。在编码器中,这是一个 全局注意力 ,没有掩码,每个词能看到整个源序列的上下文。 多头拼接与线性变换 : h 个头的输出被拼接起来,再通过一个线性层 W^O 投影回 d_model 维,得到多头注意力输出 MultiHead(Q, K, V) 。 残差连接与层归一化 : Z = LayerNorm( H^(l-1) + MultiHead(Q, K, V) ) 。这有助于缓解深层网络中的梯度消失问题。 前馈网络子层 : FFN(x) = max(0, x W_1 + b_1) W_2 + b_2 ,这是一个两层全连接网络,中间使用ReLU激活。它独立地应用于 Z 的每个位置。 再次残差连接与层归一化 : H^(l) = LayerNorm( Z + FFN(Z) ) 。 经过 L 层的处理后,我们得到 编码器的最终输出 H_enc = H^(L) ∈ ℝ^(N × d_ model),它融合了源序列所有词之间的丰富上下文信息。 步骤3:解码器(Decoder)栈的前向传播与掩码机制 解码器同样由 L 个相同的层堆叠,但每层包含 三个 子层,且其自注意力子层是 掩码的 。 掩码多头自注意力子层 (第一个子层): 输入是解码器的嵌入与位置编码之和 D_in (训练时为完整目标序列,推理时为已生成的序列)。 与编码器自注意力类似,但计算注意力权重时,必须防止当前位置“看到”未来的信息(即 自回归属性 )。这是通过在 softmax 之前,在 (Q K^T) 矩阵的 上三角部分 (不包括对角线右侧,具体实现时可能包含当前位置自身)加上一个极大的负值(如 -1e9 )来实现的,称为 因果掩码(Causal Mask) 。这样,在计算第 t 个位置的输出时,它只能关注到位置 1 到 t (包括 t 自身)的信息。此步骤旨在让解码器在生成过程中,仅基于已生成的部分来构建其内部表示。 同样经过残差连接和层归一化,输出记为 M 。 编码器-解码器注意力子层 (第二个子层,或称交叉注意力): 此子层的 查询(Q) 来自于上一步的输出 M ,而 键(K) 和 值(V) 则来自于 编码器的最终输出 H_enc 。 计算 CrossAttention(Q, K, V) = softmax( (Q K^T) / √d_k ) V 。 这里没有因果掩码 ,因为编码器的输出 H_enc 代表了完整的源序列信息,解码器的每个位置都可以访问所有这些信息。这个机制允许解码器在生成目标序列的每个词时,都能“有选择地关注”源序列的不同部分,实现对齐。 同样经过残差连接和层归一化,输出记为 C 。 前馈网络子层 (第三个子层):与前一步骤相同, FFN(C) 后再经过残差连接和层归一化,得到当前解码器层的输出 H_dec^(l) 。 经过 L 层解码器处理后,得到 解码器的最终输出 H_dec = H_dec^(L) ∈ ℝ^(M × d_ model)。 步骤4:输出层与自回归生成 线性投影与Softmax :解码器的最终输出 H_dec 通过一个线性层(其权重矩阵通常与目标词嵌入矩阵共享,以节省参数并提升效果)投影到目标词汇表大小的维度 V 。然后,对这个 V 维向量应用 softmax 函数,得到当前步在 整个词汇表上的概率分布 P = softmax(H_dec * W_out) ∈ ℝ^(M × V)。 训练阶段 :对于完整的目标序列,我们同时计算所有 M 个位置的概率分布,并与真实的“下一个词”进行 交叉熵损失 计算,这称为“教师强制”(Teacher Forcing)。 推理/生成阶段(自回归) :这是关键的不同点。 从起始符 <sos> 开始,将其作为初始解码器输入(序列长度为1)。 将 <sos> 的嵌入向量(加上位置编码)送入解码器。解码器利用编码器输出的 H_enc 和因果掩码的自注意力,计算出第一步的隐藏状态,并通过输出层得到第一个词在词汇表上的概率分布 P_1 。 根据 P_1 ,通过 贪婪搜索 (取概率最大的词)或 束搜索 (维护多个概率高的候选序列)选择第一个生成的词 y_1 。 将 <sos>, y_1 拼接,作为新的解码器输入序列(长度为2),重复上述过程,计算第二步的概率分布 P_2 ,并选择 y_2 。 以此类推,每次生成都将之前所有已生成的词作为输入,直到生成结束符 <eos> 或达到最大生成长度。这个“基于历史生成未来”的过程就是 自回归生成 。 总结 Transformer通过 编码器 利用全局自注意力对源序列进行深度编码,生成富含上下文的表示 H_enc 。 解码器 则通过 掩码自注意力 确保自回归性,再通过 编码器-解码器注意力 (交叉注意力)桥接源序列信息,最后通过线性层和softmax产生目标词的概率分布。在推理时,模型以 自回归 的方式,将上一步的输出作为下一步的输入,逐步生成整个目标序列。这个过程完全并行化了训练,并在推理时高效地利用了缓存机制,是Transformer强大能力的基础。