2
0

一文读懂大语言模型是怎么"思考"的:从 Token 到推理的全过程

2026-08-10
2026-08-10
文章摘要
|

改写自 [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)

模型训练完后,推理过程是自回归的:

  1. 输入 prompt → 切 token → embedding
  2. 经过 N 层 Transformer 块
  3. 最后一个 token 的输出向量 → 投影到词汇表大小 → softmax → 概率分布
  4. 采样一个 token(不是选概率最高的,是按概率采样)
  5. 把这个 token 加到输入末尾,重复第 2-4 步
  6. 直到模型输出 (结束符)

关键点

  • 温度(Temperature) 控制随机性:temperature=0 几乎确定,temperature=1 正常,越大越发散
  • Top-p / Top-k 限制采样范围
  • 模型每次只输出一个 token,所以"写一段话"其实是几十次连续推理

五、几个常见误解

❌ "LLM 理解语义"

✅ LLM 学到的是统计模式,不是"理解"。但这种模式强大到可以模拟理解

❌ "LLM 有知识"

✅ LLM 的"知识"是参数化的,没有显式数据库。训练时把知识压进参数,推理时只能模糊回忆。

❌ "LLM 会推理"

✅ LLM 能做模式匹配式的推理("这个问题类似我训练时见过的某类问题"),但没有真正的逻辑推理能力。遇到没见过的复杂逻辑会出错。

❌ "Context window 越大越好"

✅ Context 越大,单个请求越贵响应越慢。而且模型对长 context 中部的内容利用最差("迷失中间"问题)。

六、对实际使用的启示

  1. 结构化提示比"自然对话"更有效——因为模型对结构敏感
  2. Few-shot 比 Zero-shot 准——给它看几个例子,模型会"照葫芦画瓢"
  3. 任务分解比"一次性问完"更稳——把复杂任务拆成多步
  4. 降低温度用于"确定答案"任务,升高温度用于"创造性"任务
  5. 不要让模型做"心算"——给它工具用,让它算

总结

LLM 思考的真相是:

Tokenizer 切数字 → Embedding 变向量 → Transformer 自注意力 + FFN → 投影回词汇表 → 采样下一个 token → 重复

这套机制虽然"机械",但因为规模巨大(千亿参数)、训练数据极多(万亿 token),涌现出了惊人的"类智能"行为。

理解机制不是为了"超越"它,而是为了更好地用它


原文标题:How LLMs "Think": From Tokens to Inference

原文链接:https://karpathy.ai/tokenizer-notes

本文为改写版本,将原文技术博客用更通俗的方式重新组织,保留所有关键技术细节。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或者给予支持!

评论