AI 学习路线 · 进阶
Part 4 · 大模型原理 · 进阶可选
从零写迷你模型、RLHF、PPO、分布式训练实操等进阶内容
Section 1 · 从零写一个迷你"预测下一个词"模型
Subsection 1 · 跑代码
VS Code 新建 mini_lm.py:
import torchimport torch.nn as nn# 超简单的"语言模型":根据前一个词预测下一个词torch.manual_seed(42)# 一个小词表:一句话 "我 爱 吃 苹果"vocab = ["我", "爱", "吃", "苹果"]word2idx = {w: i for i, w in enumerate(vocab)}idx2word = {i: w for i, w in enumerate(vocab)}vocab_size = len(vocab)# 用"爱吃"预测"苹果":输入 [爱, 吃] 的索引X = torch.tensor([[word2idx["爱"]], [word2idx["吃"]]])y = torch.tensor([word2idx["吃"], word2idx["苹果"]])# 一个 Embedding + 一个线性层 = 最简"预测下一个词"emb = nn.Embedding(vocab_size, 8)fc = nn.Linear(8, vocab_size)loss_fn = nn.CrossEntropyLoss()opt = torch.optim.Adam(list(emb.parameters()) + list(fc.parameters()), lr=0.05)# 训练 200 轮for step in range(200): e = emb(X) # (2,8) logits = fc(e).squeeze(1) # (2,4) loss = loss_fn(logits, y) opt.zero_grad() loss.backward() opt.step() if step % 50 == 0: print(f"step {step} loss={loss.item():.3f}")# 测试:输入"爱",模型预测下一个词test = torch.tensor([[word2idx["爱"]]])logits = fc(emb(test)).squeeze(1)pred_idx = logits.argmax().item()print("看到'爱',模型预测下一个词是:", idx2word[pred_idx])- 运行
- 预期看到:loss 从 1.x 降到接近 0,最后打印
看到'爱',模型预测下一个词是: 吃 - 别小看它——GPT 的本质就是这么回事(只是大了一亿倍,且会看整句)。
过关:能跑通并说出"语言模型 = 预测下一个词" = Section 1 完成。
Section 2 · 把迷你模型放大一点:学整句话
Subsection 1 · 跑代码
VS Code 新建 mini_lm2.py:
import torchimport torch.nn as nn# 这次用"窗口":根据前面 N 个词预测下一个torch.manual_seed(0)vocab = ["我", "爱", "吃", "苹果", "和", "香蕉", "。"]# 训练句子(简化版)sentences = [ ["我", "爱", "吃", "苹果"], ["我", "爱", "吃", "香蕉"], ["苹果", "和", "香蕉", "。"],]# 构造输入窗口=3X, y = [], []for s in sentences: for i in range(len(s) - 3): X.append([vocab.index(s[i]), vocab.index(s[i+1]), vocab.index(s[i+2])]) y.append(vocab.index(s[i+3]))X = torch.tensor(X)y = torch.tensor(y)emb = nn.Embedding(len(vocab), 16)fc = nn.Linear(16 * 3, len(vocab))loss_fn = nn.CrossEntropyLoss()opt = torch.optim.Adam(list(emb.parameters()) + list(fc.parameters()), lr=0.03)for step in range(500): e = emb(X).view(X.shape[0], -1) # 把 3 个词的向量拼一起 logits = fc(e) loss = loss_fn(logits, y) opt.zero_grad(); loss.backward(); opt.step() if step % 100 == 0: print(f"step {step} loss={loss.item():.3f}")# 测试 "我爱吃" → ?test = torch.tensor([[vocab.index("我"), vocab.index("爱"), vocab.index("吃")]])e = emb(test).view(1, -1)pred = fc(e).argmax().item()print("看到'我爱吃',预测下一个词:", vocab[pred])- 预期看到:预测"苹果"或"香蕉"。
- 这就是"根据上下文预测"的雏形——再叠上注意力机制,就是 Transformer 了。
过关:能跑通,并说一句"窗口 + 预测 = 语言模型的基本盘" = Section 2 完成。
Section 3 · RLHF 深度:InstructGPT 怎么来的
Subsection 1 · 看精读
- B 站搜
InstructGPT 论文 解读,看 30 分钟精读视频。 - 打开 https://zhuanlan.zhihu.com/p/625249476 (InstructGPT 中文解读),读全文。
Subsection 2 · 画三步流程 备忘录画:
第1步 SFT 找人工写好"问题→好回答",微调模型 → 会说人话第2步 奖励模型 让模型同时给多个回答,人工排序,训练一个"打分器"第3步 PPO 用打分器给模型的回答打分,通过强化学习把高分行为放大结果 → 模型更"听话"、更少乱说(对齐人类偏好)过关:能对着这张图讲一遍 RLHF 三步 = Section 3 完成。
Section 4 · PPO 思想梳理(不做公式,懂直觉)
Subsection 1 · 记直觉
B 站搜 PPO 强化学习 通俗 看 20 分钟。记:
PPO = 一种强化学习算法直觉:让模型多做"被奖励的行为",但每次改一点点(不剧烈),防止越改越乱"近端策略优化" = 新的策略和旧策略别差太远- 面试问"RLHF 里的 PPO 干嘛的":答"让模型根据奖励优化行为,且更新幅度可控"就够了。
Subsection 2 · 一句话串联
写:预训练(读书) → SFT(学说话) → 奖励模型(有裁判) → PPO(被裁判训练得更听话)
过关:能把这条链讲顺 = Section 4 完成。
Section 5 · 分布式训练实操认识
Subsection 1 · 记三种并行
B 站搜 分布式训练 数据并行 模型并行 流水线 看 20 分钟。记:
数据并行 一台机器存一个模型副本,各算各的数据,最后同步梯度模型并行 一个模型太大,拆开放在多张卡流水线并行 层按顺序分给多张卡,像工厂流水线Subsection 2 · 动手看你的 GPU
cmd 输入:nvidia-smi
- 预期看到:显卡信息表(如果你的电脑有 NVIDIA 独显)。没有也没关系,说明用 CPU 学习。
- 记下你的显存大小(比如 8GB/16GB),后面 Part 14/17 算"能跑多大模型"要用。
过关:能说出三种并行 + 知道自己的显存 = Section 5 完成。
Section 6 · 精读一篇论文:BERT(或 ChatGLM 解读)
Subsection 1 · 精读
- B 站搜
BERT 论文 通俗 解读看 30 分钟。 - 然后打开 https://zhuanlan.zhihu.com/p/46652512 (BERT 论文中文笔记)读前 60%。
Subsection 2 · 写 200 字读后感 包含:BERT 用了什么架构(Transformer Encoder)、预训练做了什么(掩码预测 + 下一句预测)、为什么它影响深远。
过关:读后感写完 = Section 6 完成。
Section 7 · 复盘站 2 全部内容
Subsection 1 · 自测问答 不看资料,回答(写下来或打字):
- 判别式 vs 生成式?
- Transformer 自注意力解决什么问题?
- 预训练→SFT→RLHF 三步各干嘛?
- CoT 是什么、为什么有用?
- 词向量从 Word2Vec 到 BERT 进化了什么?
- FlashAttention / PagedAttention 各解决什么?
- 我电脑显存多少、能跑多大模型?
Subsection 2 · 修漏 答不出的题,回到对应 Day 再看一遍,直到 7 题全对。
过关:7 题全对 = Section 7 完成。
Section 8 · 站 2 总验收(全部 30 天)
Subsection 1 · 最终勾选
- Part 2 九项全过(Part 2 · Section 10 清单)
- Part 3 十一项全过(Part 3 · Section 12 清单)
- 迷你语言模型两段代码跑通(Section 1/24)
- 能画并讲清 RLHF 三步流程(Section 3/26)
- 知道三种并行 + 自己机器显存(Section 5)
- BERT 读后感写完(Section 6)
- 29 天七问全对(Section 7)
Subsection 2 · 写一份 500 字Part 4 总结 把你理解的"大模型是怎么工作的"从头到尾写一遍。写完 = Part 4 全部完成。
Part 4 结束。你已经有"应用开发者里比较懂原理"的底子了。 接下来进入真正的工程主线:Part 5 · Prompt 提示词工程。
