【大语言模型学习】一文彻底搞懂Transformer:从输入到输出,拆解大模型的核心引擎

【大语言模型学习】一文彻底搞懂Transformer:从输入到输出,拆解大模型的核心引擎 如今我们熟知的 GPT、Llama、Gemini 等一众大语言模型其核心骨架都离不开 2017 年《Attention is All You Need》论文中提出的Transformer 架构。它不仅彻底改写了自然语言处理的发展路径更将影响力延伸到了图像、音频、蛋白质结构预测甚至游戏 AI 等众多领域成为现代人工智能的基石技术。很多人觉得 Transformer 原理晦涩、公式复杂但其实把它拆解开来每一步的逻辑都清晰可追溯。本文我们就以经典的 GPT-2小型版1.24 亿参数为样本从输入一句文本到生成下一个单词完整走通 Transformer 的全流程带你吃透每一个核心组件的作用与原理。一、先搞懂Transformer 到底是什么Transformer 本质上是一种基于自注意力机制的神经网络架构它最核心的突破是解决了传统循环神经网络RNN/LSTM的两大痛点长距离依赖捕捉能力弱处理长文本时开头的信息很容易在逐层传递中丢失无法并行计算必须等前一个词处理完才能处理下一个词训练效率极低。而自注意力机制让模型可以同时关注整个序列的所有词直接计算任意两个词之间的关联既精准捕捉了长距离的语义关系又支持高度并行化为大模型的规模化训练打下了基础。对于文本生成类 Transformer比如 GPT 系列属于 Decoder-only 架构来说它的核心任务非常朴素 ——下一词预测Next-token Prediction给定一段输入文本预测接下来概率最高的下一个词元token可以是一个完整单词也可以是单词的一部分。我们之所以选 GPT-2 小型版作为入门样本是因为它虽然参数规模不大但具备了现代主流大模型所有的核心架构组件与设计原理是理解 Transformer 的绝佳切入点。二、全局概览生成一个词Transformer 要走几步完整的文本生成 Transformer从输入到输出可以分为三大核心阶段对应三类核心组件嵌入层Embedding把人类可读的文本转换成模型能计算的数值向量Transformer 块Transformer Block堆叠模型的核心计算单元通常由多层堆叠而成每层都通过「多头自注意力 前馈神经网络」对特征进行提炼加工输出层把处理完成的特征向量转换成词表上的概率分布最终采样生成下一个 token。接下来我们就顺着这个流程一步步拆解每一层的工作细节。三、第一步文本怎么变成模型能懂的数字—— 嵌入层详解我们以输入提示语Data visualization empowers users to为例看看一句普通的英文文本是如何一步步变成模型可以运算的向量的。嵌入层的处理分为四步分词 → 词嵌入 → 位置编码 → 融合得到最终嵌入。Step 1分词Tokenization模型没法直接处理文字所以第一步要把文本拆分成最小的处理单元 ——词元token每个 token 对应一个唯一的数字 ID。token 可以是一个完整单词比如Data、visualization也可以是一个子词 / 词根比如empowers会被拆成em和powers两个 token。采用子词分词的好处是可以用有限的词表覆盖绝大多数文本同时解决生僻词、新词的表示问题。GPT-2 的词表大小固定为 50257 个唯一 token词表在模型训练前就已经确定。经过分词后我们的示例句子就变成了一串有序的 token ID 序列。Step 2词嵌入Token Embedding拿到 token ID 后我们需要把每个 ID 转换成一个向量这个过程就是词嵌入。在 GPT-2 小型版中每个 token 会被表示为一个768 维的向量所有 token 的向量都存储在一个形状为(50257, 768)的嵌入矩阵中这个矩阵包含约 3900 万个可训练参数。这个矩阵不是人为设定的而是模型在大规模语料训练中逐步学习得到的语义、用法相近的 token在高维空间中的向量距离会更近语义差异大的 token距离则更远。简单来说词嵌入的作用就是给每个 token 赋予了可计算的语义信息。Step 3位置编码Positional Encoding这里有一个关键问题自注意力机制本身是不识别顺序的 —— 把句子里的词打乱顺序自注意力的计算结果不会变。但语言是有严格语序的语序变了语义可能完全不同。因此我们需要给每个 token 的向量里加入位置信息这就是位置编码的作用。不同模型实现位置编码的方式不同GPT-2 采用的是可学习的位置编码从零开始训练一个位置编码矩阵每个位置第 0 位、第 1 位…… 第 n 位对应一个 768 维的向量和词嵌入维度完全一致。随着模型训练位置编码会自动学习到不同位置的语义规律。Step 4最终嵌入Final Embedding最后一步非常简单把每个 token 的词嵌入向量和它对应的位置编码向量逐元素相加就得到了最终的输入嵌入向量。这个融合后的向量同时包含了 token 本身的语义信息以及它在句子中的位置信息。到这里文本就完成了从 “人类语言” 到 “模型可计算向量” 的转换接下来就要送入 Transformer 块进行深度特征提取了。四、核心中的核心Transformer Block 到底在做什么Transformer 块是模型的基础计算单元GPT-2 小型版一共堆叠了12 层完全同构的 Transformer 块。token 的特征向量会从第一层开始逐层被加工、提炼从浅层的字面特征逐步演化出深层的句法、语义、逻辑特征。每个 Transformer 块都由两个核心模块组成多头自注意力Multi-Head Self-Attention负责让 token 之间交换信息捕捉上下文关联多层感知机MLP负责对每个 token 单独做特征变换提升模型的表达能力。同时每个模块都搭配了层归一化Layer Normalization和残差连接Residual Connections保障深度网络可以稳定训练。4.1 多头自注意力让每个词 “看见” 整个上下文自注意力是 Transformer 的灵魂它的本质可以用一句话概括计算当前 token 和序列中所有 token 的关联程度再用这个关联度作为权重把所有 token 的信息融合起来更新当前 token 的特征表示。而 “多头” 的意义是让模型可以从多个不同视角捕捉关联比如有的头关注语法搭配关系有的头关注指代关系有的头关注语义相似性并行学习多种不同的特征模式。下面我们拆解多头自注意力的完整四步计算流程。Step 1生成 Q、K、V 三个向量首先每个 token 的输入向量会分别和三个可训练的权重矩阵相乘得到三个不同的向量Query查询向量Q相当于你在搜索引擎里输入的搜索词代表 “当前 token 想要获取什么信息”Key键向量K相当于搜索结果里的网页标题代表 “每个 token 自身包含什么类型的信息”Value值向量V相当于网页的具体正文内容代表 “每个 token 自身的具体信息内容”。后续我们通过计算 Q 和 K 的匹配程度就能得到注意力权重再用权重去加权 V就能得到融合了所有上下文信息的新特征。Step 2多头拆分接下来我们把 Q、K、V 三个向量沿着特征维度拆分成多份对应多个注意力头。在 GPT-2 小型版中一共有 12 个注意力头因此每个头会分到 768 ÷ 12 64 维的特征。拆分后每个头会独立进行自注意力计算互不干扰。这种设计让模型可以并行捕捉不同类型的上下文关系大幅提升了特征表达能力。Step 3掩码自注意力Masked Self-Attention这一步是自注意力的核心计算环节。对于文本生成模型来说有一个必须遵守的规则预测第 n 个 token 的时候绝对不能看到第 n 个及之后的 token—— 因为那些是还没生成的 “未来信息”如果提前看到了就相当于考试作弊了。因此我们需要给自注意力加上 “掩码”屏蔽掉未来的 token 信息这就是 “掩码自注意力” 的由来。具体计算分为四小步点积计算注意力分数用 Query 矩阵和 Key 矩阵的转置做点积得到一个方形的注意力分数矩阵。如果输入有 6 个 token就会得到 6×6 的矩阵矩阵里的每个数值代表对应两个 token 的关联程度。缩放处理把点积结果除以一个缩放因子√d_kd_k 是每个头的特征维度这里是 64。这么做是为了防止点积结果数值过大导致后续 Softmax 之后梯度变得极小影响模型训练。掩码Mask给注意力矩阵的上三角区域也就是当前 token 右侧的所有位置全部赋值为负无穷。这样在后续 Softmax 计算后这些位置的概率会趋近于 0相当于模型完全不会关注未来的 token保证了生成逻辑的合理性。Softmax Dropout对矩阵的每一行分别做 Softmax 运算把注意力分数转换成 0~1 之间的概率值且每一行的概率之和为 1。这一行的数值就代表当前 token 对序列中每个 token 的注意力权重。之后可以加入 Dropout 做正则化随机失活一部分权重防止模型过拟合。Step 4输出拼接与线性投影每个注意力头都完成计算后我们把 12 个头的输出结果拼接起来重新恢复成 768 维的向量和输入维度保持一致。最后再经过一个线性投影层做一次特征变换就得到了整个多头自注意力模块的最终输出。4.2 MLP 层给每个词单独升级特征经过自注意力层token 之间已经完成了信息交换接下来的 MLP 层会对每个 token 的特征单独做深度加工。和自注意力不同MLP 层完全不涉及 token 之间的交互每个 token 的处理完全独立因此可以高度并行计算。MLP 的结构非常简单两次线性变换中间夹一个 GELU 激活函数第一次线性层升维把输入的 768 维特征扩展到 3072 维正好是 4 倍。升维的意义是把特征映射到更高维的空间中从而捕捉到低维空间里无法识别的、更丰富复杂的非线性模式。GELU 激活函数给模型引入非线性能力。如果没有激活函数无论多少层线性变换都等价于一层模型根本学不到复杂的语言规律。第二次线性层降维把 3072 维的特征再压缩回 768 维。这一步既把特征维度恢复到了和输入一致的大小方便接入下一层 Transformer 块也保留了升维阶段学到的有效高阶特征。简单来说自注意力负责 “让词和词交流”MLP 负责 “让每个词自己消化信息”二者交替配合逐层提炼就构成了 Transformer 块的核心逻辑。4.3 不能忽略的辅助组件残差连接 层归一化如果只有自注意力和 MLP十几层的深度网络根本没法正常训练 —— 会出现严重的梯度消失问题浅层网络完全得不到更新。这两个辅助组件就是深度网络的 “训练保障”。残差连接Residual Connections残差连接的设计非常简单把模块的输入直接加到模块的输出上相当于给梯度开了一条 “高速公路”。它解决的核心问题是梯度消失反向传播时梯度可以通过残差连接直接传回浅层网络不会因为层层相乘而变得无限小保证了浅层网络也能得到有效更新。在每个 Transformer 块里残差连接会出现两次一次在自注意力模块之后一次在 MLP 模块之后。层归一化Layer Normalization层归一化的作用是对每一层的输入在特征维度上做归一化处理让特征的均值为 0、方差为 1。它解决的是内部协变量偏移问题深度网络训练时每层输入的分布会不断变化导致模型很难收敛。归一化后输入分布保持稳定模型训练会更平稳收敛速度也更快同时降低了对初始权重的敏感度。GPT-2 采用的是 Pre-LN 结构层归一化放在自注意力和 MLP 的输入端也就是先做归一化再进模块计算。每个 Transformer 块里会用两次层归一化。五、最后一步怎么从向量变成下一个词经过 12 层 Transformer 块的层层处理后我们就得到了每个 token 最终的 768 维特征向量。接下来就要用最后一个位置的特征向量来预测下一个 token 是什么。这个过程分为三步映射 logits → Softmax 转概率 → 采样生成。1. 线性层映射到词表维度首先通过一个最终的线性层把 768 维的特征向量映射成和词表大小一致的 50257 维向量。向量里的每个数值对应词表里一个 token 的logit对数几率可以理解为这个 token 成为下一个词的 “得分”得分越高可能性越大。2. Softmax 转换为概率分布对 50257 个 logit 值做 Softmax 运算把它们全部转换成 0~1 之间的概率值且所有 token 的概率加起来等于 1。这样我们就得到了整个词表上的概率分布每个 token 都有明确的出现概率。3. 采样生成下一个 token最后一步就是从这个概率分布里采样出一个 token作为本次生成的结果。注意通常不会直接选概率最高的那个 —— 那样生成的内容会非常生硬、重复缺乏多样性。我们可以通过三个关键参数精准控制生成的风格在 “确定性” 和 “多样性” 之间找到平衡温度Temperature温度是最核心的采样控制参数原理很简单把所有 logit 都除以温度值再做 Softmax。温度 1不对原始概率做任何调整保持模型原本的输出分布。温度 1相当于放大了得分的差距概率分布会变得更陡峭。高分 token 的概率会进一步提升低分 token 的概率会更低。最终生成结果更确定、更保守也更容易出现重复。温度 1相当于缩小了得分的差距概率分布会变得更平缓。低分 token 也有了被选中的机会生成结果更随机、更有 “创造性”但也更容易出现逻辑错误和胡说八道。Top-K 采样Top-K 的逻辑非常直接只保留概率最高的前 K 个 token 作为候选把剩下所有 token 的概率置零再重新归一化后采样。它的作用是过滤掉那些概率极低的、完全不合理的选项保证生成内容的基本合理性。Top-P 采样核采样Top-P 是比 Top-K 更灵活的采样策略从概率最高的 token 开始往下累加直到累积概率超过设定的阈值 P就取这最小的一批 token 作为候选集合。它的好处是自适应当概率分布很集中时候选 token 数量很少当概率分布很分散时候选 token 数量会自动变多既保证了合理性又兼顾了多样性。生成完这个 token 之后我们把它加到输入文本的末尾再重复一遍从嵌入层到输出层的全部流程就能生成再下一个 token。如此循环往复就能生成一整段连贯的文本。六、动手加深理解交互式学习工具 Transformer Explainer纯理论看完难免觉得抽象这里给大家推荐一个绝佳的学习工具 ——Transformer Explainer它是一个开源的交互式可视化工具可以直接在浏览器里运行完整的 GPT-2 小型模型所有计算过程都是实时、可追溯的。用它你可以亲手验证上面学到的所有知识点自定义输入文本输入任意句子全程跟踪从分词、嵌入到每一层注意力计算、再到最终概率分布的完整流程每个中间步骤的数值都清晰可见。实时调节采样参数拖动温度滑块或者切换 Top-K/Top-P 采样实时观察概率分布的变化直观感受参数对生成结果的影响。交互注意力热力图鼠标悬停在任意 token 上就能高亮显示它对其他 token 的注意力权重直观看到模型是如何捕捉上下文关联的不同注意力头关注的模式有什么区别。在线体验工具https://poloclub.github.io/transformer-explainer/研究论文地址https://arxiv.org/abs/2408.04619官方演示视频https://www.youtube.com/watch?vECR4oAwocjs开源代码仓库https://github.com/poloclub/transformer-explainer七、回顾完整流程到这里Transformer 的完整工作流程就全部拆解完了。我们最后再梳理一遍全链路把所有知识点串起来输入文本 → 分词得到 token ID 序列 → 词嵌入 位置编码得到初始输入向量 → 进入第 1 层 Transformer 块层归一化 → 多头掩码自注意力 → 残差连接 → 层归一化 → MLP → 残差连接 → 依次经过全部 12 层 Transformer 块 → 最终位置的特征向量 → 线性层映射为词表 logits → Softmax 得到概率分布 → 采样生成下一个 tokenTransformer 之所以能成为 AI 时代的基石本质上是因为自注意力机制找到了一种高效、通用的信息融合方式它既能精准捕捉长距离的依赖关系又能支持高度并行计算而且这套逻辑不仅适用于文本还能轻易迁移到图像、音频等几乎所有模态的数据上。