LLM 工作原理
LLM 工作原理
理解大语言模型如何”思考”和”说话”——用开发者的语言解释。
整体流程
1 | 输入文本 → [Tokenize] → Token序列 → [Embedding] → 向量 → [Transformer] → 概率分布 → [采样] → 输出Token → 循环 → 文本 |
1. Token(分词)
什么是 Token?
LLM 不直接处理”文字”,而是处理 Token——文本被分词器(Tokenizer)切成的小单元。
| 文本 | Token 近似数 |
|---|---|
| 1 个英文字符 | ~0.25 Token |
| 1 个中文字符 | ~1-2 Token |
| 1 个英文单词 | ~1.5 Token |
| 代码(高度重复) | 极低,压缩率高 |
实际例子:
1 | "你好,世界" → 约 5-6 个 Token |
为什么 Token 重要?
- API 定价 = 输入 Token + 输出 Token(双向计费)
- 上下文窗口 = Token 上限,不是字符或词数
- 第一个 Token 影响质量:开头 50 个 Token 决定了 80% 的输出走向
2. Embedding(向量化)
什么是 Embedding?
将 Token 转换为高维浮点数向量(例如 1536 维或 4096 维)。
1 | "猫" → [0.123, -0.456, 0.789, ..., 0.321] 1536维 |
关键特性:
- 语义相近的词,向量距离近(”猫”和”狗”的距离 < “猫”和”汽车”的距离)
- 距离用余弦相似度度量:接近 1 = 相近,接近 -1 = 相反
Embedding 在 RAG 中的作用
1 | 文档分块 → Embedding 模型 → 向量 → 存储到向量数据库 |
3. Transformer 架构
核心组件
1 | 输入 Token → Token Embedding + Position Embedding → 堆叠 Transformer 层 → 输出 Logits → Softmax → 下一个 Token |
Transformer Layer 结构:
1 | ┌─────────────────────────────────────┐ |
Self-Attention(自注意力)
核心问题:处理”我买了猫粮,因为猫饿了”——“猫”应该关注”饿”还是”粮”?
Attention 计算:
- Query(查询):当前位置想问什么
- Key(键):每个词能提供什么信息
- Value(值):每个词的实际内容
1 | # 简化的 Attention 计算 |
Multi-Head Attention:多组 QKV 并行计算,捕捉不同类型的依赖关系(语法、语义、情感等)。
4. 生成过程(推理)
自回归生成
LLM 是自回归模型:一次生成一个 Token,然后把新 Token 加入输入,循环。
1 | 输入: "[BOS] 今天天气" |
采样策略
| 策略 | 说明 | 适用场景 |
|---|---|---|
| Greedy | 选概率最高的词 | 代码生成(精确) |
| Temperature | 调整概率分布的”平滑度” | 创意写作 |
| Top-K | 只从最高 K 个候选中采样 | 质量/多样性平衡 |
| Top-P (Nucleus) | 从概率和达到 P 的最小集合中采样 | 常用默认值 |
5. 训练 vs 推理
训练
1 | 海量文本 → 自监督学习(预测下一个词)→ 习得语言规律 + 世界知识 |
- 预训练:海量通用文本(互联网、书籍、代码)
- SFT(监督微调):高质量问答对微调
- RLHF:人类反馈强化学习对齐人类偏好
推理
1 | 用户输入 → Tokenize → Embedding → Transformer(前向计算)→ Token采样 → 解码 → 文本 |
推理成本远低于训练:训练需要反向传播(更新权重),推理只需要前向计算。
6. LLM 能做什么 vs 不能做什么
能做
✅ 基于上下文推理和生成
✅ 代码补全、翻译、摘要
✅ 问答、对话、创意写作
✅ 调用外部工具(Function Calling)
✅ 多步骤推理(Chain-of-Thought)
不能做(或做不好)
❌ 精确计算:算错 17×23 = 391
❌ 实时信息:不知道今天天气
❌ 超长输入:超过上下文窗口就遗忘
❌ 完全可靠的事实:会产生幻觉
❌ 实时变化的任务:需要持续接入外部系统
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Henry's Blog!