Transformer架构解析:从自注意力机制到大语言模型核心原理
1. 先搞清楚 Transformer 到底解决了什么问题如果你在 2017 年之前接触过自然语言处理比如机器翻译或者文本生成那你大概率用过 RNN循环神经网络或者 LSTM长短期记忆网络。这类模型有个天生的“短板”它们必须按顺序处理输入序列。想象一下你要翻译一个句子RNN 得一个字一个字地“读”完才能理解整个句子的意思。这个过程不仅慢而且当句子很长时模型很容易“忘记”开头的内容这就是所谓的“长距离依赖”问题。Transformer 的出现就是为了彻底解决这个“顺序处理”的瓶颈。它的核心思想是“注意力就是一切”。它不再强迫模型按顺序处理数据而是让模型能够同时看到输入序列的所有部分并动态地决定在生成每个输出时应该“关注”输入序列的哪些部分。这带来了几个革命性的变化并行化训练因为不再有顺序依赖模型的所有计算都可以并行进行这极大地利用了 GPU 等硬件的计算能力训练速度大幅提升。更强的长距离建模能力自注意力机制让模型可以直接计算序列中任意两个位置之间的关系无论它们相隔多远。统一的架构Transformer 的编码器-解码器结构非常清晰和模块化使其不仅适用于翻译还能轻松适配到各种序列到序列的任务甚至催生了纯编码器如 BERT和纯解码器如 GPT的变体成为当今大语言模型的基石。所以Transformer 不是一个简单的模型改进而是一种架构范式的转变。它让模型处理序列数据的方式从“串行阅读”变成了“并行全局审视”。2. 核心组件拆解从词到向量的旅程要理解 Transformer 如何工作我们需要把它拆开看看数据是如何流经这个“黑箱”的。整个过程可以看作是将离散的文本符号转化为连续的向量表示再经过多层信息混合最终变回我们想要的符号比如另一种语言的词的过程。2.1 第一步文本的“数字化”——分词与嵌入模型不能直接理解文字。第一步是分词把句子拆成模型能认识的基本单位Token。例如“我爱北京天安门”可能被分词为[“我”, “爱”, “北京”, “天安门”]。每个 Token 会被映射成一个唯一的整数 ID。接下来是嵌入。每个整数 ID 会通过一个可学习的查找表被转换成一个固定长度的稠密向量。这个向量就是该 Token 的初始表示。你可以把它想象成给每个词分配了一个在高维空间中的“坐标”语义相近的词其坐标在空间中也应该比较接近。但这里有个问题嵌入向量本身不包含这个词在句子中的位置信息。“苹果”在句首和句尾意思可能完全不同。因此我们需要引入位置编码。2.2 第二步告诉模型“顺序”——位置编码Transformer 没有 RNN 那样的循环结构所以必须显式地告诉模型每个 Token 在序列中的位置。原始论文使用了一种巧妙的正弦和余弦函数来生成位置编码向量然后把它加到对应的词嵌入向量上。这种编码方式有一个很好的数学性质对于任意一个固定偏移量 k位置pos k的编码可以由位置pos的编码通过一个线性变换得到。这使得模型能够轻松地学习到相对位置关系。注意现在很多模型如 GPT、LLaMA使用更先进的RoPE旋转位置编码它在注意力计算中直接融入相对位置信息效果更好且能更好地外推到更长的序列。至此我们得到了一个序列的矩阵表示其中每一行是一个 Token 的“词嵌入位置编码”向量。这个矩阵将被送入 Transformer 的核心——注意力层。3. 自注意力机制模型如何“聚焦”这是 Transformer 最核心、也最需要理解的部分。自注意力机制让模型能够为序列中的每个位置计算一个“上下文感知”的表示。3.1 查询、键、值的类比可以把自注意力想象成一个信息检索系统查询当前 Token 提出的问题“我应该关注谁”键序列中每个 Token 的“标签”用于匹配查询。值序列中每个 Token 携带的“信息内容”。对于输入序列中的每个 Token我们通过三个不同的可学习权重矩阵将其向量分别投影成查询向量、键向量和值向量。3.2 计算注意力分数和加权和接下来对于位置i的查询向量我们会计算它与序列中所有位置包括它自己的键向量的点积。这个点积分数经过缩放除以键向量维度的平方根为了稳定梯度和 Softmax 归一化后就得到了一个注意力权重分布。这个权重分布决定了在计算位置i的新表示时应该从每个位置的“值”向量中汲取多少信息。最后位置i的新输出就是所有值向量的加权和。用公式表示单头注意力就是Attention(Q, K, V) softmax(QK^T / sqrt(d_k)) V其中Q,K,V分别是查询、键、值矩阵d_k是键向量的维度。为什么有效通过这种方式模型可以动态地、灵活地为每个 Token 构建一个表示这个表示融合了全局信息。例如在翻译“The animal didn’t cross the street because it was too tired”时模型在生成“it”时会赋予“animal”很高的注意力权重从而知道“it”指代的是“animal”。3.3 多头注意力多视角观察只做一次上述的注意力计算模型可能只学到一种类型的依赖关系比如指代关系。为了让模型同时关注来自不同表示子空间的信息Transformer 采用了多头注意力。具体做法是将查询、键、值向量在特征维度上切分成h个头每个头独立进行上述的注意力计算。最后将h个头的输出拼接起来再通过一个线性投影层得到最终的多头注意力输出。这相当于让模型拥有了h套并行的“检索系统”每套系统可能专注于捕捉不同方面的关系如语法结构、语义关联、指代关系等。在 GPT-3 中h可以达到 96 甚至更多。4. 前馈网络与残差连接信息的加工与流通注意力层的输出并不是直接传递给下一层。每个注意力子层或解码器中的交叉注意力子层后面都跟着一个前馈神经网络。4.1 前馈网络的作用这个 FFN 是一个简单的两层全连接网络通常中间层的维度是嵌入维度的 4 倍例如嵌入维度 768中间层就是 3072并使用 ReLU或 GELU、SwiGLU 等激活函数。它的作用是对注意力层提取的、经过混合的信息进行进一步的非线性变换和加工。你可以把它看作每个位置的“私人处理器”独立地处理该位置整合后的信息。4.2 残差连接与层归一化训练稳定的关键Transformer 的另一个关键设计是残差连接和层归一化。残差连接将子层如注意力层或 FFN 层的输入直接加到其输出上。即输出 LayerNorm(输入 子层(输入))。这解决了深度网络中的梯度消失问题让信息可以跨层直接流动使得训练非常深的网络成为可能。层归一化对每个样本的所有特征进行归一化使其均值为0方差为1。这有助于稳定训练过程加速收敛。这里有一个重要的演进原始 Transformer 使用的是Post-LN即LayerNorm(x Sublayer(x))。但后来大家发现Pre-LN即x Sublayer(LayerNorm(x))更容易训练不需要复杂的学习率预热策略成为了现在的主流。在 Pre-LN 中归一化在子层计算之前进行使得子层的输入更加稳定。5. 编码器与解码器分工与协作标准的 Transformer 遵循编码器-解码器架构但如今纯解码器模型如 GPT更为流行。理解两者的区别至关重要。5.1 编码器理解输入编码器由 N 个原论文是 6 个相同的层堆叠而成。每一层都包含一个多头自注意力子层和一个前馈网络子层每个子层周围都有残差连接和层归一化。编码器的任务是双向地理解整个输入序列。在自注意力中每个 Token 都可以关注到输入序列中的所有其他 Token包括前后的 Token因此编码器输出的每个位置向量都包含了整个输入序列的上下文信息。BERT 就是典型的纯编码器模型它通过“完形填空”掩码语言模型任务进行预训练擅长做理解类任务如文本分类、命名实体识别、阅读理解等。5.2 解码器生成输出解码器也由 N 个相同的层堆叠而成。但每一层包含三个子层掩码多头自注意力层这是关键区别。为了防止在训练时“偷看”未来的答案解码器在计算自注意力时使用了因果掩码。这意味着在生成第t个 Token 时它只能关注到第1到t-1个已经生成的 Token。这保证了生成过程的自回归特性。多头交叉注意力层这一层连接编码器和解码器。它的查询来自解码器上一层的输出而键和值来自编码器的最终输出。这样解码器在生成每一个 Token 时都能有选择地“参考”输入序列的信息。前馈网络层与编码器中的相同。解码器的最终输出会通过一个线性层和一个Softmax层映射回词汇表得到下一个 Token 的概率分布。我们根据这个分布通常使用采样或贪婪搜索选择下一个 Token并将其作为输入反馈给解码器循环此过程直至生成结束。GPT 系列是纯解码器模型它没有编码器因此也没有交叉注意力层。它的每一层只有掩码自注意力和前馈网络。它通过预测下一个词的任务进行训练非常擅长文本生成。6. 从原理到实践关键训练与推理技巧理解了架构我们来看看在实际训练和使用 Transformer 时有哪些至关重要的工程细节。6.1 训练稳定性学习率预热与梯度裁剪原始 Transformer 论文提到训练初期使用一个较小的学习率然后线性增加到预设值之后再衰减这个过程叫学习率预热。这是因为模型参数初始随机直接使用大学习率可能导致训练不稳定。预热让模型先“摸索”到一个相对平滑的损失曲面区域。此外梯度裁剪也是常用技巧防止梯度爆炸。6.2 预训练与微调范式如今大规模 Transformer 模型几乎都遵循“预训练-微调”范式预训练在海量无标注文本数据上通过自监督任务如掩码语言模型、下一句预测、下一个词预测训练模型让模型学会语言的通用规律和世界知识。这一步消耗巨量算力。微调在特定的、标注数据相对较少的下游任务如情感分析、问答上用较小的学习率继续训练模型使其适应具体任务。6.3 推理加速KV 缓存与投机采样在自回归生成时如 GPT 生成文本模型需要一遍又一遍地处理已经生成的历史 Token计算它们的键和值向量这是巨大的浪费。KV 缓存在生成第t个 Token 时将前t-1个 Token 计算好的键和值向量缓存起来。生成第t1个 Token 时只需为新 Token 计算其查询向量并与缓存中的所有历史键值向量计算注意力即可。这能极大减少计算量。投机采样用一个更小、更快的“草稿模型”一次性生成多个候选 Token然后用原始大模型快速验证这些候选 Token。如果验证通过就一次性接受多个 Token如果某个 Token 被拒绝则丢弃后面的由大模型重新生成。这相当于用大模型的计算量换取了更快的生成速度。6.4 高效注意力FlashAttention标准的注意力计算需要将QK^T的中间矩阵大小为序列长度 × 序列长度存储到 GPU 显存中这对于长序列如 32K、128K是巨大的负担。FlashAttention是一种 IO 感知的精确注意力算法。它通过巧妙的切块和重计算技术在 GPU 的各级存储HBM、SRAM间高效调度数据避免了中间矩阵的显式存储从而实现了更快的速度和更低的内存占用是支持长上下文模型的关键技术之一。7. 超越文本Transformer 的多模态演进Transformer 的威力不止于文本。其核心——注意力机制——是一种通用的关系建模工具。只要能将数据转化为序列形式就能用 Transformer 处理。Vision Transformer将图像分割成固定大小的图像块每个图像块线性投影为一个向量加上位置编码后就变成了一个“视觉词”序列。然后就可以像处理文本一样用 Transformer 编码器进行处理。ViT 证明了在足够多的数据上纯 Transformer 在图像分类上可以超越传统的 CNN。音频处理将音频信号转换为频谱图一种时间-频率图像然后像 ViT 一样切块、嵌入送入 Transformer。Whisper 等模型就采用此架构。多模态模型如 LLaVA、GPT-4V通常有一个视觉编码器如 ViT将图像编码为向量序列一个文本编码器处理文本然后将两者的表示进行对齐和融合最后由一个文本解码器生成回答。8. 总结与核心要点回顾Transformer 的成功并非偶然它通过几个简洁而强大的设计解决了序列建模的根本问题自注意力机制实现了全局、动态的信息交互打破了序列的顺序依赖为并行计算铺平道路。位置编码以可学习或固定的方式为模型注入顺序信息弥补了注意力机制本身的无序性。残差连接与层归一化保证了超深网络的稳定训练是模型能够堆叠数十甚至数百层的基础。模块化架构编码器-解码器的清晰划分以及纯编码器、纯解码器的变体使其能够灵活适配各种任务范式。当你去读代码比如 Hugging Face 的 Transformers 库或自己实现一个简易 Transformer 时把握住这条主线文本 - 分词 - 嵌入位置编码 - (多头自/交叉)注意力 - 加残差归一化 - 前馈网络 - 循环N层 - 线性投影 - 输出概率。每个模块都有明确的分工组合起来便构成了这个驱动现代 AI 发展的强大引擎。理解 Transformer不仅是理解一个模型更是理解当前这一波 AI 浪潮背后的核心计算范式。从 BERT 到 GPT从 ViT 到 Whisper其内核都闪烁着 2017 年那篇论文中“Attention is All You Need”的思想光芒。