LLM 原理

是什么

LLM(Large Language Model,大语言模型)是一类基于 Transformer 架构、通过海量文本数据训练而成的深度学习模型。它的核心能力可以用一句话概括:

给定一段上文,预测下一个最可能出现的 Token。

这个看似简单的”预测下一个词”的能力,在模型参数量达到数百亿甚至数万亿时,涌现出了理解语义、逻辑推理、代码生成、多语言翻译等远超预期的复合能力。GPT-4、Claude、Gemini、Llama 都属于 LLM。

核心特征

  • 生成式:不是从数据库检索答案,而是逐 Token 地”写出”回答
  • 概率性:每次输出都是基于概率分布的采样,同一个 Prompt 可能产出不同结果
  • 通用性:一个模型可以处理问答、翻译、摘要、编程等多种任务
  • 上下文窗口:模型一次能”看到”的文本长度有限(如 128K Token)

为什么需要 LLM

传统 NLP 的困境

在 LLM 出现之前,自然语言处理(NLP)经历了几个阶段:

阶段方法局限
规则系统人工编写语法规则覆盖率极低,无法处理歧义
统计模型n-gram、TF-IDF只看局部统计,不理解语义
深度学习(小模型)RNN、LSTM、BERT需要为每个任务单独微调,泛化能力有限

LLM 的突破

2017 年 Google 提出 Transformer 架构,2020 年 OpenAI 发布 GPT-3(1750 亿参数),人们发现:

  • 规模涌现:当模型参数和训练数据达到一定规模后,模型表现出了训练目标中没有显式要求的能力(如数学推理、代码生成)
  • 少样本学习:不需要针对特定任务训练,只需在 Prompt 中给出几个示例,模型就能理解并执行新任务
  • 通用接口:自然语言本身成为了”编程语言”——用文字描述需求,模型直接完成任务

核心工作流程

LLM 的推理过程可以分为四步:

用户输入 → Tokenizer 分词 → 模型推理 → 采样输出

1. Tokenizer:文本到数字

模型不能直接读文字。Tokenizer 负责将文本切分为 Token(词元),并映射为数字 ID。

生活类比:想象你要用电报发一段话,但电报只认编号。Tokenizer 就是那本”密码本”——它把文字拆成编号片段,模型只看编号工作。

实际切分示例(以 GPT-4 的 BPE Tokenizer 为例):

输入: "今天天气真不错,适合写代码"

切分结果:
┌──────┬──────┬────┬─────┬──┬────┬────┬───┬──────┐
│ 今天 │ 天气 │ 真 │ 不错 │ ,│ 适合 │ 写  │ 代 │  码  │
└──────┴──────┴────┴─────┴──┴────┴────┴───┴──────┘
Token 数: 9

对比英文:
输入: "The weather is nice today"
切分: ["The", " weather", " is", " nice", " today"]
Token 数: 5

为什么同样的意思,中英文 Token 数不同? 因为 Tokenizer 的词表是从训练语料中统计学习的,英文高频词往往是完整的一个 Token,而中文需要更细粒度的拆分。这直接影响 API 计费——同样一句话,中文可能比英文”贵”一倍。

一个反直觉的例子

"ChatGPT" → ["Chat", "G", "PT"]  (3 个 Token,被拆开了)
"the"     → ["the"]              (1 个 Token,太常见了)
"indescribable" → ["ind", "esc", "rib", "able"] (4 个 Token,罕见词被拆碎)

关键概念:

  • Token ≠ 字 ≠ 词:一个 Token 可能是一个字、半个词、一个标点,甚至一个字节
  • Subword 分词:主流方案(BPE、SentencePiece)通过统计频率自动学习分词粒度——高频组合合并为一个 Token,低频词被拆分为更小的片段
  • 词表大小:通常 32K-128K 个 Token,覆盖多语言
  • Token 数量直接影响成本:API 计费按 Token 数量计算,而非字符数

2. 模型推理:Transformer 前向传播

Token ID 进入模型后经过以下流程:

Token ID → Embedding 向量 → N 层 Transformer Block → 输出概率分布

每层 Transformer Block 包含:

  • 自注意力(Self-Attention):让每个 Token 关注上文中所有相关 Token,捕捉长距离依赖
  • 前馈网络(FFN):对注意力结果做非线性变换,存储”知识”
  • 残差连接 + 层归一化:保证深层网络的训练稳定性

详细的 Transformer 内部机制参见 02-Transformer 架构

3. 采样输出:从概率到文字

模型最终输出的是一个概率分布:词表中每个 Token 被选中的概率。如何从中选取下一个 Token,取决于采样策略:

参数含义典型值
Temperature控制随机性。越低越确定,越高越发散0.0-1.0
Top-P只从累积概率前 P% 的 Token 中采样0.9-1.0
Top-K只从概率最高的 K 个 Token 中采样40-100
Max Tokens本次生成的最大 Token 数因模型而异

Temperature 直觉

假设你问模型”用一个词形容大海”,模型给出的候选概率分布为:

"辽阔" 40% | "深邃" 25% | "蔚蓝" 20% | "神秘" 10% | "咸的" 5%

不同 Temperature 下的表现:

Temperature行为可能的输出适用场景
0永远选概率最高的每次都输出”辽阔”事实问答、代码生成
0.7适度随机,高概率词仍占优势”辽阔""深邃""蔚蓝”交替出现日常对话、文案写作
1.5大幅拉平概率差距偶尔蹦出”咸的”头脑风暴、创意写作

一句话总结:Temperature 就像调节”冒险程度”的旋钮——调低则稳妥重复,调高则天马行空。

4. 自回归生成

LLM 的生成是逐 Token 进行的。下面用一个完整的对话场景来演示:

场景:用户问”推荐一种编程语言”

第 1 步: 模型看到 → "推荐一种编程语言"
         候选概率: "Python"(35%) "Java"(20%) "Go"(15%) ...
         选中: "Python" ✓

第 2 步: 模型看到 → "推荐一种编程语言 Python"
         候选概率: ","(60%) "。"(25%) "是"(10%) ...
         选中: "," ✓

第 3 步: 模型看到 → "推荐一种编程语言 Python,"
         候选概率: "因为"(30%) "它"(25%) "适合"(20%) ...
         选中: "因为" ✓

第 4 步: 模型看到 → "推荐一种编程语言 Python,因为"
         候选概率: "它"(40%) "语法"(20%) "入门"(15%) ...
         选中: "它" ✓

... 如此循环,直到生成终止符 <EOS> 或达到 Max Tokens

最终输出: "Python,因为它语法简洁、生态丰富,适合初学者入门。"

关键洞察

  • 模型在第 1 步选了”Python”之后,后续所有内容都会围绕 Python 展开——这就是为什么 LLM 有时候”一条路走到黑”,因为前面的选择会锁定后续方向
  • 每一步都是独立的概率决策,模型并没有”想好整句话再说”——它真的是一个字一个字蹦出来的
  • 如果第 1 步选了”Go”,后续内容会完全不同(如”Go,因为它并发性能优秀”)

训练流程概览

一个 LLM 从零到可用,通常经历三个阶段:

阶段一:预训练(Pre-training)

  • 目标:学习语言的统计规律和世界知识
  • 数据:互联网文本、书籍、代码、论文等(通常数万亿 Token)
  • 任务:Next Token Prediction(给定前文,预测下一个 Token)
  • 算力:数千张 GPU,训练数周到数月
  • 产出:Base Model(基座模型),能续写文本但不会”对话”

阶段二:有监督微调(SFT, Supervised Fine-Tuning)

  • 目标:教模型”如何对话”
  • 数据:人工标注的高质量指令-回答对(数万到数十万条)
  • 效果:模型从”续写器”变成”助手”,学会遵循指令

阶段三:人类偏好对齐(RLHF / DPO)

  • 目标:让模型的输出符合人类价值观和偏好
  • 方法
    • RLHF(Reinforcement Learning from Human Feedback):训练奖励模型 → 强化学习优化
    • DPO(Direct Preference Optimization):直接从偏好数据优化,省去奖励模型
  • 效果:模型学会拒绝有害请求、给出更有帮助的回答、减少幻觉

详细的训练与对齐机制参见 07-模型训练与对齐


关键概念辨析

Token vs 字符 vs 词

文本: "ChatGPT is amazing"
字符: 19 个
词:   3 个
Token: 4 个 → ["Chat", "G", "PT", " is", " amazing"](取决于 Tokenizer)
  • 中文通常 1 个汉字 ≈ 1-2 个 Token
  • 英文通常 1 个常见词 ≈ 1 个 Token,罕见词会被拆分

Context Window(上下文窗口)

模型一次推理能处理的最大 Token 数:

模型上下文窗口
GPT-3.54K / 16K
GPT-4o128K
Claude 3.5 Sonnet200K
Llama 3128K

上下文窗口 = 输入 Token + 输出 Token。窗口越大,模型能”看到”的信息越多,但计算成本也越高。

幻觉(Hallucination)

LLM 有时会生成看起来合理但实际错误的内容。这不是 Bug,而是其概率生成本质的副产品:

  • 模型优化的是”生成看起来合理的文本”,而非”生成正确的事实”
  • 当模型对某个知识不确定时,它仍会自信地给出一个”最可能的”答案
  • 解决方案之一就是 RAG——让模型先检索再回答

主流模型对比

模型开发方开源特点
GPT-4oOpenAI多模态、推理能力强
Claude 3.5 SonnetAnthropic长上下文、代码能力强、安全性高
Gemini 1.5 ProGoogle超长上下文(1M Token)
Llama 3Meta开源标杆、社区活跃
Qwen 2.5阿里中文能力强、性价比高
DeepSeek V3深度求索MoE 架构、推理效率高
MistralMistral AI轻量高效、欧洲团队

局限性

  • 知识截止日期:预训练数据有时间边界,模型不知道训练后发生的事
  • 幻觉:可能编造不存在的事实、引用、API
  • 推理能力有限:复杂数学、逻辑推理仍是弱项(正在通过 CoT 和 o1 类模型改进)
  • 无法执行动作:LLM 只能生成文本,不能真正”做事”——这正是 Agent 要解决的问题
  • 上下文窗口限制:超出窗口的信息会被丢弃

延伸阅读