返回学习路线

AI 学习路线 · 进阶

Part 4 · 大模型原理 · 进阶可选

从零写迷你模型、RLHF、PPO、分布式训练实操等进阶内容


Section 1 · 从零写一个迷你"预测下一个词"模型

Subsection 1 · 跑代码 VS Code 新建 mini_lm.py:

python
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:

python
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 · 看精读

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 · 精读

Subsection 2 · 写 200 字读后感 包含:BERT 用了什么架构(Transformer Encoder)、预训练做了什么(掩码预测 + 下一句预测)、为什么它影响深远。

过关:读后感写完 = Section 6 完成。


Section 7 · 复盘站 2 全部内容

Subsection 1 · 自测问答 不看资料,回答(写下来或打字):

  1. 判别式 vs 生成式?
  2. Transformer 自注意力解决什么问题?
  3. 预训练→SFT→RLHF 三步各干嘛?
  4. CoT 是什么、为什么有用?
  5. 词向量从 Word2Vec 到 BERT 进化了什么?
  6. FlashAttention / PagedAttention 各解决什么?
  7. 我电脑显存多少、能跑多大模型?

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 提示词工程。