LLM 学习:程序员的视角

不是数学家,是程序员。我们从代码理解 LLM,不是从公式。

🔤 Token 是什么?

LLM 不看"字",也不看"字母"。它看的是 Token ID——介于字和词之间的"积木块"。

文本"Hello, 世界"
Tokenizer分词器
Token IDs[15496, 11, 235, 145, ...]

试试把你的文本转成 Token

规律:英文一个词 ≈ 1 个 Token;中文一个字 ≈ 1~2 个 Token;标点符号也是 Token。LLM 的计费也是按 Token 算的——输入和输出的 Token 数加起来就是账单。

中文为什么"贵"

同样的意思,中文的 Token 数大约是英文的 1.5~2 倍:

"Hello World"2 个 Token
"你好世界"4 个 Token
"artificial intelligence"2 个 Token
"人工智能"4 个 Token
这就是为什么用中文 API 调用通常更贵——同样的任务需要更多 Token。

BPE 分词原理

BPE = Byte Pair Encoding。把文本拆解为最常见的"字串对":

初始: "低" "成" "本"
第1步: "低" + "成本" → 发现有大量"低成本"这个模式
第2步: 合并 → Token: "低成本" (1个Token)

"高成本" → 却不行,因为不常见
所以"高成本"还是3个Token: "高" + "成本"

🎯 LLM 的本质:超级输入法联想

LLM 只做一件事——给定前文,预测下一个 Token 的概率分布。不是"知道答案",而是"擅长续写"。

输入一段文字,看看 LLM 会预测什么

预测的下一个 Token 概率分布

注意:LLM 输出的是一个概率分布——不是确定的答案。这就是为什么同一个 Prompt 每次得到的回答可能不同(取决于采样策略)。

📐 训练过程:Next Token Prediction

海量文本整个互联网
遮住最后一个词
让模型猜
猜错→调整参数
输入:  "中国的首都是 ___"     → 模型猜: [北京:92%, 上海:3%, 广州:1%, ...]
输入:  "1 + 1 = ___"            → 模型猜: [2:95%, 3:2%, 0:1%, ...]
输入:  "She opened the ___"    → 模型猜: [door:25%, book:18%, box:12%, ...]

重复几万亿次后,模型学到了语言的统计规律——不是背答案,而是学到了词与词之间的概率关系

🪟 Context Window —— LLM 的"视野"

LLM 一次能"看到"的 Token 数量是有限的,这就是 Context Window。超出窗口的内容会被"遗忘"。

模拟:Context Window = 20 Tokens(拖动滑块看"失忆"效果)


完整对话历史:
LLM 实际"看到"的内容(在 Context Window 内):
这就是为什么和 LLM 聊了很长一段后,它可能"忘记"最开始说的内容——前面的 Token 被挤出了 Context Window。

👁️ Self-Attention:LLM 怎么理解上下文

Attention 让 LLM 在处理每个词时,都能"看到"句子中所有其他词,并决定哪些词更相关。

点击句子中的词,看它"关注"哪些词

Attention 权重矩阵

解析

点击一个词查看它的 Attention 分布。
为什么 Attention 重要:传统模型按顺序处理文本,离得远的词很难建立联系。Attention 让模型可以直接跳跃连接到任何位置——就像你在读文章时,眼光可以直接跳到前面提到的人名或概念上。

🌡️ Temperature(温度)——控制 LLM 的"创造力"

LLM 输出的是一个概率分布。Temperature 控制要不要"压制"低概率选项。

同一句话,不同 Temperature 的效果


概率分布变化

效果说明

Temperature = 0.2(低)
高概率单词被放大 → 输出确定、保守、不犯错
适合:代码生成、翻译、事实问答
Temperature效果适合场景
0 ~ 0.3输出确定、保守、可复现代码生成、翻译、数学
0.5 ~ 0.7平衡确定性和多样性日常对话、总结
0.8 ~ 1.2有创意但不失控创意写作、头脑风暴
1.5 ~ 2.0非常随机,可能"胡言乱语"几乎不用

💭 幻觉(Hallucination)—— LLM 会"编造事实"

LLM 没有"知识库"和"真假判断"能力。它只是在做概率续写——有时候概率最高的续写恰好是编造的内容。

为什么会幻觉:
1. LLM 不是数据库——不会"查"答案
2. 训练数据不完整或过时
3. 推理链太长,中途概率"漂移"
4. 被 Prompt 诱导("告诉我关于X的事"——X 不存在也会编)
怎么缓解:
1. RAG(检索增强生成):先用向量数据库找相关文档,再让 LLM 基于文档回答
2. Few-shot:给几个真实例子
3. 低 Temperature:减少随机性
4. 明确指令:"如果你不确定,说不知道"
一句话记住:LLM 的本质是"超级输入法联想",不是"超级百科全书"。它续写出来的内容"看起来像真话",但不保证是事实。这恰好解释了为什么 RAG(检索增强生成) 很重要——把"检索真实文档"和"LLM 生成"结合起来,才能兼顾准确性和流畅性。