学习进度 · 登录后可记录
课程定位:大模型微调课程的认知起点
学习方式:精读课程 前置说明:这章不涉及代码,是纯理论的"历史课"——但很重要!搞清楚来龙去脉,后面学技术才不蒙
💡 开始之前,花 1 分钟把这个目录过一遍,先知道这章讲什么、学完能回答什么问题。遇到概念卡住了,就回来翻翻目录。
| 章节 | 主题 | 核心问题 | 难度 |
|---|---|---|---|
| 一 | 规则驱动时代(1980s-1990s) | 为什么"人工写规则"这条路走不通? | ⭐ |
| 二 | 统计学习时代(1990s-2010s) | "让机器自己猜概率"是怎么玩的? | ⭐⭐ |
| 三 | 深度学习崛起(2010s-2017) | RNN 怎么让机器第一次有了"记忆"? | ⭐⭐ |
| 四 | Transformer 革命(2017-至今) | Attention 机制为什么是一次真正的革命? | ⭐⭐⭐ |
| 五 | 预训练大模型时代(2018-至今) | BERT/GPT/LLaMA 到底在"预训练"什么? | ⭐⭐⭐ |
| 附录 | 环境配置 | 怎么搭一个能跑模型的开发环境? | ⭐⭐ |
| 阶段 | 你能做到的事 |
|---|---|
| 直觉 | 能用一句接地气的话概括每个时代的特点,给室友讲明白 |
| 理解 | 能画出 AI 演进的时间轴,并标出关键技术节点 |
| 迁移 | 能跟非技术背景的朋友解释"为什么 Transformer 是一次革命" |
先镇楼一句话:
AI 的发展史,本质上是"让机器理解语言"的三次革命:规则 → 统计学习 → 深度学习 → 预训练大模型
如果要给非技术背景的朋友解释,我会这样说:
想象一下教小孩学说话有三个阶段:
第一阶段,你手把手教他每条语法规则——"主谓宾要这样排列"、"形容词放在名词前面"……累死你也教不全。
第二阶段,你让他自己从大量对话中找规律——"哦,原来'狗狗'和'猫猫'后面经常跟'好可爱',记住了"。
第三阶段,你把他扔进一个拥有全球所有书籍的图书馆,让他自己顿悟——结果他突然就会写诗了。
大模型就是那个顿悟的孩子。

💡 看这张图的一个小技巧:越靠右,机器越"自学成才"——人工干预越少,机器越"顿悟"。
1980 年代,AI 研究者们的想法很朴素:"我只要把所有语法规则都写进程序,机器不就能理解语言了吗?"
这个思路催生了"专家系统"——把人类专家的知识整理成规则库,让机器按照规则推理。
专家系统的样子(想象一个问答机器人):
输入: "The cat sat on the mat"
↓
[专家设计的句法树]
主语:The cat
谓语:sat
宾语:on the mat
↓
输出: 语法正确 ✓ / 语义解析完成问题1:规则写到天荒地老
→ 英语语法规则有几万条,中文规则更复杂
→ 每加一条新规则,就要考虑它和现有规则的冲突
→ 改一条规则,其他十个地方可能出 bug
问题2:机器没有"常识"
→ 规则可以写"主语后面通常跟谓语"
→ 但没法写"狗会叫、猫会抓老鼠、苹果可以是水果也可以是公司"
问题3:歧义完全无法处理
→ "苹果不香了"
→ 是苹果没有香味?还是苹果手机不好用了?还是苹果公司不香了?
→ 规则系统完全无法判断规则系统就像一本厚厚的语法书——规则越多,机器越笨,因为它完全依赖人给它写好每一条。人的智力和耐心是它的天花板。
研究者们发现:规则写不完,但数据可以收集啊!
于是思路变成了:"我不告诉你规则是什么,你自己从大量语料里猜规律。"
这催生了两大核心技术:HMM(隐马尔可夫模型) 和 CRF(条件随机场)。
统计学习的工作方式:
输入: "Apple is great"
↓
[机器从语料库中学习概率分布]
P(Apple=水果 | "is great") = 0.73
P(Apple=公司 | "is great") = 0.27
↓
输出: "Apple" 最可能是水果(概率 73%)词性标注(Part-of-Speech Tagging):
"Apple" → 名词(NN)
"is" → 动词(VBZ)
"great" → 形容词(JJ)
命名实体识别(Named Entity Recognition):
"Apple" + 公司相关上下文 → 实体类型:组织(ORG)
"Tim Cook" + CEO 相关上下文 → 实体类型:人物(PER)| 特性 | HMM(隐马尔可夫模型) | CRF(条件随机场) |
|---|---|---|
| 建模方式 | 生成模型(联合概率 P(X,Y)) | 判别模型(条件概率 P(Y|X)) |
| 独立性假设 | 假设观测之间相互独立 | 打破独立性假设 |
| 序列建模能力 | 有限,适合简单序列 | 更强,能捕捉长距离依赖 |
| 一句话理解 | "我先猜词性,再猜词" | "我直接猜整句话的词性序列" |
💡 打个比方:HMM 像是一个先猜单词再拼句子的人,CRF 像是一个直接读完整句再给出答案的人。显然后者对上下文的理解更好。
局限1:对复杂上下文理解能力有限
→ "他看了一眼手机,笑了"
→ 统计模型能猜到"手机"是名词,但理解不了"看手机"和"笑了"的关联
局限2:特征工程还是要人工设计
→ 研究者还是要告诉模型"关注哪些特征"
→ 只不过从"规则"变成了"特征模板"
局限3:长序列依赖无法根治
→ 预测"因为...所以..."这种长距离关系时,还是会丢信息统计学习就像让机器做完形填空——看到上下文,自己猜概率。比规则系统强多了,但仍然受限于"人工设计特征"这个瓶颈。
深度学习最大的贡献是:特征不用人找了,机器自己学。
传统机器学习:
输入 → [人工设计特征] → [机器学习分类器] → 输出
↑
这一步是瓶颈!
深度学习:
输入 → [神经网络自动学习特征] → 输出
↑
端到端,自动搞定!RNN(循环神经网络)的核心思想是:引入一个"记忆单元",把上一步的结果传给下一步。
# RNN 的本质:有一个"记忆",把上一步的结果传给下一步
# 这是深度学习第一次真正"处理序列数据"
hidden_state = 0 # 初始记忆
for word in sentence:
hidden_state = f(word, hidden_state) # 核心循环:结合当前词 + 上一步记忆
# hidden_state 就像人的"短期记忆",记录了前面所有词的信息RNN 之前的网络:输入一个,输出一个,彼此独立
RNN:输入一串,输出一串,而且前后有关联
例子:
"I love you" → [I, love, you]
RNN处理:I → 记住"主语是I"
love → 结合I,记住"主语I在执行动作love"
you → 结合I和love,记住"主语I love宾语you"
→ 机器第一次有了"上下文理解"的能力!问题描述:
当序列很长时,反向传播的梯度要传回去很多步
每传一步就要乘以一个小于1的数
传到最后,梯度就几乎变成0了
类比:
想象你给100个人传话:
第1个人说:"今天开会"
第50个人听到的是:"今天开...?"(信息衰减)
第100个人听到的是:"???"(完全丢失)
这导致:
→ RNN 记不住长序列开头的信息
→ 深层 RNN 根本训练不动为了解决梯度消失,研究者发明了 LSTM(长短期记忆网络) 和 GRU(门控循环单元)。
它们的核心思想是:给记忆加几个"门",让机器自己决定什么该记、什么该忘。
LSTM 的三个门(用生活理解):
遗忘门:"我要忘掉多少旧记忆?"
→ 看到"后来,他失忆了" → 遗忘门打开,旧记忆清空
输入门:"我要记住多少新信息?"
→ 看到"他的名字叫小明" → 输入门打开,记住"小明"
输出门:"我要输出多少记忆?"
→ 当前任务需要什么 → 输出门决定输出哪些记忆
→ 这就是后来 Attention 机制的"祖师爷"!
→ 都是"选择性记忆"的思想| 问题 | 具体表现 | 后果 |
|---|---|---|
| 无法并行 | 必须从左到右逐步计算 | GPU 利用率极低,训练慢 |
| 长依赖困难 | 梯度消失无法根治 | 长文本理解差 |
| 固定窗口 | CNN for NLP 受限于卷积核大小 | 难以捕捉超长依赖 |
深度学习让机器第一次自动学习特征,不再依赖人工设计。但 RNN 家族的记忆是"短期"的,长序列面前仍然力不从心——这为后来的 Transformer 埋下了伏笔。
2017 年,Google 的研究团队发表了一篇论文,标题就叫 "Attention Is All You Need"。
这篇论文要解决的核心问题是:RNN 太慢了,而且记不住长距离依赖,有没有办法绕过它?
答案是:不要循环结构了,全用注意力机制。
让每个词"看到"句子中的所有其他词,然后自己决定谁最重要。
RNN 的做法(串行):
位置1 → 传给位置2 → 传给位置3 → ... → 传给位置100
→ 要传99步,信息早就失真了
Attention 的做法(并行):
位置1 ───直接问───► 位置100
位置2 ───直接问───► 位置100
位置3 ───直接问───► 位置100
... ↑
所有位置同时对话,瞬间搞定
→ 任意两个位置之间的距离 = O(1)!输入:"I love AI"
Step 1: 每个词生成3个向量(Q/K/V)
" I" → Q₁, K₁, V₁ ← "我在找什么" / "我包含什么" / "我的内容"
"love" → Q₂, K₂, V₂
" AI" → Q₃, K₃, V₃
Step 2: 计算注意力分数
Score("love", "I") = Q("love") · K("I") / √d
→ 看看"love"和"I"有多相关
Step 3: Softmax 归一化,得到权重
"love"对"I"的注意力 = 0.8,"love"对"AI"的注意力 = 0.2
→ "love"这个词,80%参考了"I"的信息,20%参考了"AI"
Step 4: 加权求和,得到新的表示
→ 融合了所有上下文信息的"love"# Attention 的核心公式!这就是 Transformer 的心脏!
def attention(Q, K, V, mask=None):
d_k = Q.shape[-1] # 缩放因子,防止点积过大导致梯度消失
# QK^T / √d_k:计算相似度并缩放
scores = torch.matmul(Q, K.transpose(-2, -1)) / math.sqrt(d_k)
# Mask:遮住"未来"的信息(解码器用)
if mask is not None:
scores = scores.masked_fill(mask == 0, -1e9)
# Softmax:归一化成概率分布
attention_weights = F.softmax(scores, dim=-1)
# 加权求和
output = torch.matmul(attention_weights, V)
return output, attention_weights
# 最终公式:Attention(Q, K, V) = softmax(QK^T / √d_k) · V| 突破 | Transformer 的做法 | RNN 的做法 |
|---|---|---|
| 并行化 | 所有位置同时计算 | 必须从左到右逐步迭代 |
| 长依赖 | 任意位置直接相连,距离=O(1) | 路径长度=O(n),距离越远越难 |
| 可扩展性 | 堆叠更多层 = 能力更强 | 深层 RNN 难以训练 |
RNN 像是串行加工的流水线——一个词一个词地处理,效率低,还记不住远的词。
Transformer 像是全息投影——所有词同时"看到"彼此,瞬间算出关系,没有信息损失。
"Attention Is All You Need" 的数据(截至2024年):
- 引用数:10万+(AI 领域最高引用的论文之一)
- 开创新时代:NLP 正式进入 Transformer 时代
- 应用范围:NLP、CV、语音、多模态——全都用上了 Attention2018 年是一个转折点。研究者的思路变成了:
"我先在一个超大规模的数据上训练一个'通用语言理解模型',然后在具体任务上微调——就像一个人先上完通识教育,再去学专业技能。"
这个思路催生了三大预训练范式:BERT(理解)、GPT(生成)、T5(统一)。
BERT 的做法(双向编码器):
"我喜欢深度[MASK]"
↑
双向看:既能看左边的"我喜欢深",也能看右边的"度学习"
→ 填空题(Masked Language Model)
→ 擅长:文本分类、实体识别、阅读理解
GPT 的做法(单向解码器):
"我喜欢" → 生成"深度"
↑
单向看:只能看左边的"我喜欢",不能偷看右边的"深度学习"
→ 续写作文(Next Token Prediction)
→ 擅长:写作、对话、代码生成
T5 的做法(Encoder-Decoder):
"翻译: I love AI → [GEN] 我 爱 AI"
↑
把所有任务统一成 Text-to-Text
→ 无论翻译、分类、问答,都是"输入文本 → 输出文本"
→ 擅长:多任务统一建模# BERT 的训练任务:遮住一些词,然后预测它们
# 这个任务叫做 Masked Language Model( MLM,遮盖语言模型)
原句: "我喜欢深度学习"
训练时遮盖:
"我[MASK]好深度学习"
模型任务:预测[MASK]位置应该是什么词
模型输出:喜欢 ✓💡 BERT 为什么强? 因为它能双向看——既能利用左边的信息,也能利用右边的信息。比如"我喜欢[MASK]学习",BERT 可以用左边的"喜欢"和右边的"学习"一起来猜中间是什么词。
# GPT 的训练任务:预测下一个词
# 这个任务叫做 Next Token Prediction(下一个词预测)
context: "深度"
目标: "学习"
模型预测:下一个 token 是"学习" → ✓ 正确
context: "深度学习是"
目标: "一"
模型预测:下一个 token 是"一" → ✓ 正确
context: "深度学习是一种"
目标: "人工"
模型预测:下一个 token 是"人工" → ✓ 正确
# ... 如此循环,模型学会"顺着意思续写"
# 这就是 GPT 能写作文、能对话、能写代码的底层原因💡 为什么 GPT 是"生成式"的? 因为它的训练目标就是"给定前文,预测下一个词"。这就像一个人读完了所有书,然后学会了"顺着上文的意思往下写"。
参数规模进化史:
2018 BERT-base: 110M 参数(1亿)
→ 当时已经觉得很大了
2019 GPT-2: 1.5B 参数(15亿)
→ 太大了,当时不敢发布完整版,怕被滥用
2020 GPT-3: 175B 参数(1750亿)
→ 震惊业界,效果突飞猛进
→ 论文标题:"Language Models are Few-Shot Learners"
2022 ChatGPT: 基于 GPT-3.5
→ 第一个真正"出圈"的大模型产品
2023 GPT-4: ~1.8T 参数(据说,实际未公布)
2023 LLaMA 2: 70B 参数(开源最强)
2024 GPT-4o: 多模态原生,支持实时语音对话
2024 Claude 3: 多模态,支持超长上下文OpenAI 发现的规律:
模型能力(Loss)∝ 模型参数量的某个幂次方
模型参数 ∝ 计算量的某个幂次方
模型参数 ∝ 数据量的某个幂次方
翻译成人话:
→ 模型越大、数据越多、算力越强,模型越强
→ 这个趋势目前没有看到尽头!
→ 这就是为什么大家都在"暴力美学"——堆参数、堆数据、堆显卡预训练大模型时代的核心发现是:规模是万能的。当模型大到一定程度,通用智能会"涌现"(Emergence)——模型突然就学会了很多没专门训练过的能力。这在2018年之前是不可想象的。
👉 切换到右侧 Notebook,执行环境配置代码 这一节不用太纠结,跟着做就行。遇到问题看 Debug Tips。
# ⚙️ conda 环境隔离:不同项目用不同 Python 版本和依赖
# 就像给每个项目分配一个独立的"房间",互相不干扰
conda create -n llm_course python=3.10 -y
conda activate llm_course# ⚙️ CUDA 11.8 版本,请根据你的显卡选择对应版本
# CUDA = 让 PyTorch 调用 GPU 进行加速的接口
pip install torch torchvision torchaudio \
--index-url https://download.pytorch.org/whl/cu118# ⚙️ 核心三件套:
# Transformers = 模型加载、推理、训练的工具箱
# Datasets = 数据集处理工具
# Tokenizers = 分词器(把文字切成token)
pip install transformers datasets scikit-learn pandas numpy torchmetrics# 导入并验证
import torch
from transformers import AutoModel, AutoTokenizer
# 检查 CUDA 是否可用(GPU 加速的前提)
# 如果是 False,说明 PyTorch 没有识别到你的显卡
print("CUDA available:", torch.cuda.is_available())
print("GPU 数量:", torch.cuda.device_count())
# ⚙️ 加载 BERT-base(1.1亿参数的小模型,适合练手)
# bert-base-uncased 是 Hugging Face 上的一个预训练模型
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
model = AutoModel.from_pretrained("bert-base-uncased")
print("✅ 模型加载成功!")
print("参数量:", sum(p.numel() for p in model.parameters()) / 1e6, "M")运行上面的验证代码,预期看到:
CUDA available: True ← 如果显示 False,检查 CUDA 驱动
GPU 数量: 1 ← 如果显示 0,说明 PyTorch 没识别到 GPU
✅ 模型加载成功!
参数量: 110.0 M ← BERT-base 的标准参数量(1.1亿)| 问题 | 原因 | 解决方案 |
|---|---|---|
CUDA available: False | CUDA 驱动没装/版本不匹配 | 运行 nvidia-smi 检查;重装 GPU 版 PyTorch |
torch.cuda.device_count() = 0 | PyTorch 不是 GPU 版本 | 卸载 CPU 版:pip uninstall torch;重装 GPU 版 |
| 模型下载慢 | Hugging Face 在国外,服务器慢 | 换国内镜像(见下方) |
OutOfMemoryError | 显存不够 | 减小 batch size,或用更小的模型(如 bert-tiny) |
# 💡 强烈建议添加到你的配置里!
import os
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com" # 国内 Hugging Face 镜像
os.environ["TOKENIZERS_PARALLELISM"] = "false" # 避免多线程警告📝 工程避坑三原则:
- 不要用 conda 安装 PyTorch — 用
pip install+ 指定--index-url,conda 源更新慢- 首次运行先加载小模型 — BERT-110M 比 GPT-175B 轻量 1600 倍,先验证环境能跑
- 国内必设镜像 — Hugging Face 在国外,不设镜像下载可能等 1 小时
| 时代 | 核心思想 | 代表模型 | 致命局限 |
|---|---|---|---|
| 规则驱动 | 专家写规则 | 专家系统 | 规则写不完,无法扩展 |
| 统计学习 | 数据猜概率 | HMM, CRF | 特征仍需人工设计 |
| 深度学习 | 端到端自动学特征 | RNN/LSTM | 无法并行,梯度消失 |
| Transformer | 注意力机制 | Attention | 算力需求高 |
| 预训练大模型 | 通用智能涌现 | BERT/GPT/LLaMA | 资源门槛高 |
第一级:规则驱动(人工写规则)→ 失败告终
第二级:统计学习(机器猜概率)→ 部分成功
第三级:深度学习 + 预训练(自动学特征 + 通用智能)→ 大成功
↑
我们现在就在这第三级上| 资料 | 推荐理由 |
|---|---|
| Attention Is All You Need arXiv:1706.03762 | 必读原文,5页讲清楚 Transformer |
| The Illustrated Transformer (Jay Alammar) | 动图解释 Attention,视觉友好,入门神器 |
| BERT 论文精读 | 理解预训练范式的最佳实践 |
| GPT-3 论文 (Language Models are Few-Shot Learners) | 大模型"涌现"能力的第一手证据 |
🦞 下一步预告:下一章我们将深入 Module 1: Transformer 模型基础,手把手拆解 Q/K/V 的计算流程,真正理解 Attention 的每一个细节。