LLM彻底讲透:从下一个词预测到通用人工智能,大语言模型究竟是怎么被训练出来的?
如果你用过 ChatGPT、Claude、DeepSeek 或 Kimi,你一定会好奇:它们为什么能写诗、写代码、做翻译、回答问题,甚至"理解"你的意图?这篇文章会从最基础的概念出发,讲清楚大语言模型(LLM)到底是什么、它是怎么被训练出来的、为什么它既能"胡说八道"又能写出惊艳的代码,以及作为程序员该如何利用它。
一、先回答一个最直接的问题:什么是 LLM?
LLM,全称 Large Language Model,中文叫"大语言模型"。
拆开看:
-Large(大):指参数量大(几十亿到几千亿),训练数据也大(数万亿 token)。
-Language(语言):它的输入和输出都是人类语言(包括自然语言和编程语言)。
-Model(模型):一个由神经网络表示的数学函数,能根据输入预测输出。
一句话总结:LLM 是一个被训练来"预测下一个词"的超级大的神经网络。
你没看错。ChatGPT 看起来能聊天、能写代码、能做推理,本质上它只是在反复做一件事:给定前面已经出现的词,猜下一个最有可能出现的词。
输入:
今天天气很
输出:好(概率 0.85)、差(概率 0.10)、热(概率 0.03)...
它会选概率最高的那个,然后把这个词拼回上下文,再猜下一个词,如此循环,直到生成完整的句子或代码。
二、LLM 和以前的 AI 有什么不一样?
在 LLM 之前,AI 处理语言的方式是典型的"任务导向":
| 任务 | 传统做法 | 需要做什么 |
|---|---|---|
| 情感分析 | 人工设计特征 + SVM/朴素贝叶斯 | 收集标注数据、分词、提取特征、训练分类器 |
| 机器翻译 | 统计机器翻译或规则系统 | 大量双语平行语料、复杂特征工程 |
| 问答系统 | 检索 + 模板匹配 | 构建知识库、写匹配规则 |
| 代码补全 | 基于语法树或统计 n-gram | 针对特定语言建模 |
传统 AI 是"一个任务一个模型":做情感分析就训练一个情感分类模型,做翻译就训练一个翻译模型,做代码补全就训练一个代码模型。
LLM 的范式转移是"一个模型做所有事":
- 同一个模型可以翻译、摘要、问答、写代码、写诗、改 bug。
- 你不需要重新训练模型,只需要换一种"说法"——也就是 Prompt。
这种能力叫"涌现能力"(Emergent Abilities)。当模型规模大到一定程度,它会突然展现出训练时并没有明确教过它的能力,比如上下文学习、推理、代码生成等。
三、核心机制:下一个词预测到底有多神奇?
LLM 的核心训练目标非常朴素:给定一段文本,预测下一个 token。
3.1 什么是 token?
token 是 LLM 处理文本的最小单位。它不是严格的"字"或"词",而是模型分词器切出来的片段。
- 英文中,一个 token 可能是一个词或词的一部分。
- 中文中,一个 token 通常是 1~2 个汉字。
- 数字和标点也会被切分成特定 token。
例如:
"我爱人工智能" 可能被切成: ["我", "爱", "人工", "智能"]3.2 预测过程的本质
当模型看到"我爱"时,它会输出一个概率分布:
| 下一个 token | 概率 |
|---|---|
| 你 | 0.40 |
| 吃 | 0.20 |
| 人工 | 0.15 |
| 编程 | 0.10 |
| ... | ... |
然后模型选择概率最高的词(或按一定策略采样),接在"我爱"后面变成"我爱你",再预测下一个词。
这种"一个接一个字地猜"的能力,看起来简单,但当模型看过互联网上海量的文本、代码、论文、对话后,它实际上学会了:
- 语法规则
- 世界知识(巴黎是法国首都)
- 推理模式(如果 A 则 B)
- 编程语言的语法和常见模式
- 对话的回合结构
3.3 一个简单的 Python 演示
你可以用 Hugging Face 的 transformers 库,实际感受一下 LLM 是怎么预测下一个词的:
from transformers import AutoTokenizer, AutoModelForCausalLM import torch # 加载一个小模型(GPT-2)作为演示 model_name = "gpt2" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForCausalLM.from_pretrained(model_name) prompt = "The weather today is" inputs = tokenizer(prompt, return_tensors="pt") # 让模型生成下一个 token with torch.no_grad(): outputs = model(**inputs) logits = outputs.logits[0, -1, :] # 最后一个位置的 logits probs = torch.softmax(logits, dim=-1) # 取概率最高的 5 个 token top_k = torch.topk(probs, k=5) for idx, prob in zip(top_k.indices, top_k.values): word = tokenizer.decode([idx]) print(f"{word!r}: {prob:.4f}")运行后你会看到类似这样的结果:
' great': 0.1523 ' good': 0.0987 ' nice': 0.0654 ' very': 0.0432 ' not': 0.0312这就是 LLM 的"本能":预测下一个词。聊天、写代码、做翻译,都是这个本能的复合应用。
四、LLM 是怎么被训练出来的?
训练一个 LLM 通常分为三个阶段:预训练、监督微调(SFT)和基于人类反馈的强化学习(RLHF)。
4.1 第一阶段:预训练(Pre-training)
目标:让模型学会语言和世界知识。
数据:互联网上能抓到的几乎所有文本:网页、书籍、论文、代码、论坛、维基百科等。现代大模型训练数据规模通常是万亿级 token。
过程:
- 把文本切成 token 序列。
- 遮住后面的 token,让模型预测下一个 token。
- 计算预测结果和真实结果的差异(损失),用反向传播调整模型参数。
- 重复数万亿次。
这个阶段非常耗时,需要数千张 GPU/TPU 训练数周甚至数月,成本高达数千万到数亿美元。
预训练结束后,模型已经能:
- 续写句子
- 补全代码
- 回答简单的事实性问题
- 做基本的翻译和摘要
但它还不会"对话",可能胡说八道,也可能输出不安全、不友好的内容。
4.2 第二阶段:监督微调(SFT)
目标:让模型学会以人类期望的方式回答问题。
数据:人工标注的高质量对话数据。例如:
用户:请介绍一下 Python 的列表推导式。 助手:Python 的列表推导式是一种简洁创建列表的方式... 用户:把这句话翻译成英文:你好,世界。 助手:Hello, world.过程:
- 把这些"问答对"输入模型。
- 模型学习的是:当输入是用户问题时,输出应该是合适的助手回答。
经过 SFT,模型从一个"自动续写器"变成了"会聊天的助手"。
4.3 第三阶段:RLHF(人类反馈强化学习)
目标:让模型输出更符合人类偏好、更安全、更有用。
问题:SFT 的数据量有限,无法覆盖所有场景。而且模型可能学会"编造"听起来合理但实际错误的答案。
RLHF 的做法:
1. 对同一个问题,让模型生成多个不同回答。
2. 人类标注员对这些回答进行排序:哪个更好、哪个更真实、哪个更安全。
3. 训练一个"奖励模型"(Reward Model),让它学会预测人类偏好。
4. 用强化学习(比如 PPO 算法)微调 LLM,让它生成奖励模型打分更高的回答。
经过 RLHF,模型会:
- 更愿意承认不知道,而不是编造答案。
- 更礼貌、更有帮助。
- 拒绝回答有害问题。
五、规模带来的涌现能力
LLM 最神奇的地方在于:很多能力并不是线性增长的,而是当模型大到一定程度后突然"涌现"出来。
5.1 上下文学习(In-Context Learning)
你不需要重新训练模型,只需要在 Prompt 里给几个例子,模型就能模仿。
请把以下中文翻译成英文: 猫 -> cat 狗 -> dog 老虎 ->模型会输出tiger。它从你给的两个例子里"学会"了这个任务。
5.2 推理能力(Chain-of-Thought)
当模型规模足够大,它会展现出多步推理能力。如果在 Prompt 里加上"请一步步思考",模型会生成中间推理步骤,最终答案准确率大幅提升。
问:一个篮子里有5个苹果,拿走2个,又放进3个,现在有几个? 请一步步思考。 答: 1. 一开始有5个苹果。 2. 拿走2个,剩下 5 - 2 = 3 个。 3. 又放进3个,变成 3 + 3 = 6 个。 4. 所以答案是6个。5.3 代码能力
LLM 在大量代码上训练后,学会了编程语言的语法、常见算法、API 用法。这催生了 GitHub Copilot、Cursor、Windsurf 等 AI 编程工具。
六、LLM 的幻觉与局限
LLM 不是真正的"理解"世界,它只是学会了文本中的统计模式。因此它有几个明显局限:
6.1 幻觉(Hallucination)
模型会自信地编造不存在的事实、论文、代码或数据。例如:
- 编造一个不存在的人名和公司。
- 给出一个看似合理但跑不通的代码。
- 引用一篇不存在的论文。
原因:训练目标是"生成看起来像真的文本",而不是"保证真实性"。
6.2 知识截止
模型只能知道训练数据里的内容。如果训练数据截止到 2024 年,它不知道 2025 年发生的事。
6.3 上下文长度有限
虽然现代模型上下文已经能达到几十万甚至上百万 token,但仍然有限。处理超长文档时需要分块、摘要等策略。
6.4 缺乏真正的推理和计算
LLM 不擅长精确的数学计算和逻辑推理。它可能把 13×17 算错,或者在进行多步推理时丢失前提条件。
七、LLM 在 AI Coding 中的应用
对于程序员来说,LLM 最大的价值在于把自然语言意图转换成代码、配置和命令。典型应用场景包括:
7.1 代码补全与生成
# 输入注释,模型生成代码 # 写一个函数,计算两个日期之间的工作日天数 def workdays_between(start_date, end_date): """计算两个日期之间的工作日天数(不含节假日)""" from datetime import timedelta, datetime delta = end_date - start_date count = 0 for i in range(delta.days + 1): day = start_date + timedelta(days=i) if day.weekday() < 5: # 周一到周五 count += 1 return count7.2 代码解释与重构
你可以把一段难懂的代码丢给 LLM,让它解释或改成更清晰的写法。
7.3 调试与错误分析
把报错信息贴给 LLM,它能帮你定位问题、给出修复建议。
7.4 辅助架构设计
在搭建新系统时,可以让 LLM 帮你设计目录结构、选择技术栈、生成骨架代码。
八、常见误区
误区 1:LLM 有真正的理解能力
LLM 并不"理解"概念,它学习的是语言中的统计相关性。它能把"猫"和"狗"联系得很近,是因为这两个词在文本中经常以相似方式出现。
误区 2:模型越大就一定越好
模型大只是一方面。数据质量、训练方法、对齐技术、推理效率同样重要。有时候一个 70B 的优化模型可能比未经优化的 400B 模型更实用。
误区 3:LLM 会取代程序员
目前 LLM 更像是"超级副驾驶"。它能加速编码、减少重复劳动,但复杂架构设计、业务理解、系统权衡仍然需要人类工程师。
误区 4:LLM 输出可以直接用于生产
生产环境使用 LLM 生成的代码前,必须经过测试、审查和安全评估。幻觉和错误输出是真实存在的风险。
九、总结
LLM 的本质是:通过在海量文本上预测下一个 token,学会语言的统计规律和世界知识的统计关联。
它的训练分为三个阶段:
1.预训练:从互联网数据学习语言和世界知识。
2.SFT:学会以对话助手的方式回答问题。
3.RLHF:对齐人类偏好,输出更安全、更有用的内容。
当模型规模足够大时,会涌现出上下文学习、推理、代码生成等能力。但它也有幻觉、知识截止、计算不精确等局限。
对于程序员而言,理解 LLM 的本质,不是为了成为算法工程师,而是为了更好地使用它——知道它擅长什么、不擅长什么,什么时候可以依赖它,什么时候必须人工校验。
如果你已经读完了这篇文章,你应该已经能比大多数人更清楚地回答一个问题:
"ChatGPT 为什么能说话?"
因为它被训练了数万亿次,只为做好一件事:猜下一个词。
参考与延伸阅读
- 《Attention Is All You Need》—— Transformer 架构奠基论文
- OpenAI GPT 系列技术报告
- 《Training language models to follow instructions with human feedback》(InstructGPT 论文)
- Hugging Face transformers 文档
