拆解大模型底层原理:LLM 是如何预测下一个词的?
- [一、 Token(词元):大模型的"数字货币"](#一、 Token(词元):大模型的“数字货币”)
-
- [1. 为什么不直接认"词"?](#1. 为什么不直接认“词”?)
- [2. 从文本到 Token ID 的编解码](#2. 从文本到 Token ID 的编解码)
- [3. 下一个词的概率游戏](#3. 下一个词的概率游戏)
- [二、 Embedding(嵌入):给词元赋予高维语义](#二、 Embedding(嵌入):给词元赋予高维语义)
-
- [1. 什么是高维语义空间?](#1. 什么是高维语义空间?)
- [2. 语义距离与向量化计算](#2. 语义距离与向量化计算)
- [三、 位置编码(Positional Encoding):打破时空平移](#三、 位置编码(Positional Encoding):打破时空平移)
-
- [1. 为什么 Transformer 需要额外的位置信息?](#1. 为什么 Transformer 需要额外的位置信息?)
- [2. 语义 + 位置的双重叠加](#2. 语义 + 位置的双重叠加)
- [四、 Self-Attention(自注意力):模型理解上下文的核心](#四、 Self-Attention(自注意力):模型理解上下文的核心)
-
- [1. Q、K、V 的特工隐喻](#1. Q、K、V 的特工隐喻)
- [2. 注意力分数的计算流程(点积运算)](#2. 注意力分数的计算流程(点积运算))
- [五、 从特征到预测:多层网络与输出投影](#五、 从特征到预测:多层网络与输出投影)
-
- [1. 线性投影(Linear Projection)](#1. 线性投影(Linear Projection))
- [2. Softmax 概率化](#2. Softmax 概率化)
- [六、 总结:大模型运转的全局视界](#六、 总结:大模型运转的全局视界)
在人工智能技术爆发的今天,ChatGPT、Claude、通义千问等大语言模型(LLM)已经成为我们工作和学习的得力助手。当我们输入一段文字,模型总能流畅、智能地给出合乎逻辑的回答。这种看似具备人类智慧的表现,在底层究竟是如何实现的?
走进 LLM 的内部,我们会发现它最重要的工作其实极其纯粹:基于当前上下文,预测下一个词。
大模型并不是像人类一样通过"思考"来整体构思一段话,而是通过自回归(Autoregressive)的方式,一个词、下一个词、下下一个词地向后递推,直到生成完整的篇章。本文将带你一层层剥开 Transformer 架构的外壳,深入探讨模型拿到文本后,究竟经历了怎样的精密计算,才完成了对"下一个词"的精准预测。
一、 Token(词元):大模型的"数字货币"
当我们向 LLM 发送一段 Prompt(提示词)时,大模型并不能直接理解人类的自然语言。它接触到的第一步处理,叫做 Tokenization(词元化)。
1. 为什么不直接认"词"?
对于英文而言,如果把每个完整的单词(如 unhappiness)都作为一个独立的输入单元,大模型就需要记住几十万个英文单词;若是中文,词汇量更是多达数百万。这会导致模型的**词表(Token Lookup Table)**体积极度膨胀,神经网络的尾部计算量大到无法承受。
为了解决这个问题,大模型采用了**词元(Token)**的概念。Token 是大模型处理、计算和计费的通用最小单位,它并不等同于语言学意义上的"词",而是被切分得更细的"字词"、"字符"甚至"标点"。
例如,英文单词 unhappiness 在大模型的视角里,通常不会被当作一个整体,而是会被拆解为:
un + happi + ness
通过这种切分方式,大模型只需要掌握几万个基础的"积木"(词元),就可以通过排列组合,拼凑出世界上所有的词汇。这极大地减小了词表体积,提升了运算效率。
2. 从文本到 Token ID 的编解码
词元化的过程是由 Tokenizer(分词器) 独立完成的,它就像是一个翻译官,负责在自然语言和大模型之间建立索引映射。
- Encoder(编码器):将用户输入的自然语言切分为 Token,并查表转换为一串数字(Token ID)。这些 Token ID 才是模型真正的输入。
- Decoder(解码器):当模型预测出下一个 Token ID 后,再将其逆向转换回人类可读的文字输出。
在中文环境中,分词器同样会展现这种高效的切分逻辑:
原始输入 :"我爱人工智能,自然语言处理很有趣"
Token化结果 :
["我", "爱", "人工智能", ",", "自然语言处理", "很", "有趣"]
3. 下一个词的概率游戏
当我们将"中国的首都是"这句文本输入给分词器,转换为 Token ID 并送入大模型后,LLM 内部的神经网络会基于预训练学到的海量知识,计算出下一个位置可能出现的词元的概率分布:
| 候选词元 (Token) | 概率 (Probability) |
|---|---|
| 北京 | 92% |
| 北平 | 4% |
| 长安 | 2% |
| ... | ... |
大模型根据这个概率分布进行采样(例如选择了概率最高的"北京"),输出对应的 Token ID,再由 Decoder 解码为文字。
紧接着,模型会把"北京"放入上下文,发起新一轮的预测:"中国的首都是北京",接下来的概率最高的可能是","。这种自回归生成的机制,便是大模型输出长篇大论的秘密。
二、 Embedding(嵌入):给词元赋予高维语义
Tokenizer 帮我们把文字变成了 Token ID(例如,"你" → \rightarrow → 57668)。但对于神经网络而言,57668 仅仅是一个没有任何数学意义的离散标签。我们无法通过对这个数字进行加减乘除,来计算它和"好"或者"苹果"之间的关系。
为了让模型能够进行数学计算,我们需要进行第二步:Embedding(语义嵌入)。
1. 什么是高维语义空间?
Embedding 的本质,就是建立一个巨大的向量查找表(Embedding Matrix)。当模型拿到 Token ID 57668 时,它会直接去对应的"柜子"里,把一段固定长度的高维浮点数向量(如 1024 维、4096 维或更高)"抽出来"。
这个向量不再是冷冰冰的数字,而是多维空间里的一个坐标点(具有方向和长度的向量)。大模型在预训练阶段,最核心的任务之一就是构建这个由成千上万维特征组成的几何结构和空间坐标系。
2. 语义距离与向量化计算
在这个高维空间中,语义相近的词,它们的向量几何距离就比较近。
例如,"你"和"好"经常组合出现,或者在语境上存在关联,它们在空间中的距离就会被拉近。而"苹果"和"微积分"在语义上相去甚远,它们的坐标点就会隔得非常开。
更有趣的是,这种向量空间还具备语义迁移和数学运算的能力。在理想的 Embedding 空间中,词与词之间的关系可以表现为向量的加减法:
国王 − 男性 + 女性 ≈ 王后 \text{国王} - \text{男性} + \text{女性} \approx \text{王后} 国王−男性+女性≈王后
这说明大模型已经把"性别"、"权力"等抽象概念,解构为了坐标轴上的具体方向。
三、 位置编码(Positional Encoding):打破时空平移
单纯依靠 Embedding,大模型只能理解每个词"是什么意思",但却无法捕捉它们在句子中的"先后顺序"。
这会带来一个致命的问题。在 Bag-of-Words(词袋)视角下,以下两句话的 Embedding 集合是完全相同的:
- "我咬了狗"
- "狗咬了我"
然而在人类语言中,词序的变化直接决定了语义的颠倒。
1. 为什么 Transformer 需要额外的位置信息?
传统的循环神经网络(RNN)是按顺序一个字一个字读入的,天然自带时间先后顺序。但 Transformer 架构为了实现大规模并行计算,选择同时将一整句话的所有 Token 输入模型。这意味着,如果没有额外干预,模型会将一句话看作一个毫无顺序的"词集"。
2. 语义 + 位置的双重叠加
为了解决这一缺陷,Transformer 引入了 位置编码(Positional Encoding, PE)。
在 Token 查表得到语义 Embedding 后,模型会根据该 Token 在句子中所处的绝对或相对位置,生成一个同样维度的位置向量,并将这两个向量进行逐元素相加(Element-wise Addition)。
最终输入向量 = 语义 Embedding + 位置编码 PE \text{最终输入向量} = \text{语义 Embedding} + \text{位置编码 PE} 最终输入向量=语义 Embedding+位置编码 PE
通过这种设计,每个送入后续网络层层的 Token 都同时携带了两类至关重要的信息:
- 语义信息:这个词是谁,它代表什么。
- 位置信息:这个词在当前句子中排在第几位。
有了位置编码,模型就能轻而易举地分辨出"我"是在"狗"的前面还是后面,从而精准捕捉句子的真实逻辑。
四、 Self-Attention(自注意力):模型理解上下文的核心
解决了词义和位置问题后,最关键的一步来了:模型如何联系上下文来理解一个词?
语言中存在大量的指代、多义词和依赖关系。例如这句经典的英文:
"The animal didn't cross the street, because it was too tired."
人类一眼就能看出,这里的 it 指代的是 animal(动物),而不是 street(街道)。但对于机器来说,it 本身的 Embedding 只是一个空洞的代词。模型该如何动态地将 animal 的特征和语义,融入到 it 之中呢?
这就是 Transformer 的灵魂所在------Self-Attention(自注意力机制)。
1. Q、K、V 的特工隐喻
在自注意力机制中,每一个 Token 的输入向量,都会通过三组不同的线性变换矩阵,分化出三个全新的高维向量。我们可以用一个非常形象的"资源相亲"或者"特工任务"来比喻它们:
- Q (Query - 查询向量):"我在找什么?"------代表当前词想要探寻上下文中的哪些相关信息。
- K (Key - 键向量):"我能提供什么?"------代表当前词具备哪些特征标签,供其他词来匹配。
- V (Value - 值向量):"我实际蕴含的内容是什么?"------代表当前词真正包含的语义财富。
2. 注意力分数的计算流程(点积运算)
以刚才的句子为例,当模型处理到 Token it 时,它的工作流程如下:
- 发出询问 (Q) :
it提取出自己的查询向量 Q i t Q_{it} Qit,遍历句子中的每一个词(包括它自己)。 - 标签匹配 (K) : Q i t Q_{it} Qit 与句中每个词的键向量 K K K 进行点积运算(Dot Product) 。点积在向量几何中代表了两个向量的相似度。
Score = Q i t ⋅ K w o r d \text{Score} = Q_{it} \cdot K_{word} Score=Qit⋅Kword - 计算权重(Softmax) :运算后会得到一组原始分数,经过缩放和 Softmax 函数归一化后,转化为相加为 1 的"注意力权重(概率分布)"。
- Q i t ⋅ K a n i m a l → Q_{it} \cdot K_{animal} \rightarrow Qit⋅Kanimal→ 分数值极高
- Q i t ⋅ K s t r e e t → Q_{it} \cdot K_{street} \rightarrow Qit⋅Kstreet→ 分数值很低
- 内容融合 (V) :利用计算出来的注意力权重,对所有词的值向量 V V V 进行加权求和。
最终,由于 animal 拿到了最高的权重分,it 在这一层输出的新向量中,就会融合大量来自 animal 的 V V V 向量特征。在后续的层数里,it 就不再是一个空洞的代词,而是具象化为了那只"疲惫的动物"。
这种动态调整向量表征的能力,赋予了大模型无与伦比的上下文感悟力。
五、 从特征到预测:多层网络与输出投影
经历了解析上下文的自注意力层,以及强化特征的非线性前馈神经网络(FFN)后,输入的 Token 向量在全模型中完成了华丽的蜕变。
此时,对应最后一个位置的输出向量,已经完美吸纳了前面所有输入(Prompt)的精髓。接下来,我们要临门一脚,将其还原为对"下一个词"的预测。
整个 Transformer 架构的尾部处理包含以下两个核心步骤:
1. 线性投影(Linear Projection)
模型最后一层输出的特征向量维度通常是固定的(例如 4096 维)。我们需要放置一个全连接线性层,将这个 4096 维的向量投影到巨大的词表空间。
如果分词器的词表里有 50,000 个 Token,那么这一步线性变换就会输出一个包含 50,000 个原始浮点数的向量。这些数值在深度学习中被称为 Logits。
2. Softmax 概率化
Logits 的数值范围毫无规律,无法直接作为概率使用。因此,我们需要利用 Softmax 函数对其进行非线性映射:
Softmax ( z i ) = e z i ∑ j e z j \text{Softmax}(z_i) = \frac{e^{z_i}}{\sum_{j} e^{z_j}} Softmax(zi)=∑jezjezi
经过 Softmax 转换后,这 50,000 个数值全部变成了 0 到 1 之间、且总体相加严格等于 1 的概率值。这就形成了我们在第一章所看到的"候选词元概率表"。
模型根据预设的采样策略(如 Temperature 温度系数、Top-P 采样等)从这个概率分布中摇出下一个 Token,完成一次推理。
六、 总结:大模型运转的全局视界
回顾整个流程,大模型预测下一个词的旅程可以总结为以下闭环:
[用户提示词 Prompt]
│
▼
1. Tokenizer 拆解 ───> [Token IDs] (离散数字)
│
▼
2. Embedding Matrix ──> [语义向量] (高维空间坐标)
│
▼
3. Position Encoding ─> [带位置信息的特征向量]
│
▼
4. Transformer Blocks (Self-Attention 多层深度交互,捕捉上下文联系)
│
▼
5. Linear & Softmax ──> [全词表概率分布] (如:北京 92%)
│
▼
6. 采样策略 ──────────> [选定下一个新 Token] ───> (拼接到输入,循环往复)
正是通过这样精妙、底层的数学矩阵运算,大模型才得以在没有"真正意识"的前提下,展现出高超的文本理解与逻辑推理能力。理解了 Token、Embedding、位置编码和自注意力机制,你就真正握住了推开 LLM 底层世界大门的钥匙。