在线咨询 400-826-1668
回到顶部
ARTICLE DETAIL

资讯详情

深耕国风建站与运营引流的一线实战洞察。

深入解析Transformer:从词嵌入到注意力机制,揭秘LLM如何预测下一个词

深入解析Transformer:从词嵌入到注意力机制,揭秘LLM如何预测下一个词 1. 从“猜词游戏”到“概率大师”LLM预测的直觉与本质我们每天都在玩一个大型的“猜词游戏”。当我说“今天天气真...”你脑海里大概率会蹦出“好”、“不错”、“热”或者“糟糕”。这个看似简单的填空背后是我们大脑基于海量语言经验进行的概率预测。大型语言模型LLM做的本质上就是这件事只不过它把这个游戏玩到了极致用数学和工程的手段将“语感”量化成了万亿级别的参数。但LLM的预测远比我们直觉上的“联想”要复杂和精密。它不是一个简单的“近义词查找”或“固定搭配”数据库。当你输入“Transformer模型的核心是”时模型不会去“回忆”某本教科书上的标准答案而是基于它“吃”进去的所有互联网文本、书籍、代码计算出在当前位置下一个词是“注意力”的概率可能是35%是“自注意力”的概率是28%是“编码器”的概率是15%……最终它可能选择概率最高的那个或者以某种方式从高概率候选词中抽样生成“注意力机制”这个结果。这个过程的核心引擎就是Transformer架构。今天我们不满足于知道LLM“能”预测我们要钻进去看看它究竟“如何”预测。我们将深入Transformer的内部拆解从你输入一个句子开始到模型吐出一个词为止中间究竟发生了哪些精密的计算与决策。你会发现这不仅仅是一个技术黑箱更是一套设计精巧的、用于捕捉和运用语言统计规律的数学机器。2. 预测的起点从离散符号到连续空间的“词嵌入”在人类看来单词“apple”和“苹果”指的是同一个东西但计算机最初只认识0和1。让模型理解词义并预测第一步是给每个词找一个合适的“数学替身”。2.1 独热编码的困境与嵌入的诞生最朴素的方法叫“独热编码”One-Hot Encoding。假设我们的词汇表有5万个词“猫”这个词就被表示成一个长度为5万的向量只有在“猫”对应的那个位置是1其他所有位置都是0。这种方法简单粗暴但问题极大它假设所有词之间都是完全独立、距离相等的无法表达“猫”和“狗”在语义上比“猫”和“哲学”更接近这一事实。这就像给世界上每个人分配一个唯一的ID号仅从ID号你看不出任何人的亲缘、地缘或社会关系。词嵌入Word Embedding技术解决了这个问题。它的核心思想是把一个词映射到一个低维、稠密的实数向量空间中比如512维并且让语义相近的词在这个空间中的向量位置也接近。这个向量就是词的“嵌入”。例如经过训练后“国王”的向量减去“男人”的向量再加上“女人”的向量其结果会非常接近“女王”的向量。这种向量运算捕捉到了“性别”和“王室”的语义关系。在Transformer中这个步骤通过一个可学习的“嵌入矩阵”实现。假设我们的词表大小是vocab_size嵌入维度是d_model。这个嵌入矩阵W_embed的形状就是[vocab_size, d_model]。当我们输入一个词的索引比如“猫”的索引是1024模型就通过查表操作取出W_embed矩阵的第1024行这个长度为d_model的向量就是“猫”的词嵌入。注意这里的“可学习”是关键。在模型训练过程中W_embed矩阵中的数值会不断被调整。最初它们是随机初始化的随着模型在大量文本上学习预测下一个词的任务那些经常在相似上下文中出现的词它们的嵌入向量会在空间中被“推”到相近的位置。因此嵌入向量最终编码了从数据中学到的语义和语法信息。2.2 位置编码为词序注入“时空感”词嵌入解决了“词是什么”的问题但语言中词序至关重要。“猫追老鼠”和“老鼠追猫”天差地别。经典的RNN通过递归处理序列来隐含地编码位置信息但Transformer是并行处理所有输入词的它本身不具备感知词序的能力。因此必须显式地告诉模型每个词在序列中的位置。这就是位置编码Positional Encoding的用武之地。Transformer论文中使用了一种基于正弦和余弦函数的固定编码方式。对于序列中位置为pos的词其嵌入向量的第i个维度会加上一个由pos和i计算出的值PE(pos, 2i) sin(pos / 10000^(2i/d_model))PE(pos, 2i1) cos(pos / 10000^(2i/d_model))为什么用这种看起来有点奇怪的函数它有几个精妙的性质唯一性每个位置都有独一无二的编码。相对位置可学习对于固定的偏移量kPE(posk)可以表示为PE(pos)的线性函数这意味着模型可以相对容易地学会关注“相对位置”关系。值域有界正弦余弦函数的值域在[-1, 1]之间与归一化后的词嵌入尺度匹配便于模型处理。在实际操作中我们生成一个形状为[max_seq_length, d_model]的位置编码矩阵然后将其与词嵌入矩阵逐元素相加。这样输入模型的每个词向量都同时包含了“我是谁”语义和“我在哪”位置的信息。经过嵌入和位置编码原本离散的、孤立的单词序列就被转化成了一个连续的、富含信息的矩阵准备好了进入Transformer的核心——注意力层。3. 预测的核心引擎多头注意力如何计算“关联度”如果说嵌入层是为模型准备了原材料那么注意力机制就是烹饪的核心工艺。它的任务非常明确在当前要预测的位置衡量序列中所有已知词包括已生成的词的重要性并据此聚合信息。你可以把它想象成在写作时不断回顾前文决定哪一段历史描述、哪一个角色设定对接下来写什么最有参考价值。3.1 自注意力机制的三步分解自注意力机制的计算可以清晰地分为三步生成Query、Key、Value计算注意力分数加权求和。第一步生成Q, K, V对于输入序列的每个词向量我们通过三个不同的可学习线性变换矩阵W_Q,W_K,W_V将其分别投影到三个空间得到Query查询、Key键和Value值向量。Query (Q)代表当前词或位置“想要寻找什么”。在预测下一个词时当前解码位置的Query尤为重要它负责去“询问”上下文。Key (K)代表每个词“拥有什么特征”用于被Query匹配。Value (V)代表每个词“实际提供的信息内容”在匹配成功后将被提取出来。假设输入矩阵X的形状是[seq_len, d_model]那么Q X * W_Q,K X * W_K,V X * W_V通常为了后续计算效率和多头注意力我们会将d_model的维度平均分给多个“头”因此每个头的Q、K、V维度会变小例如[seq_len, d_model/num_heads]。第二步计算注意力分数关联度这是最关键的一步计算当前Query与所有Key的匹配程度。最常用的方法是计算点积Dot-Product注意力分数 Q * K^T / sqrt(d_k)这里d_k是Key向量的维度。点积越大说明Query和Key的向量方向越相似关联度越高。除以sqrt(d_k)是一个重要的缩放操作目的是在d_k较大时防止点积结果过大导致经过Softmax后的梯度变得非常小梯度消失问题。第三步Softmax与加权求和将上一步得到的注意力分数矩阵形状[seq_len, seq_len]的每一行对应一个Query进行Softmax归一化使得该行所有分数之和为1每个分数转化为一个0到1之间的权重。这个权重就精确量化了“在回答当前Query时每个位置的信息有多重要”。最后用这些权重对Value向量进行加权求和注意力输出 Softmax( Q * K^T / sqrt(d_k) ) * V这个输出矩阵的每一行都是基于全局上下文信息聚合后的新向量表示。对于要预测下一个词的那个位置它的输出向量已经浓缩了前文中所有相关词的信息。3.2 多头注意力的价值并行化的“多角度思考”为什么需要“多头”单一套W_Q, W_K, W_V矩阵学习到的是一种固定的关联模式。多头注意力并行地使用多套不同的投影矩阵相当于让模型同时从多个不同的“表示子空间”或“理解角度”去计算关联性。例如一个头可能专门学习语法结构上的依赖如主语-谓语关系另一个头可能学习语义上的共现如“煎”和“牛排”再一个头可能学习指代关系如“它”指代前文的某个名词。每个头独立计算自己的注意力输出最后将所有头的输出拼接起来再经过一个线性投影W_O融合得到最终的多头注意力输出。这种设计极大地增强了模型的表达能力。在预测下一个词时模型可以同时考虑“从语法上看这里应该是个动词”头1“从语义上看和前面的‘厨房’、‘香味’最搭配的词是‘飘来’”头2“从指代上看‘他’可能正在执行这个动作”头3。多角度的信息被综合起来使得预测更加精准和合理。3.3 掩码注意力预测时的“禁止剧透”规则在训练和生成时模型预测下一个词只能基于它已经“看到”的词。在标准的Transformer解码器中这通过“掩码注意力”实现。具体做法是在计算注意力分数矩阵后Softmax之前将一个未来位置即当前词之后的位置对应的分数加上一个极大的负值如-1e9。这样经过Softmax后未来位置的权重就会无限接近于零。例如在预测序列中第5个词时Query是第5个位置它只能与第1到第4个位置的Key计算有效分数第5个及之后的Key都被掩码掉了。这确保了模型在生成每一个词时都不会“偷看”未来的答案从而学会真正的自回归预测。4. 从注意力到概率前馈网络与输出层的临门一脚经过多头注意力层我们得到了一个富含上下文信息的向量表示。但这还不是最终的词概率。Transformer块中注意力层后面还会跟一个前馈神经网络Feed-Forward Network, FFN和残差连接、层归一化等操作它们共同作用进一步提炼信息。4.1 前馈网络的非线性变换FFN是一个简单的两层全连接网络通常中间有一个非线性激活函数如ReLU或GELUFFN(x) max(0, x * W1 b1) * W2 b2其中W1将维度从d_model映射到一个更大的中间维度d_ff通常是d_model的4倍W2再映射回d_model。为什么需要FFN注意力机制擅长捕捉元素间的关联但它对每个位置的处理本质上是线性的加权求和。FFN为每个位置独立地引入了一个非线性变换这使得模型能够学习更复杂、更抽象的特征组合。你可以理解为注意力决定了“关注哪些信息”而FFN决定了“如何加工这些被关注的信息”。对于预测任务FFN可能在学习诸如“当出现‘非常’这个词时后面跟形容词的概率远高于跟名词的概率”这类更复杂的、非直接的搭配模式。4.2 残差连接与层归一化训练稳定性的保障在深度网络中信息在层层传递中容易衰减或爆炸。Transformer采用了残差连接Residual Connection和层归一化Layer Normalization来缓解这个问题。残差连接将某一层的输入直接加到其输出上即输出 LayerNorm(输入 Sublayer(输入))。这确保了梯度可以更直接地反向传播缓解了梯度消失问题使得训练非常深的网络成为可能。层归一化对单个样本的所有特征维度进行归一化均值为0方差为1并引入可学习的缩放和偏移参数。这稳定了每层输入的分布加速了训练收敛。经过多个这样的Transformer块如12层、24层甚至更多的堆叠信息被一层层地抽象和整合。最终在最后一层Transformer块的输出端我们得到了序列最后一个位置即要预测的下一个词的位置的最终隐藏状态向量h_t其维度为d_model。4.3 线性投影与Softmax将向量转化为词表概率这是预测的最后一公里。h_t向量包含了模型对下一个词的全部“理解”但它还是一个连续的、高维的向量。我们需要将它映射回离散的词汇表空间。线性投影输出嵌入通过一个可学习的线性层W_output其形状为[d_model, vocab_size]将h_t投影到一个长度为vocab_size的向量logits上。logits h_t * W_output这个W_output矩阵有时会与输入端的词嵌入矩阵W_embed共享权重Tied Embeddings这是一种常见的正则化技术可以减少参数量并可能提升性能。Softmax归一化logits向量中的每个值对应词汇表中每个词的“未归一化分数”可以理解为原始得分。为了得到概率我们对其应用Softmax函数P(w_i | context) exp(logits_i) / sum(exp(logits_j)) for j in vocab这样我们就得到了一个概率分布其中每个值P(w_i)代表了在给定当前上下文的情况下下一个词是词汇表中第i个词的概率。至此模型完成了一次完整的“预测下一个词”的内部计算。它从离散的输入开始通过嵌入和位置编码进入连续空间经过多层注意力机制捕捉全局依赖再通过前馈网络进行非线性变换最后通过线性投影和Softmax将复杂的内部表示解码为一个具体的、覆盖整个词表的概率分布。5. 从概率到文本解码策略如何做出最终选择模型输出了一个概率分布比如“的”(0.15)、“是”(0.1)、“在”(0.08)、“吃”(0.07)…… 我们如何从这个分布中选出一个词作为最终的预测输出这并不是简单地永远选择概率最高的那个词贪婪搜索。不同的选择策略会极大影响生成文本的质量、多样性和创造性。5.1 贪婪搜索与束搜索确定性的选择贪婪搜索Greedy Search每次都选择概率最高的词。这种方法简单高效但问题也很明显它可能导致局部最优而非全局最优。比如第一个词选择了概率0.4的A放弃了概率0.39的B但可能从B开始的后续序列整体概率远高于从A开始的序列。这就像下棋只考虑下一步最优而不是通盘考虑。束搜索Beam Search一种启发式图搜索算法试图在每一步保留多个束宽beam_width例如4高概率的候选序列而不是只保留一个。在每一步它从所有候选序列的扩展中选出总概率最高的beam_width个继续。最终从完成的候选序列中选出总体概率最高或经过长度归一化的序列。束搜索在机器翻译等需要精确、连贯结果的任务中表现很好因为它在一定程度上进行了全局优化。然而无论是贪婪搜索还是束搜索它们都是确定性算法给定相同的输入输出总是相同的。这有时会导致生成文本过于保守、重复甚至呆板缺乏惊喜和多样性。5.2 随机抽样引入创造性与多样性为了让生成更像人类的创作我们引入随机性。核心思想是从概率分布中采样而不是只取最大值。纯随机抽样直接根据Softmax后的概率分布进行采样。概率为0.15的词被选中的机会就是15%。这种方法多样性最高但风险也最大可能选中一些概率很低、语义不通的词导致文本质量不稳定。温度采样Temperature Sampling这是最常用且有效的方法之一。在计算Softmax之前将logits向量除以一个温度参数Tscaled_logits logits / TT 1保持原分布不变。T 1概率分布被“平滑”高概率和低概率之间的差异变小采样更加随机、多样。0 T 1概率分布被“锐化”高概率词的权重更大采样更接近贪婪搜索更确定、更保守。 通过调节T我们可以在“创造性”和“可靠性”之间取得平衡。写诗歌、故事时可以用较高的T如0.8-1.2写代码、摘要时可以用较低的T如0.2-0.5。Top-k 和 Top-p (核) 采样这两种方法旨在限制采样范围避免从那些概率极低的“长尾”词中采样提高生成质量。Top-k采样只从概率最高的k个词构成的集合中采样。例如k50那么我们只考虑概率排名前50的词并在这个子集内重新计算概率分布后进行采样。Top-p采样核采样设定一个概率累计阈值p如0.9。我们将所有词按概率从高到低排序然后累加它们的概率直到累加和刚好超过p。只从这个动态大小的候选集合中采样。这种方法比Top-k更灵活因为它根据当前分布的形状动态调整候选词数量。在实际应用中Top-p采样如p0.9结合适中的温度如T0.8是目前许多对话和创意生成场景下的默认选择它能在保证一定多样性的同时有效避免生成低质量的词。6. 预测能力的源泉模型是如何被训练出来的我们剖析了模型在推理时如何预测下一个词。但模型这种惊人的预测能力从何而来答案在于大规模的无监督预训练。训练的目标就是让模型学会我们前面描述的那套“猜词”本领。6.1 核心训练目标下一个词预测语言建模训练数据是海量的纯文本如网页、书籍、代码。训练任务极其简单给定一个文本序列的前N个词上下文让模型预测第N1个词是什么。这被称为自监督学习因为标签就来自数据本身下一个词就是标签。具体来说对于一个文本序列[w1, w2, w3, ..., wT]我们会构造一系列训练样本输入:[w1] 标签:w2输入:[w1, w2] 标签:w3输入:[w1, w2, ..., wT-1] 标签:wT模型根据输入上下文输出一个对词汇表所有词的预测概率分布P_model。而真实的标签是一个“独热编码”向量只有目标词的位置为1。6.2 损失函数交叉熵损失我们使用交叉熵损失Cross-Entropy Loss来衡量模型预测分布P_model与真实分布独热编码之间的差距。对于单个样本损失计算为Loss -log( P_model(w_target) )其中P_model(w_target)是模型分配给真实目标词的概率。这个损失函数的意义很直观模型对正确答案赋予的概率越高损失就越低。如果模型100%确定正确答案损失为0如果模型认为正确答案概率很小损失就会很大取负对数后值很大。训练过程就是使用梯度下降等优化算法在数十亿甚至数万亿的样本上不断调整模型的所有参数包括嵌入矩阵、注意力层的Q/K/V矩阵、前馈网络权重等以最小化总的交叉熵损失。通过这个过程模型参数中逐渐编码了语言的统计规律哪些词经常一起出现共现信息什么样的词序是合理的语法信息以及更复杂的语义逻辑关系。6.3 训练中的工程挑战与技巧训练一个千亿参数级别的LLM是极其复杂的系统工程涉及众多技巧大规模分布式训练模型和训练数据都无法放在单台机器上需要使用成百上千张GPU进行并行训练涉及数据并行、模型并行、流水线并行等多种策略。混合精度训练使用FP16半精度浮点数进行前向和反向传播以节省显存和加速计算同时用FP32维护一份主权重副本用于更新以保持数值稳定性。学习率调度使用热身Warmup策略在训练初期从小学习率开始逐渐增大避免震荡后期再按计划衰减。梯度裁剪防止梯度爆炸将梯度向量的范数限制在一个阈值内。正是通过在海量数据上以“预测下一个词”这个简单目标进行如此大规模的优化Transformer模型才最终获得了令人惊叹的语言理解和生成能力。它学到的是一个压缩在参数中的、极其复杂的语言概率模型。7. 超越下一个词从预测到理解与创造的涌现当我们深入理解了“预测下一个词”这个微观机制后一个更宏观且有趣的问题浮现了为什么仅仅通过预测文本序列中的下一个词模型就能学会回答问题、编写代码、进行逻辑推理甚至表现出一定的创造性和常识这种复杂能力似乎并非直接设计在目标函数中。7.1 压缩与泛化知识在参数中的编码在训练过程中模型为了最小化预测下一个词的损失它必须构建一个关于世界的内部模型。例如为了准确预测“太阳从东边升起从西边___”的下一个词模型不仅需要记住“落下”这个搭配它最好能“理解”太阳运行的规律、方向的概念甚至地球自转的知识。虽然它“理解”的方式与我们人类不同它是通过调整数十亿参数来最大化预测概率但效果上这些知识被压缩并分布式地编码在了网络的权重中。这种基于统计的压缩学习使得模型能够进行泛化。它没见过“比萨斜塔在意大利的___”这个具体句子但它从无数包含“在...的[城市]”模式的句子中学到了地点与标志物的关联从而能大概率预测出“比萨”或“意大利”。预测任务迫使模型去发现并利用文本中隐藏的规律、结构和知识而不仅仅是记忆。7.2 上下文学习In-Context Learning的奥秘LLM展现出的最神奇能力之一就是上下文学习在提示Prompt中给出几个任务示例如“把英文翻译成中文apple - 苹果banana - 香蕉computer -”模型就能在没有更新参数的情况下完成新样本computer的翻译。这如何从“预测下一个词”的角度解释一种主流的解释是模型在预训练时见过海量结构类似的文本片段例如网络论坛上的问答、教程中的步骤演示等。这些文本通常遵循“描述-示例-结论”或“问题-答案”的模式。当模型遇到一个结构良好的提示时它识别出了这种熟悉的模式并基于统计规律“预测”出最可能跟随这个模式的下一个词序列而这个序列恰好构成了对新任务的正确响应。本质上模型是在“续写”一篇符合它所见过的所有文本统计规律的文章而这篇“文章”的内容恰好是一个问题的解答。7.3 思维链Chain-of-Thought prompting引导内部计算思维链提示“让我们一步步思考...”能显著提升模型在复杂推理任务上的表现。这暗示了简单的下一个词预测在适当的序列引导下可以模拟出多步的、连贯的推理过程。当模型生成“首先... 然后... 因此...”这样的文本时它并不是在进行我们人类意义上的“思考”而是在生成一个符合逻辑推理文本统计特征的高概率词序列。然而生成这个外部文本序列的过程可能强制模型内部的计算也遵循了某种结构化的、循序渐进的路径从而避免了直接跳跃到一个错误但表面概率高的答案。这就像一个人通过把解题步骤写下来能更好地梳理思路一样。外部文本的生成约束了内部表示的演化方向使其更有可能导向正确的最终答案。因此“预测下一个词”这个简单的目标配合上Transformer强大的序列建模能力以及海量、多样化的训练数据共同促成了复杂智能行为的涌现。模型的能力边界很大程度上取决于它在训练数据中能捕捉到多少种有效的模式和相关关系。作为使用者我们的提示工程Prompt Engineering其核心就是为模型构造一个它能识别的高概率模式上下文引导它沿着我们期望的方向进行“续写”。从嵌入表示到注意力计算从概率分布到解码策略最后到训练目标和涌现能力我们完成了一次对Transformer如何预测下一个词的深度巡游。理解这个微观机制是理解所有大语言模型神奇能力的基石。它告诉我们当今最前沿的AI文本生成其核心仍然是一个基于概率的、自回归的预测机器只是这个机器的复杂度和规模已经达到了足以让我们重新思考语言、知识和智能关系的程度。
返回列表