如何从数据流动角度全面解析 Transformer 模型架构的深层逻辑?

摘要:论文链接:Attention Is All You Need 这篇论文提出了 Transformer 模型架构,这是一个序列到序列的模型,在论文中被应用于英德和英法两个机器翻译任务。 由于 Transformer 被用于翻译任务,整个模型的
论文链接:Attention Is All You Need 这篇论文提出了 Transformer 模型架构,这是一个序列到序列的模型,在论文中被应用于英德和英法两个机器翻译任务。 由于 Transformer 被用于翻译任务,整个模型的输入维度是 (batch_size, seq_len)​,输出维度是 (batch_size, seq_out_len)。模型采用 Encoder-Decoder 架构,下面是模型的整体结构图: 这里的维度指的是 Tokenization(分词)后的数据,详见后面描述 Encoder 端的数据流动 让我们从输入端开始,逐步追踪数据在 Encoder 中的流动过程。 首先是 Tokenization(分词) 阶段。虽然模型示意图中没有明确标出这一步,但实际应用中它是必不可少的。Tokenization 的作用是将无限可能的文本流转化为一个有限的词表。输入是一个 (batch_size,)​ 的数组,每个元素是一个输入句子的字符串,经过分词后输出就是我们所说的 inputs,维度变为 (batch_size, seq_len),其中第二维表示每个字词在词表中的索引。 接下来是 Input Embedding(词嵌入) 层。这一层的作用是将离散的索引映射为稠密的向量表示。经过这一步,数据维度从 (batch_size, seq_len)​ 扩展为 (batch_size, seq_len, d_model)​,其中 d_model 是模型的隐藏维度,第三维就是每个字词的向量表示。 然后是 Positional Encoding(位置编码) 。这篇论文采用的是绝对位置编码,使用正弦和余弦函数来生成位置信息。为什么需要位置编码呢?因为注意力机制会一次性并行处理句子中的所有字词,这个过程本身是没有顺序概念的,也就是说它是置换不变的(permutation invariant)。如果不添加位置信息,模型就无法区分"我爱你"和"你爱我"这样的句子。位置编码会直接加到词嵌入上,因此不改变数据的维度,依然保持 (batch_size, seq_len, d_model)。 最后,数据会经过 6 层堆叠的 Encoder 层。每一层 Encoder 都包含多头自注意力机制和前馈神经网络,但无论经过多少层,数据的维度始终保持为 (batch_size, seq_len, d_model)。Encoder 的最终输出会被共享给所有 6 个 Decoder 层,作为它们各自交叉注意力(Cross-Attention)的输入源。 这里有个值得注意的点:虽然所有 Decoder 层都使用同一个 Encoder 输出作为原始输入,但每个 Decoder 层会用自己独立的权重矩阵将这个输出投影成 K 和 V。因此,虽然输入源相同,但经过各自的线性变换后,每层实际使用的 K 和 V 是不同的。而 Q 则来自 Decoder 自身的隐藏状态,每一层的 Q 也都不同。这种设计让每个 Decoder 层能从不同角度关注输入序列的信息。 Decoder 端的数据流动 现在让我们看看 Decoder 端的数据流动。这里有个重要的概念需要理解:outputs 在训练和推理时扮演着不同的角色。 在训练阶段,outputs 有双重身份。一方面,它作为模型的输入,这种方式叫做 Teacher Forcing,即把正确答案喂给模型;另一方面,它也作为标签用于计算损失。而在推理阶段,模型采用自回归的方式逐个生成 token,每次预测一个词,然后把预测结果作为下一步的输入。 和 inputs 类似,outputs 最初也是一个 (batch_size,)​ 的字符串数组,每个元素是目标语言的句子。经过 Tokenization 后变为 (batch_size, seq_len)。这里需要特别注意:由于输入是英语,输出是法语或德语,因此输入和输出使用的是完全不同的词表和分词器。 接下来的流程和 Encoder 端类似。经过 Output Embedding 和 Positional Encoding 后,数据维度变为 (batch_size, seq_len, d_model)。 然后数据进入 6 层堆叠的 Decoder 层。每一层 Decoder 包含三个子模块:首先是 Masked Self-Attention,它会遮蔽未来的信息,防止模型在预测当前词时"偷看"后面的词;然后是 Cross-Attention,这里 Decoder 会与 Encoder 的输出进行交互;最后是 Feed-Forward Network。
阅读全文