Skip to content

Commit 17cf5d1

Browse files
committed
docs(core): update MDP, DQN, PG, Actor-Critic, and PPO chapters
1 parent 1913ce8 commit 17cf5d1

14 files changed

Lines changed: 64 additions & 56 deletions

File tree

docs/chapter03_mdp/bandit.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -393,11 +393,11 @@ $$\{1,2\}, \{1,3\}, \{1,4\}, \{2,3\}, \{2,4\}, \{3,4\}$$
393393

394394
规则很简单:只要 B 那一列数字比 A 大,这个格子就算误判。把所有"误判格子"的概率加起来,结果大约是:
395395

396-
$$P(\text{误判}) \approx 18.5\%$$
396+
$$P(\text{误判}) \approx 12.8\%$$
397397

398-
这句话的意思是:虽然 A 真实更好,但如果只各试 10 次,差不多每 5 次完整实验里,就有 1 次会被短期样本骗到,误以为 B 更好。
398+
这句话的意思是:虽然 A 真实更好,但如果只各试 10 次,差不多每 8 次完整实验里,就有 1 次会被短期样本骗到,误以为 B 更好。
399399

400-
::: details 补充:18.5% 是怎么加出来的?
400+
::: details 补充:12.8% 是怎么加出来的?
401401

402402
如果要把上面的"误判格子"写成数学,就是:
403403

@@ -426,7 +426,7 @@ $$+P(A\text{中}1)P(B\text{至少中}2)$$
426426

427427
$$+\cdots+P(A\text{中}9)P(B\text{中}10)$$
428428

429-
$$\approx 18.5\%$$
429+
$$\approx 12.8\%$$
430430

431431
这里有两个小逻辑:
432432

@@ -438,11 +438,11 @@ $$\approx 18.5\%$$
438438

439439
$$\mathbb{E}[R_{100} \mid \text{误判}] = 0 + 80 \times (-0.2) = -16$$
440440

441-
策略 3 最终拿多少分,取决于你"运气好不好":有 81.5% 的概率猜对了(拿 16 分),有 18.5% 的概率猜错了(亏 16 分)。期望回报就是把这两种结果按概率加权平均:
441+
策略 3 最终拿多少分,取决于你"运气好不好":有 87.2% 的概率猜对了(拿 16 分),有 12.8% 的概率猜错了(亏 16 分)。期望回报就是把这两种结果按概率加权平均:
442442

443-
$$\mathbb{E}[R_{100}] = 81.5\% \times 16 + 18.5\% \times (-16) \approx 10.1$$
443+
$$\mathbb{E}[R_{100}] = 87.2\% \times 16 + 12.8\% \times (-16) \approx 11.9$$
444444

445-
比不考虑误判的 16 低了将近 6 分。这个下降不是计算细节,而是主题本身:**动作价值估计错了,后面的利用就会错。**
445+
比不考虑误判的 16 低了将近 4 分。这个下降不是计算细节,而是主题本身:**动作价值估计错了,后面的利用就会错。**
446446

447447
注意,这只是 A 和 B 差距较大的情况(60% vs 40%)。如果两台机器的差距更小,比如 52% vs 48%,误判概率会飙升到接近 50%——几乎等于抛硬币决定后 80 轮的命运。
448448

@@ -581,9 +581,9 @@ Regret 的定义很直觉:假设你从一开始就知道哪台机器最优,1
581581
| -------- | ---------- | --------------- |
582582
| 均匀随机 | 0 分 | 20 − 0 = **20** |
583583
| 始终选 A | 20 分 | 20 − 20 = **0** |
584-
| 先试后定 | 16 | 20 − 16 = **4** |
584+
| 先试后定 | ≈12| 20 − 12 ≈ **8** |
585585

586-
Regret 越小,策略越好。均匀随机每 100 轮"白亏" 20 分,先试后定只亏 4 分,始终选 A 不亏——但前提是你得一开始就知道 A 更好,现实中不可能。
586+
Regret 越小,策略越好。均匀随机每 100 轮"白亏" 20 分,先试后定亏约 8 分(含探索成本与误判损失),始终选 A 不亏——但前提是你得一开始就知道 A 更好,现实中不可能。
587587

588588
**RL 的目标,就是设计出 Regret 增长尽可能慢的策略。** 前面提到的 UCB 和 Thompson Sampling,正是学界在这条路上找到的最优解——它们的 Regret 随时间以对数速率增长,达到了理论下界 [^4]。感兴趣的同学可以进一步阅读参考文献。
589589

docs/chapter04_dqn/intro.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,14 @@ Q-Learning 的表格在这些高维状态空间面前不再适用。
4545

4646
## 章节安排
4747

48-
| 小节 | 核心问题 |
49-
| -------------------------------------------------- | ---------------------------------------------------- |
50-
| [动手:Q-Learning 与 GridWorld](./q-learning) | GridWorld 游戏跑起来,Q 值怎么收敛?原理是什么? |
48+
| 小节 | 核心问题 |
49+
| --------------------------------------------------------------- | ---------------------------------------------------- |
50+
| [动手:Q-Learning 与 GridWorld](./q-learning) | GridWorld 游戏跑起来,Q 值怎么收敛?原理是什么? |
5151
| [为什么需要 DQN:Q 表格的局限与神经网络的替代](./from-q-to-dqn) | Q-Learning 的表格为什么装不下?神经网络怎么替代? |
52-
| [DQN 三大组件](./dqn-components) | Q-Network、经验回放、目标网络分别解决什么问题? |
53-
| [观察训练过程](./training-analysis) | 经验回放和目标网络各自起了什么作用? |
54-
| [DQN 家族与视角迁移](./dqn-family) | 从 Double DQN 到 Rainbow,DQN 的思想如何延续到 LLM? |
55-
| [项目:DQN 实战与视觉游戏](./visual-game-projects) | CartPole 从零实现,再迁移到 Atari、ViZDoom、宝可梦 |
52+
| [DQN 三大组件](./dqn-components) | Q-Network、经验回放、目标网络分别解决什么问题? |
53+
| [观察训练过程](./training-analysis) | 经验回放和目标网络各自起了什么作用? |
54+
| [DQN 家族与视角迁移](./dqn-family) | 从 Double DQN 到 Rainbow,DQN 的思想如何延续到 LLM? |
55+
| [项目:DQN 实战与视觉游戏](./visual-game-projects) | CartPole 从零实现,再迁移到 Atari、ViZDoom、宝可梦 |
5656

5757
## 学习目标
5858

docs/chapter04_dqn/q-learning.md

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -74,13 +74,13 @@ GridWorld 有很多变体。我们用的是最简单的"空地"版本——所
7474

7575
第 3 章我们学过,任何 RL 问题都可以用 MDP 五元组 $\langle \mathcal{S}, \mathcal{A}, P, R, \gamma \rangle$ 来描述。GridWorld 也不例外。为什么要做这一步?因为 MDP 是所有 RL 算法的**共同语言**——不管你用 Q-Learning、DQN 还是 PPO,底层都在解同一个 MDP。先把问题描述清楚,后面选什么算法才有依据。
7676

77-
| MDP 要素 | GridWorld 的具体含义 | 直觉 |
78-
|----------|---------------------|------|
79-
| $\mathcal{S}$(状态集合) | 16 个格子,编号 0~15 | "你在网格里的哪个位置" |
80-
| $\mathcal{A}$(动作集合) | {↑, →, ↓, ←},4 个方向 | "你往哪走" |
81-
| $P$(转移概率) | 确定性:向右走就一定向右移一格,撞墙不动 | "你选了方向,环境怎么反应" |
82-
| $R$(奖励函数) | 每步 -1,到达 G 奖励 0 | "走一步扣 1 分,鼓励你走最短路" |
83-
| $\gamma$(折扣因子) | 0.9 | "未来的惩罚比眼前的惩罚轻一点" |
77+
| MDP 要素 | GridWorld 的具体含义 | 直觉 |
78+
| ------------------------- | ---------------------------------------- | ------------------------------- |
79+
| $\mathcal{S}$(状态集合) | 16 个格子,编号 0~15 | "你在网格里的哪个位置" |
80+
| $\mathcal{A}$(动作集合) | {↑, →, ↓, ←},4 个方向 | "你往哪走" |
81+
| $P$(转移概率) | 确定性:向右走就一定向右移一格,撞墙不动 | "你选了方向,环境怎么反应" |
82+
| $R$(奖励函数) | 每步 -1,到达 G 奖励 0 | "走一步扣 1 分,鼓励你走最短路" |
83+
| $\gamma$(折扣因子) | 0.9 | "未来的惩罚比眼前的惩罚轻一点" |
8484

8585
### 第二步:从 MDP 到 Q 表格——为什么需要给每个动作打分?
8686

@@ -173,11 +173,11 @@ $$G_0 = -1 - 0.9 - 0.81 - 0.729 - 0.656 - 0.590 - 0.531 - 0.478 - 0.430 + 0 = \m
173173

174174
**对比**
175175

176-
| 路径 | 步数 | 回头次数 | $G_0$ | 多扣的分 |
177-
|------|------|---------|--------|---------|
178-
| 最短路径 | 6 | 0 | **-4.10** ||
179-
| 绕远路 | 8 | 1 | **-5.22** | 比 shortest 多扣 1.12 |
180-
| 乱走 | 10 | 2 | **-6.13** | 比 shortest 多扣 2.03 |
176+
| 路径 | 步数 | 回头次数 | $G_0$ | 多扣的分 |
177+
| -------- | ---- | -------- | --------- | --------------------- |
178+
| 最短路径 | 6 | 0 | **-4.10** | |
179+
| 绕远路 | 8 | 1 | **-5.22** | 比 shortest 多扣 1.12 |
180+
| 乱走 | 10 | 2 | **-6.13** | 比 shortest 多扣 2.03 |
181181

182182
折扣因子 $\gamma$ 的作用:越晚扣的分越"便宜"($0.9^t$ 越来越小),但多走一步就是多扣一分。$\gamma < 1$ 让智能体既想尽快到达终点,又不用把每一步看得一样重。Q-Learning 的目标就是学出一张打分表,让智能体在每一步都选出总扣分最少的方向。
183183

@@ -726,12 +726,12 @@ print(f"\n后 100 轮平均回报: Q-Learning={np.mean(r_ql[-100:]):.1f}, SARSA=
726726

727727
## 参考文献
728728

729-
[^1]: Watkins, C. J. C. H. (1989). *Learning from delayed rewards*. PhD thesis, King's College, Cambridge. — Q-Learning 算法的原始提出,首次定义了动作价值函数 $Q(s,a)$ 并给出了通过试错学习 Q 值的算法框架。
729+
[^1]: Watkins, C. J. C. H. (1989). _Learning from delayed rewards_. PhD thesis, King's College, Cambridge. — Q-Learning 算法的原始提出,首次定义了动作价值函数 $Q(s,a)$ 并给出了通过试错学习 Q 值的算法框架。
730730

731-
[^5]: Watkins, C. J. C. H., & Dayan, P. (1992). Q-learning. *Machine Learning*, 8(3), 279–292. https://doi.org/10.1007/BF00992698 — Q-Learning 的收敛性证明,证明了在满足一定条件下 Q-Learning 保证收敛到最优动作价值 $Q^*$。
731+
[^5]: Watkins, C. J. C. H., & Dayan, P. (1992). Q-learning. _Machine Learning_, 8(3), 279–292. https://doi.org/10.1007/BF00992698 — Q-Learning 的收敛性证明,证明了在满足一定条件下 Q-Learning 保证收敛到最优动作价值 $Q^*$。
732732

733-
[^2]: Rummery, G. A., & Niranjan, M. (1994). *On-line Q-learning using connectionist systems*. Technical Report CUED/F-INFENG/TR 166, Cambridge University Engineering Department. — SARSA 算法的原始论文,提出了 Q-Learning 的 on-policy 版本。
733+
[^2]: Rummery, G. A., & Niranjan, M. (1994). _On-line Q-learning using connectionist systems_. Technical Report CUED/F-INFENG/TR 166, Cambridge University Engineering Department. — SARSA 算法的原始论文,提出了 Q-Learning 的 on-policy 版本。
734734

735-
[^3]: Sutton, R. S., & Barto, A. G. (2018). *Reinforcement Learning: An Introduction* (2nd ed.). MIT Press. http://incompleteideas.net/book/the-book.html — 强化学习经典教材,GridWorld 环境的系统介绍和 Q-Learning/SARSA 的详细推导。
735+
[^3]: Sutton, R. S., & Barto, A. G. (2018). _Reinforcement Learning: An Introduction_ (2nd ed.). MIT Press. http://incompleteideas.net/book/the-book.html — 强化学习经典教材,GridWorld 环境的系统介绍和 Q-Learning/SARSA 的详细推导。
736736

737737
[^4]: CliffWalking 环境: Gymnasium 文档 https://gymnasium.farama.org/environments/toy_text/cliff_walking/ — CliffWalking-v0 的官方环境说明。

docs/chapter04_dqn/visual-game-projects.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ Q(s,a;\theta) \approx r + \gamma \max_{a'} Q(s',a';\theta^-) \quad \text{(DQN
1717
$$
1818

1919
> **DQN TD Target:**
20+
>
2021
> - $\theta$:在线 Q-Network 的参数,每步更新。
2122
> - $\theta^-$:目标网络参数,定期从 $\theta$ 复制过来,保持 TD Target 短期内稳定。
2223
> - $\max_{a'} Q(s',a';\theta^-)$:目标网络对下一状态所有动作 Q 值取最大,代表"未来能拿到的最好分数"。
@@ -26,6 +27,7 @@ $$
2627
$$
2728

2829
> **DQN 损失函数:**
30+
>
2931
> - $\mathcal{D}$:经验回放池,存储历史转移 $(s,a,r,s')$ 并随机采样,打破训练数据的时间相关性。
3032
> - 括号内即 TD Error $\delta = r + \gamma \max_{a'} Q(s',a';\theta^-) - Q(s,a;\theta)$,对它取均方就得到损失。
3133

docs/chapter05_policy_gradient/baseline-experiment.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@
55
但 REINFORCE 有一个致命问题——方差太大。这一节我们用一个简单但有效的改进来压制噪声:**减掉一个基线**。通过对比实验,亲眼看看有基线和没基线的差距。
66

77
::: tip 本节会用到的前置知识
8+
89
- [策略梯度公式](../chapter03_mdp/policy-objective) $\nabla_\theta J \propto \mathbb{E}[\nabla_\theta \log \pi_\theta(a|s) \cdot G_t]$——基线要加在哪个公式里
910
- [状态价值 $V(s)$](../chapter03_mdp/bellman-equation)——最好的基线是什么
1011
- [MC 方法](../chapter03_mdp/dp-mc-td)——为什么 REINFORCE 必须跑完 episode 才能更新
11-
:::
12+
:::
1213

1314
## 实验设计
1415

docs/chapter06_actor_critic/actor-critic.md

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@
33
前两节我们认识了[优势函数](./advantage-function) $A(s,a)$ 和 [Critic 的训练方法](./critic-training)。现在让我们把所有零件组装起来,看看 Actor 和 Critic 是如何协作的。
44

55
::: tip 本节会用到的前置知识
6+
67
- [优势函数 $A(s,a) = Q(s,a) - V(s)$](./advantage-function)——"这个动作比平均好了多少"
78
- [TD Error $\delta = r + \gamma V(s') - V(s)$](./critic-training)——优势函数的实用估计
89
- [策略梯度 $\nabla_\theta J \approx \nabla_\theta \log \pi(a|s) \cdot G_t$](../chapter05_policy_gradient/policy-gradient)——Actor 的更新公式
910
- [REINFORCE 与基线实验](../chapter05_policy_gradient/baseline-experiment)——从 $G_t$ 到 $G_t - V(s)$ 的动机
10-
:::
11+
:::
1112

1213
## 从 REINFORCE 到 Actor-Critic:关键的一步
1314

@@ -195,11 +196,11 @@ Actor-Critic 在 CartPole 上通常在 200-300 个 episode 内就能稳定到 50
195196

196197
Actor-Critic 不是终点,而是一个骨架。后续章节中你会看到它的各种变体:
197198

198-
| 章节 | 变体 | 关键改进 |
199-
| ----------------------- | ----------------- | ------------------------------------------------- |
200-
| [第 7 章 PPO](../chapter07_ppo/intro) | PPO-Clip | 限制策略更新幅度,防止"步子迈太大" |
201-
| [第 7 章 GAE](../chapter07_ppo/gae-reward-model) | 广义优势估计 | 多步 TD Error 的指数加权和,精确控制偏差-方差权衡 |
202-
| [第 9 章 DPO](../chapter09_alignment/intro) | 隐式 Actor-Critic | 用偏好数据替代 Critic,去掉 on-policy 的限制 |
199+
| 章节 | 变体 | 关键改进 |
200+
| ------------------------------------------------------------------ | ----------------- | ------------------------------------------------- |
201+
| [第 7 章 PPO](../chapter07_ppo/intro) | PPO-Clip | 限制策略更新幅度,防止"步子迈太大" |
202+
| [第 7 章 GAE](../chapter07_ppo/gae-reward-model) | 广义优势估计 | 多步 TD Error 的指数加权和,精确控制偏差-方差权衡 |
203+
| [第 9 章 DPO](../chapter09_alignment/intro) | 隐式 Actor-Critic | 用偏好数据替代 Critic,去掉 on-policy 的限制 |
203204
| [第 9 章 GRPO](../chapter09_grpo_rlvr/grpo-practice-and-mechanism) | 去掉 Critic | 用组内均值替代 $V(s)$,省掉一个网络 |
204205

205206
所有的变体都共享同一个骨架:一个负责选择的网络 + 一个负责评估的信号。变化的只是"评估信号怎么来"和"选择网络怎么更新"。

docs/chapter06_actor_critic/advantage-function.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@
33
第 5 章末尾我们发现:减掉基线 $V(s)$ 可以降低策略梯度的方差,而不改变梯度的方向。本节将深入这个关键洞察,引出优势函数——它是连接 Actor 和 Critic 的桥梁。
44

55
::: tip 本节会用到的前置知识
6+
67
- [REINFORCE 策略梯度](../chapter05_policy_gradient/policy-gradient) $\nabla_\theta J \approx \nabla_\theta \log \pi(a|s) \cdot G_t$——基线要加在哪里
78
- [状态价值 $V(s)$](../chapter03_mdp/bellman-equation)——最好的基线是什么
89
- [动作价值 $Q(s,a)$](../chapter03_mdp/value-q)——优势函数的定义依赖 $Q$ 和 $V$ 的差
910
- [TD Error](../chapter03_mdp/dp-mc-td) $\delta = r + \gamma V(s') - V(s)$——优势函数的实用估计方法
10-
:::
11+
:::
1112

1213
## 从基线到优势函数
1314

docs/chapter06_actor_critic/alphago.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@
1212

1313
AlphaGo 由三个核心组件构成:
1414

15-
| 组件 | 作用 | 对应本章概念 |
16-
| -------------- | -------------------------- | ----------------------------------------- |
15+
| 组件 | 作用 | 对应本章概念 |
16+
| -------------- | -------------------------- | --------------------------------------------------------------- |
1717
| 策略网络 | 给出每个合法落子位置的概率 | [第 5 章策略梯度](../chapter05_policy_gradient/policy-gradient) |
18-
| 价值网络 | 评估当前局面的胜率 | [第 6.2 节 Critic 训练](./critic-training) |
19-
| 蒙特卡洛树搜索 | 向前看若干步,找到最佳落子 | 这一节新引入 |
18+
| 价值网络 | 评估当前局面的胜率 | [第 6.2 节 Critic 训练](./critic-training) |
19+
| 蒙特卡洛树搜索 | 向前看若干步,找到最佳落子 | 这一节新引入 |
2020

2121
它们的关系是:MCTS 是"大脑",策略网络提供"直觉"(优先搜索哪些分支),价值网络提供"判断"(不用搜到底就能评估局面)。
2222

@@ -578,13 +578,13 @@ def env_to_string(board):
578578

579579
把 AlphaGo 的每个组件对应回本章学过的知识:
580580

581-
| AlphaGo 组件 | 对应概念 | 出处 |
582-
| ------------- | ------------------------ | -------------------------------------- |
581+
| AlphaGo 组件 | 对应概念 | 出处 |
582+
| ------------- | ------------------------ | ------------------------------------------------------------ |
583583
| 策略网络 | Actor,输出动作概率 | [策略梯度定理](../chapter05_policy_gradient/policy-gradient) |
584-
| 价值网络 | Critic,评估局面价值 | [Actor-Critic 架构](./actor-critic) |
584+
| 价值网络 | Critic,评估局面价值 | [Actor-Critic 架构](./actor-critic) |
585585
| MCTS 策略监督 | 降低方差的"可靠策略信号" | [基线实验](../chapter05_policy_gradient/baseline-experiment) |
586-
| 自我对弈 | 在线采样 + 策略改进 | REINFORCE 的采样思想 |
587-
| $-v$ 回传 | 零和博弈的对称性 | [优势函数](./advantage-function)的符号翻转 |
586+
| 自我对弈 | 在线采样 + 策略改进 | REINFORCE 的采样思想 |
587+
| $-v$ 回传 | 零和博弈的对称性 | [优势函数](./advantage-function)的符号翻转 |
588588

589589
你会发现:AlphaGo 的核心就是 Actor-Critic + MCTS 搜索。策略网络(Actor)提供搜索方向,价值网络(Critic)提供叶子节点评估,MCTS 把两者组合成比任何单一组件都强的决策。这个"Actor 提供先验 + Critic 提供评估 + 搜索做整合"的模式,后来被 AlphaZero 推广到国际象棋和将棋,也影响了后续许多 RL 算法的设计。
590590

docs/chapter06_actor_critic/critic-training.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@
33
上一节定义了优势函数 $A(s,a) \approx \delta = r + \gamma V(s') - V(s)$,并引出了 Critic 网络作为 $V(s)$ 的估计器。本节展开第 3 章速览过的 [DP、MC、TD](../chapter03_mdp/dp-mc-td) 三种方法在 Critic 训练中的具体实现。
44

55
::: tip 本节会用到的前置知识
6+
67
- [DP/MC/TD 三种价值估计方法](../chapter03_mdp/dp-mc-td)——三种方法的原理和对比
78
- [贝尔曼期望方程](../chapter03_mdp/bellman-equation)——DP 更新的理论基础
89
- [TD Error $\delta$](../chapter03_mdp/dp-mc-td)——TD 方法的核心信号
9-
:::
10+
:::
1011

1112
## DP:理论基准
1213

0 commit comments

Comments
 (0)