📑 本页目录(点开跳转)
附录 A · 速查
📌
Ctrl+F搜。不要通读。
🔑 一张表:每个算法在解什么
| 算法 | 解决什么 | 章节 |
|---|---|---|
| 价值迭代 / 策略迭代 | 知道环境模型时求最优策略 | 04 |
| 蒙特卡洛 | 不知道模型,等回合结束再更新 | 05 |
| TD(0) | 不知道模型,每步就能更新 ⭐ | 05 |
| SARSA | on-policy 控制(学"我实际会走的"策略) | 06 |
| Q-learning | off-policy 控制(学最优策略)⭐ | 06 |
| DQN | 状态太多存不下 → 神经网络逼近 | 08 |
| REINFORCE | 直接优化策略(能处理连续动作) | 09 |
| Actor-Critic | 用 Critic 降低策略梯度的方差 ⭐ | 10 |
| PPO | 限制更新幅度,防止策略崩溃 ⭐⭐ | 11 |
| DPO | 跳过 RM 和 PPO,直接从偏好学 | 13 |
📐 核心公式
回报与价值
$$G_t = r_{t+1} + \gamma r_{t+2} + \gamma^2 r_{t+3} + \cdots$$ $$V^\pi(s) = \mathbb{E}_\pi[G_t \mid s_t = s],\qquad Q^\pi(s,a) = \mathbb{E}_\pi[G_t\mid s_t=s, a_t=a]$$
💡 V 是"在这个状态有多好",Q 是"在这个状态做这个动作有多好"
⭐ 贝尔曼方程(整个领域的地基)
$$V^\pi(s) = \sum_a \pi(a|s)\sum_{s'} P(s'|s,a)\big[r + \gamma V^\pi(s')\big]$$
贝尔曼最优方程:
$$V^*(s) = \max_a \sum_{s'} P(s'|s,a)\big[r+\gamma V^*(s')\big]$$
💡 人话:这个状态的价值 = 眼前的奖励 + 下一个状态的价值(打个折)。 后面所有算法都是在用不同办法解这个方程。
TD 更新
$$V(s) \leftarrow V(s) + \alpha\underbrace{\big[r + \gamma V(s') - V(s)\big]}_{\text{TD 误差 }\delta}$$
Q-learning vs SARSA(一个 max 的区别)
$$\text{Q-learning: } Q(s,a)\leftarrow Q(s,a)+\alpha[r+\gamma\underbrace{\max_{a'}Q(s',a')}_{\text{最优动作}}-Q(s,a)]$$
$$\text{SARSA: } Q(s,a)\leftarrow Q(s,a)+\alpha[r+\gamma\underbrace{Q(s',a')}_{\text{实际会走的}}-Q(s,a)]$$
💡 就差一个 max —— 但这决定了 off-policy 还是 on-policy
策略梯度
$$\nabla J(\theta) = \mathbb{E}\big[\nabla\log\pi_\theta(a|s)\cdot A(s,a)\big]$$
💡 好动作提高概率、坏动作降低概率,幅度按"有多好"
GAE
$$A^{GAE(\lambda)}_t = \sum_{l\ge0}(\gamma\lambda)^l\delta_{t+l}$$
💡 λ=0 → 单步 TD(偏差大);λ=1 → 蒙特卡洛(方差大);常用 0.95
⭐ PPO 裁剪目标
$$L = \mathbb{E}\Big[\min\big(r_tA_t,\ \text{clip}(r_t,1-\epsilon,1+\epsilon)A_t\big)\Big],\quad r_t=\frac{\pi_\theta}{\pi_{old}}$$
💡 迈大步没有额外奖励 —— 所以不会迈大步
奖励模型 / DPO
$$L_{RM} = -\log\sigma\big(r_{win}-r_{lose}\big)$$
$$L_{DPO} = -\log\sigma\Big(\beta\log\tfrac{\pi_\theta(y_w)}{\pi_{ref}(y_w)} - \beta\log\tfrac{\pi_\theta(y_l)}{\pi_{ref}(y_l)}\Big)$$
💡 DPO = 把 RM 的公式直接套在策略的对数比上
🎛️ 超参速查
| 超参 | 常用值 | 说明 |
|---|---|---|
| γ(折扣) | 0.99 | 越大越看重长期;RLHF 常设 1.0 |
| α(学习率) | 3e-4 | RLHF 用 1e-6~1e-5 ⭐ |
| ε(探索) | 1.0 → 0.05 线性衰减 | DQN |
| clip ε | 0.2 | PPO ⭐ |
| GAE λ | 0.95 | ⭐ |
| K_EPOCHS | 3–10 | PPO;RLHF 用 1–4 |
| 熵系数 | 0.01 | RLHF 常设 0 |
| 梯度裁剪 | 0.5 | 必加 ⭐ |
| 回放缓冲 | 1e5 – 1e6 | DQN |
| 目标网络更新 | 每 1000 步 | DQN |
| DPO 的 β | 0.1 | 太小会剧烈偏离参考模型 |
⚠️ 十个最容易搞混的地方
| 容易混 | 区别 |
|---|---|
| V 和 Q | V 是状态的价值,Q 是状态-动作对的价值 |
| on-policy vs off-policy | 学的策略是不是采数据的那个策略 ⭐ |
| SARSA vs Q-learning | 一个 max:SARSA 用实际会走的动作,Q-learning 用最优动作 |
| 回报 vs 奖励 | 奖励是单步的 r,回报是折扣累计 G |
| 优势 vs Q | A = Q − V,只保留"比平均好多少" ⭐ |
| 蒙特卡洛 vs TD | MC 等回合结束(无偏高方差),TD 每步更新(有偏低方差) |
| PPO 的 clip vs RLHF 的 KL 惩罚 | ⭐ clip 管"这步别更新太多",KL 管"整体别偏离 SFT 太远" |
| 探索 vs 随机 | 探索是有目的地收集信息,不是纯随机 |
| 奖励攻击 vs 过拟合 | 奖励攻击是钻评分器的漏洞,模型在真实目标上更差了 |
| DPO 的 β vs PPO 的 β | 都控制"离参考模型多远",但作用机制不同 |
🩺 故障诊断表
| 症状 | 可能原因 |
|---|---|
| 完全不学习 | 学习率太小 / 奖励尺度不对 / 忘了 detach() / 优势没标准化 |
| 学一半崩掉 | 学习率太大 / 没有梯度裁剪 / K_EPOCHS 太多 ⭐ |
| Q 值爆炸到很大 | 忘了 (1-done) ⭐ / γ 太接近 1 / 没有目标网络 |
| 策略过早收敛 | 熵奖励太小 ⭐ / ε 衰减太快 |
| 不同种子结果差很多 | ⚠️ 这是 RL 的常态 —— 必须报告多种子统计 |
| 训练分数高但评估低 | 评估时忘了关掉探索(ε 应设 0)⭐ |
| RLHF 奖励涨但输出变差 | 奖励攻击 —— 盯 KL 散度,早停 ⭐ |
📖 术语对照
| 中文 | 英文 | 一句话 |
|---|---|---|
| 马尔可夫决策过程 | MDP | 状态/动作/转移/奖励/折扣 五元组 |
| 策略 | Policy | 状态 → 动作(的概率分布) |
| 回报 | Return | 折扣累计奖励 |
| 价值函数 | Value Function | 从某状态出发的期望回报 |
| 优势函数 | Advantage | 这个动作比平均好多少 |
| 自举 | Bootstrapping | 用自己的估计去更新自己 ⭐ |
| 同策略 / 异策略 | on-policy / off-policy | 学的和采的是不是同一个策略 |
| 经验回放 | Experience Replay | 存历史数据反复采样 |
| 目标网络 | Target Network | 冻结的副本,稳定训练目标 |
| 探索利用 | Exploration-Exploitation | 试新的 vs 用已知最好的 |
| 奖励攻击 | Reward Hacking | 钻评分器漏洞而非真的变好 ⭐ |
| 可验证奖励 | RLVR | 用单元测试/答案正确性当奖励 ⭐ |
🔗 跨教程速查
| 这里学的 | 在哪里被用到 |
|---|---|
| 探索与利用 / Thompson Sampling | 推荐算法 · 冷启动 |
| PPO + RLHF | 全景导论 · 训练三阶段 ⭐ |
| DPO / 对齐 | 全景导论 · 对齐与安全 |
| MDP / 序贯决策 | 智能体工程教程 |
| 偏差-方差(TD vs MC) | 数学原理 · 偏差方差分解 |
| 优化器(Adam / 学习率调度) | ML 基础 · 优化器与学习率 |
| 梯度裁剪(附录里那个 0.5、第 8 章代码里那个 10) | ML 基础 · RNN与序列建模 —— 梯度为什么会爆、max_norm 怎么设,讲得最全的是这里 |
👉 回到首页