一文读懂大语言模型是怎么"思考"的:从 Token 到推理的全过程
改写自 [SourceURL]。本文为改写版本,仅用于个人博客学习。
原作者:Andrej Karpathy,YouTube 视频《[Let's build the GPT Tokenizer]》博客化整理,原文链接:https://karpathy.ai/tokenizer-notes
写在前面
很多人以为 LLM"思考"的方式和人类一样。其实完全不是。
LLM 看到的是一串数字,吐出的是另一串数字。它的"思考"是统计学的延续,不是"理解"。
这篇文章用最通俗的方式,把"提示词 → 输出"的整个过程讲清楚。
一、第一步:Tokenizer(分词器)
LLM 第一步不是读你的文字,是把文字切成"Token"。
比如 Hello world 可能被切成:
['Hello', ' world']
中文 你好,世界 可能被切成:
['你', '好', ',', '世', '界']
不同的 tokenizer 切法不同。GPT 系列用 BPE(Byte Pair Encoding),Claude 用 SentencePiece。
关键点:
- 同一个词在不同上下文切法可能不同
- 数字、代码、emoji 切法很特别
- 中文 token 通常比英文更"碎"(因为中文单字信息密度高),这也是为什么 LLM 处理中文成本更高的原因
实际例子:
import tiktoken
enc = tiktoken.encoding_for_model("gpt-4")
print(enc.encode("Hello world")) # [9906, 1917]
print(enc.encode("你好,世界")) # [53901, 30508, 3922, 54034, 3922, 239, 94130]
二、第二步:Embedding(向量化)
每个 token 会被转换成一个高维向量(通常是 4096 维或更高)。
这一步把"语言"变成了"几何空间中的点"。
直觉理解:
- "国王" - "男人" + "女人" ≈ "女王"(经典例子)
- 相似的词在向量空间中靠得近
- 训练时,模型学到的就是这个"几何结构"
关键点:
- Embedding 是预训练第一阶段学到的
- 之后的微调不会再大幅改变 embedding
- 一个词的 embedding 是固定的(不考虑上下文)
三、第三步:Transformer(自注意力机制)
这是 LLM 真正的"思考"过程。
3.1 自注意力(Self-Attention)
对于输入的每个 token,模型会计算它和所有其他 token 的相关性。
举个例子,句子 The cat sat on the mat because it was tired:
- 处理
it时,模型会"注意"到cat(因为it指的是 cat) - 这个"注意"是通过 Q、K、V 三个矩阵算出来的
数学直觉(简化版):
Attention(Q, K, V) = softmax(QK^T / sqrt(d_k)) * V
3.2 多头注意力(Multi-Head)
模型不会只算一次"注意",而是并行算很多次(通常 32 或 64 次)。
- 一个头可能关注语法关系
- 一个头可能关注语义关系
- 一个头可能关注长距离依赖
最后把所有头的结果拼起来。
3.3 前馈网络(FFN)
自注意力之后,每个 token 还会经过一个前馈神经网络。
这一步主要做"概念组合"——把多个 token 的信息融合成更抽象的表示。
3.4 残差连接 + LayerNorm
每一步都有残差连接(output = x + f(x))和 LayerNorm,让深层网络能稳定训练。
整个 Transformer 块 = Attention + FFN + 两个残差
四、第四步:推理(Inference)
模型训练完后,推理过程是自回归的:
- 输入 prompt → 切 token → embedding
- 经过 N 层 Transformer 块
- 最后一个 token 的输出向量 → 投影到词汇表大小 → softmax → 概率分布
- 采样一个 token(不是选概率最高的,是按概率采样)
- 把这个 token 加到输入末尾,重复第 2-4 步
- 直到模型输出
(结束符)
关键点:
- 温度(Temperature) 控制随机性:temperature=0 几乎确定,temperature=1 正常,越大越发散
- Top-p / Top-k 限制采样范围
- 模型每次只输出一个 token,所以"写一段话"其实是几十次连续推理
五、几个常见误解
❌ "LLM 理解语义"
✅ LLM 学到的是统计模式,不是"理解"。但这种模式强大到可以模拟理解。
❌ "LLM 有知识"
✅ LLM 的"知识"是参数化的,没有显式数据库。训练时把知识压进参数,推理时只能模糊回忆。
❌ "LLM 会推理"
✅ LLM 能做模式匹配式的推理("这个问题类似我训练时见过的某类问题"),但没有真正的逻辑推理能力。遇到没见过的复杂逻辑会出错。
❌ "Context window 越大越好"
✅ Context 越大,单个请求越贵,响应越慢。而且模型对长 context 中部的内容利用最差("迷失中间"问题)。
六、对实际使用的启示
- 结构化提示比"自然对话"更有效——因为模型对结构敏感
- Few-shot 比 Zero-shot 准——给它看几个例子,模型会"照葫芦画瓢"
- 任务分解比"一次性问完"更稳——把复杂任务拆成多步
- 降低温度用于"确定答案"任务,升高温度用于"创造性"任务
- 不要让模型做"心算"——给它工具用,让它算
总结
LLM 思考的真相是:
Tokenizer 切数字 → Embedding 变向量 → Transformer 自注意力 + FFN → 投影回词汇表 → 采样下一个 token → 重复
这套机制虽然"机械",但因为规模巨大(千亿参数)、训练数据极多(万亿 token),涌现出了惊人的"类智能"行为。
理解机制不是为了"超越"它,而是为了更好地用它。
原文标题:How LLMs "Think": From Tokens to Inference
原文链接:https://karpathy.ai/tokenizer-notes
本文为改写版本,将原文技术博客用更通俗的方式重新组织,保留所有关键技术细节。