强化学习超详细教程:第2章 - 经典算法(DP/TD/Q-Learning/DQN/PPO)
本章是强化学习系列第 2 章:把经典算法讲成一套可选型、可调参的工具箱。
风格:专业 + 科普。关键步骤给出简单公式,并解释每个符号/参数在干什么;同时讲清「为什么 → 怎么调 → 效果 → 被什么取代/还能增强什么」。
目标:能选型、能调参、能读懂论文里的核心更新式,而不是背推导。
预计时间:3–4 周(每天 2–4 小时)
前置:第1章 搞清状态 、动作 、奖励 、策略 、回报 ;会跑 Python 即可。
0. 本阶段你将得到什么
Section titled “0. 本阶段你将得到什么”学完后,你应能:
- 用白话 + 1~2 个核心公式,说清 DP / TD / Q-learning / DQN / REINFORCE / PPO 各自在优化什么。
- 指出每个算法关键旋钮(学习率、、、clip 等)调大/调小的后果。
- 说明一代算法解决了上一代的什么痛点,又被什么方向增强或取代。
- 结合生物 / 多组学 / 序列任务做第一推荐算法。
配套代码:
| 文件 | 作用 |
|---|---|
dp_value_iteration.py | 有模型时算出 与 |
dqn_cartpole.py | 最小 DQN:回放 + 目标网络 |
ppo_cartpole_sb3.py | PPO 一键收敛曲线 |
📥 配套代码可直接下载运行:dp_value_iteration.py · dqn_cartpole.py · ppo_cartpole_sb3.py
读公式的约定(全篇通用)
Section titled “读公式的约定(全篇通用)”| 符号 | 含义 | 调它时你在改什么 |
|---|---|---|
| 状态、动作、奖励、下一状态 | 问题建模本身 | |
| 折扣:多在乎未来 | 越大越有远见,学得更难、更慢 | |
| 或学习率 | 一次更新走多远 | 太大震荡,太小爬不动 |
| 策略:在 选 的概率 | 策略类方法直接改它 | |
| 状态价值:从 出发平均能得多少 | 评委打分 | |
| 动作价值:在 做 再按策略走的期望回报 | 给「局面+选择」打分 | |
| 从时刻 起的折扣回报 | MC 的「真实总分」 |
1. 一张图看懂算法家族
Section titled “1. 一张图看懂算法家族”flowchart TB
subgraph 要不要环境模型
MB[有模型<br/>已知转移与奖励]
MF[无模型<br/>只靠交互采样]
end
subgraph 有模型
DP[动态规划<br/>Value / Policy Iteration]
end
subgraph 学价值再选动作
MC[蒙特卡洛]
TD[时间差分 TD]
QL[Q-learning / SARSA]
DQN[DQN 及变体]
end
subgraph 直接学策略
PG[REINFORCE]
AC[Actor-Critic]
PPO[PPO 等]
end
MB --> DP
MF --> MC
MF --> TD
TD --> QL
QL --> DQN
MF --> PG
PG --> AC
AC --> PPO | 主线 | 在干什么 | 代表 | 核心更新直觉 |
|---|---|---|---|
| 价值路线 | 先估 或 ,再贪心选动作 | Q-learning、DQN | 把分打准 |
| 策略路线 | 直接改 | REINFORCE、PPO | 好动作更常出现 |
| 混合路线 | Actor 改策略,Critic 估价值 | A2C、PPO、SAC | 现代默认 |
2. 动态规划:有说明书时的「理想标尺」
Section titled “2. 动态规划:有说明书时的「理想标尺」”为什么需要它?
Section titled “为什么需要它?”若你完全知道转移 与奖励 ,就不必瞎试,可像解规划题一样算出最优策略。
真实生物实验几乎没有完整说明书,所以 DP 很少直接上生产;但它给出「最优长什么样」,后面算法都在逼近它。
关键公式(Value Iteration)
Section titled “关键公式(Value Iteration)”对每个状态,取「最好动作」的期望回报:
| 符号 | 是什么 | 白话 |
|---|---|---|
| 第 轮对状态 的估价 | 当前版本的「局面分」 | |
| 在所有动作里选最好的 | 理想最优,不将就 | |
| $P(s’ | s,a)$ | 做 后到 的概率 |
| 这次转移拿到的奖励 | 即时得分 | |
| 未来价值的折扣 | 明天的分打几折算进今天 |
收敛后,最优策略:
即:每个状态选使「即时奖励 + 折后未来」最大的动作。
Policy Iteration 直觉:先固定策略算 (评估),再贪心改策略(改进),循环直到策略不变。Value Iteration 把两步压成上面一个 。
| 旋钮 | 调大 | 调小 | 建议 |
|---|---|---|---|
| 更有远见;对模型误差更敏感 | 更短视;收敛常更快 | 0.9–0.99 | |
| 收敛阈值 | 更精、更慢 | 更粗、更快 | 教学可稍松 |
| 状态/动作数 | — | — | 一多就维数灾难 |
- 优点:精确、可复现、可当金标准。
- 缺点:必须有模型;状态一大就算不动。
- 体感:小网格 / 玩具 MDP 几乎瞬间得到最优路径。
- 运行:
python dp_value_iteration.py
后来被什么取代?能增强什么?
Section titled “后来被什么取代?能增强什么?”| 痛点 | 后续方向 | 增强了什么 |
|---|---|---|
| 没有真模型 | Model-free:MC / TD / Q-learning | 用采样代替说明书 |
| 模型不准 | 学模型再规划(MBRL)、世界模型 Dreamer | 在「想象」里多步决策 |
| 状态太大 | 神经网络近似 | 可处理图像、组学向量 |
今天仍有用:验证奖励设计;当新算法对照;学到近似模型后内部仍可做规划。
3. 蒙特卡洛 vs 时间差分:何时结算成绩?
Section titled “3. 蒙特卡洛 vs 时间差分:何时结算成绩?”两者都是 model-free:只靠真实轨迹学习。
为什么会出现这两种?
Section titled “为什么会出现这两种?”整局结束后用真实总分更新,还是每一步用「即时奖励 + 下一步估价」更新?
Monte Carlo 更新:
TD(0) 更新:
TD 误差(后面 Actor-Critic、优先回放都围着它转):
| 符号 | 含义 |
|---|---|
| 从 起真实折扣回报(整局算完才知道) | |
| 用当前价值网「估」的目标(可逐步更新) | |
| 把「预测误差」灌进 的步长 | |
| 实际比预期好()还是差() |
| MC | TD(0) | |
|---|---|---|
| 结算 | 整局结束 | 每一步 |
| 偏差 | 低(真 ) | 有(依赖当前 ) |
| 方差 | 高 | 较低 |
| 适用 | 需要明确终局 | 也可用于长期任务 |
flowchart LR
subgraph MC
A1[走完整局] --> A2[算真实 G_t] --> A3[更新 V]
end
subgraph TD
B1[走一步] --> B2[用 r+γV 作目标] --> B3[马上更新]
end 为什么 TD 更常成为主流基础?
Section titled “为什么 TD 更常成为主流基础?”- 不必等终局(实验周期长时关键)。
- 方差更小,曲线通常更稳。
- 可在线学。
代价:早期 不准时,错误会经 bootstrap 传递——所以才有目标网络、GAE 等稳定器。
| 旋钮 | 经验 |
|---|---|
| 表格 0.01–0.1 量级起步;函数近似往往更小 | |
| 长期任务 0.95–0.99 | |
| n-step / | 在「更像 MC」与「更像 TD」之间滑动 |
- MC:好懂、噪声大;深度时代很少单独当主力。
- TD:现代价值方法的更新引擎。
- :既更新价值,也给策略当「优势信号」。
后来被什么取代?能增强什么?
Section titled “后来被什么取代?能增强什么?”| 原始 | 增强 | 作用 |
|---|---|---|
| 纯 MC | GAE | 偏差–方差可调混合 |
| 单步 TD | n-step / -return | 多看几步再结算 |
| 表格 TD | 深度近似 + 回放 + 目标网 | → DQN 路线 |
今天:不必二选一;PPO 里的 GAE 就是 MC 与 TD 的可调节混合。
4. SARSA 与 Q-learning:保守还是激进?
Section titled “4. SARSA 与 Q-learning:保守还是激进?”二者都学 ,差别在下一动作怎么进入更新。
SARSA(on-policy)——下一手用策略真实会选的 :
Q-learning(off-policy)——下一手按最优估:
| 符号 | SARSA | Q-learning |
|---|---|---|
| 括号里的目标 | , | |
| 学什么 | 当前行为策略的 | 逼近最优 |
| 性格 | 保守:探索踩坑也算进评价 | 激进:可能过估计 |
flowchart TB
subgraph SARSA
S1[实际会选的 a'] --> S2[用 Q s' a' 更新]
end
subgraph Qlearning
Q1[假设选最优] --> Q2[用 max Q 更新]
end Cliff Walking:Q-learning 常贴悬崖捷径(训练掉崖多);SARSA 走内侧更安全。
| 旋钮 | 直觉 |
|---|---|
| 随机探索比例:前期高、后期降;降太快学偏 | |
| 表格可稍大;上神经网络后要小很多 | |
| 奖励尺度 | 避免数量级悬殊导致 数值爆炸 |
- 探索有真实代价(细胞死亡、设备损坏)→ 更偏 on-policy / 保守。
- 模拟器里可狂试、只关心最终最优 → Q-learning 系更常见。
- 小规模离散:表格 Q-learning 往往够用。
- 状态靠人工分箱:太粗学不好,太细表爆炸 → 逼出 DQN。
后来被什么取代?能增强什么?
Section titled “后来被什么取代?能增强什么?”| 局限 | 后续 | 增强 |
|---|---|---|
| 只能表格 | DQN | 高维观测 |
| 过估计 | Double DQN | 选动作与估值拆开 |
| 探索差 | 内在动机、噪声网络等 | 更聪明试错 |
| 离散动作 | 策略梯度 / SAC | 连续控制 |
今天仍有用:短菜单实验设计;理解 off-policy;历史日志再利用的思想源头。
5. DQN:深度学习进入 RL 的第一波浪潮
Section titled “5. DQN:深度学习进入 RL 的第一波浪潮”为什么表格不够?
Section titled “为什么表格不够?”连续状态、图像、表达谱 → 格子数爆炸,且无法对未见状态泛化。
想法:用网络 代替表格,仍按 Q-learning 选 。
朴素换网络为什么炸?
Section titled “朴素换网络为什么炸?”- 样本相关:连续轨迹很像,SGD 假设被破坏。
- 目标漂移:更新 时,目标里的 也在变 → 追移动靶。
关键公式(带目标网络)
Section titled “关键公式(带目标网络)”经验回放中采样转移 , 表示结束。TD 目标用冻结的目标网 :
损失(让在线网靠近该目标):
每隔 步:(或软更新)。
| 符号 | 含义 | 作用 |
|---|---|---|
| 在线网络 | 正在训练、用来选动作 | |
| 目标网络 | 短时间固定,提供稳定 | |
| TD 目标 | 「这一步应该值多少」 | |
| done 标记 | 终局后不再加未来价值 | |
| 回放池 | 存历史转移 | 随机采样,打断相关性 |
flowchart TB Env[环境交互] --> Buf[(Replay Buffer)] Buf -->|随机 batch| Train[最小化 L θ] Train --> Online[在线 Q_θ] Online -.->|每 C 步复制| Target[目标 Q_θ⁻] Target -->|计算 y| Train
| 旋钮 | 起点 | 调大/调小 |
|---|---|---|
| 回放容量 | – | 太小过拟合近况;太大占内存、含过旧策略 |
| 最少样本再训 | – | 太小一上来就抖 |
| 目标同步间隔 | 100–1000 | 太勤≈没目标网;太懒目标过时 |
| 衰减 | 1.0→0.01–0.05 | 太快探索不足;太慢浪费交互 |
| 学习率 | – | 不稳先降 lr |
| 奖励裁剪 | 任务相关 | Atari 常压到 |
pip install torch gymnasium matplotlib numpypython dqn_cartpole.py现象:前期乱、中期爬升、后期多数局接近满分(CartPole)。
- 历史:Atari 像素达人类级;回放 + 目标网成标配零件。
- 现实:离散动作 + 便宜模拟器仍好用;连续动作弱;易过估计;样本效率一般。
后来被什么取代?能增强什么?
Section titled “后来被什么取代?能增强什么?”| 方向 | 代表 | 增强点 |
|---|---|---|
| 过估计 | Double DQN | 在线网选 ,目标网估值 |
| 结构 | Dueling | 拆 与优势 |
| 回放 | PER | 优先学 大的样本 |
| 组合 | Rainbow | 多项打包 |
| 连续控制主流 | TD3 / SAC / PPO | 不再死磕离散 Q |
| 大模型对齐 | 较少直接用经典 DQN | 动作是整段文本 |
定位:深度 RL 必修第一站;零件(回放、目标网)广泛活在 off-policy 算法里。连续参数/生成长度 → 优先策略类。
6. REINFORCE:直接改「行为习惯」
Section titled “6. REINFORCE:直接改「行为习惯」”为什么还要策略梯度?
Section titled “为什么还要策略梯度?”价值法:先打 再贪心。但当动作连续、策略本身需随机、或你只想直接最大化任务得分时,更自然的是直接优化 。
目标:期望回报
策略梯度(REINFORCE 常用形式):
带基线降方差(不改变期望方向):
| 符号 | 含义 | 白话 |
|---|---|---|
| 参数化策略 | 神经网络输出的动作分布 | |
| 对数概率 | 方便求梯度;好动作抬概率 | |
| 从 起的回报 | 这步有多「功成」 | |
| 基线,常用 | 减去「局面平均分」,减噪声 | |
| 对参数求导 | 告诉网络权重往哪拧 |
一步更新直觉:
大 → 增大当时动作概率; 小 → 减小。减 后,看的是「相对平均好不好」。
| 旋钮 | 直觉 |
|---|---|
| 学习率 | 往往比想象更小,防一次推崩策略 |
| 回报归一化 | 每批减均值、除标准差,强烈建议 |
| 基线 | 至少移动平均;更好学 |
| 熵 | 防止过早变成确定性策略 |
| 优点 | 缺点 |
|---|---|
| 天然支持连续动作 | 样本效率差 |
| 目标直观 | 方差大,曲线像心电图 |
| 好懂 | on-policy,旧数据难复用 |
后来被什么取代?能增强什么?
Section titled “后来被什么取代?能增强什么?”| 增强 | 得到 |
|---|---|
| + Critic | Actor-Critic,方差↓ |
| + 限制更新幅度 | TRPO / PPO,稳定性↑ |
| + 熵 / 双 Q 等 | SAC 等 |
| + 偏好奖励模型 | RLHF 策略优化骨架 |
生物提示:动作是「生成/编辑序列」或连续实验参数 → 从策略梯度家族切入,比硬套 DQN 自然。
7. Actor-Critic 与 PPO:为什么默认是 PPO?
Section titled “7. Actor-Critic 与 PPO:为什么默认是 PPO?”Actor-Critic 分工
Section titled “Actor-Critic 分工”- Actor :出动作、改习惯。
- Critic :估价值,提供低方差学习信号。
常用一步优势(就是 TD 误差):
PPO 标配则用 GAE(在 MC 与 TD 之间平滑): 越大越像 MC,越小越像 TD。
flowchart TB S[状态 s] --> Actor[Actor π_θ] S --> Critic[Critic V_w] Actor --> A[动作] A --> Env[环境] Env --> Critic Critic -->|Â 或 δ| Actor
为什么需要 PPO?
Section titled “为什么需要 PPO?”朴素策略梯度 / AC:一步更新过大 → 策略崩溃 → 后续数据全是垃圾。
TRPO 用 KL 硬约束,强但重;PPO 用 clip 近似「别走太远」。
关键公式:PPO Clip
Section titled “关键公式:PPO Clip”重要性采样比率:
裁剪目标( 常取 0.1–0.2):
完整训练里还常加价值损失与熵:
| 符号 | 含义 | 调它在改什么 |
|---|---|---|
| 新旧策略概率比 | ≈1 表示几乎没改;很大表示猛抬某动作 | |
| 优势 | 好动作; 差动作 | |
| clip 宽度 | 允许 偏离 1 的最大幅度 | |
| Critic 拟合损失 | 评委要准 | |
| 策略熵 | 保持探索 | |
| 系数 | 价值项 vs 探索项的权重 |
白话:
- :鼓励提高概率,但 最多到 。
- :鼓励降低概率,但不许砍太狠。
→ 每次更新被夹在安全区。
flowchart LR
R[比率 r_t] --> C{是否在 1±ε?}
C -->|是| U1[用 r_t · Â]
C -->|否| U2[用裁剪后的值]
U1 --> Min[取 min 防过大更新]
U2 --> Min | 旋钮 | 默认感 | 风险 |
|---|---|---|
| 0.1–0.2 | 太大≈没约束;太小学得慢 | |
| 每次采样步数 | ~2048 | 太少优势噪声大 |
| 重复 epoch | 3–10 | 太多过度使用 on-policy 数据 |
| GAE | 0.9–0.98 | 偏 TD ↔ 偏 MC |
| 熵系数 | 0–0.01 | 防过早确定 |
| 学习率 | 起 | 不稳先降,可后期衰减 |
pip install stable-baselines3 gymnasium matplotlibpython ppo_cartpole_sb3.py为何工业默认:超参相对鲁棒;离散/连续都行;生态好(SB3、CleanRL、RLHF 工具链)。
代价:on-policy 样本效率不如好的 SAC;真实验交互贵时可能烧不起。
后来被什么取代?能增强什么?
Section titled “后来被什么取代?能增强什么?”PPO 未被单一算法全面取代,而是默认骨干,在各领域被改造:
| 领域 | 演进 | 增强 |
|---|---|---|
| 连续控制 | SAC / TD3 | 样本效率、自动探索温度 |
| 大量日志 | 离线 RL | 少交互 |
| 专家示范 | 模仿 / 反演 RL | 少奖励工程 |
| 大模型对齐 | RLHF-PPO → DPO / GRPO / RLOO | 少不稳价值模型、更贴偏好 |
| 世界模型 | Dreamer | 想象中交互,省真环境步 |
| 你的需求 | 更合适 |
|---|---|
| 模拟器便宜、要稳 | 先 PPO |
| 湿实验很贵 | 离线 RL / 贝叶斯优化 / 主动学习 / 模仿 |
| 序列是否符合偏好 | DPO、GRPO 等(第3章) |
| 纯 CPT 继续预训练 | 不是 RL(似然 ≠ 回报) |
8. 算法选型:先问问题,再选工具
Section titled “8. 算法选型:先问问题,再选工具”flowchart TD
Start[任务] --> Q1{有可靠模型且状态不大?}
Q1 -->|是| DP[动态规划金标准]
Q1 -->|否| Q2{动作类型?}
Q2 -->|少数离散| Tab[表格 Q / 简单 DQN]
Q2 -->|高维+离散| DQN[DQN 系]
Q2 -->|连续/生成策略| PG[PPO 或 SAC]
Tab --> Q3{交互极贵?}
DQN --> Q3
PG --> Q3
Q3 -->|是| Off[离线 RL / 模仿 / 主动学习]
Q3 -->|否| Q4{要默认稳?}
Q4 -->|是| PPO2[先 PPO]
Q4 -->|更要样本效率| SAC2[SAC 等] | 场景 | 优先 | 原因 |
|---|---|---|
| 规则清晰小系统 | Value Iteration | 精确可解释 |
| 短菜单离散决策 | Q-learning | 简单 |
| 图像/向量 + 按键 | DQN 系 | 价值逼近成熟 |
| 连续控制默认基线 | PPO | 稳、生态好 |
| 交互贵但有模拟器 | SAC | 通常更省样本 |
| 只有历史实验 | 离线 RL / 模仿 | 第3章 |
| LLM/序列偏好对齐 | DPO、GRPO、RLHF-PPO | 第3章 |
| 自监督 CPT | 非 RL | 勿与回报最大化混谈 |
9. 生物与多组学「翻译表」
Section titled “9. 生物与多组学「翻译表」”| RL 概念 | 生物理解 |
|---|---|
| 表达谱、序列窗口、表型、实验进度 | |
| 培养条件、靶点、编辑、测序策略 | |
| 结合分、表型、成本惩罚、成败 | |
| episode | 一次实验闭环 / 设计–验证周期 |
| 回放池 | 历史多组学与实验库 |
| 探索 | 试新条件(有预算与风险) |
| on-policy | 必须按现行规范采样 |
| off-policy | 能用旧日志学新策略 |
| 做法 | 是本阶段 RL 吗 |
|---|---|
| PPO 调参最大化指标 | 是 |
| 有限实验菜单上 Q-learning | 是 |
| 偏好对齐(RLHF/DPO) | 是,但属第3章 |
| 生物 CPT | 否(自监督似然) |
| 监督预测表达量 | 否 |
把「合法/有功能序列」做成可计算奖励或偏好后才进入 RL;否则仍是监督/自监督。
10. 动手项目(效果优先)
Section titled “10. 动手项目(效果优先)”| # | 项目 | 观察 | 验收 |
|---|---|---|---|
| 1 | dp_value_iteration.py | 有模型可直接算最优 | 打出 、 |
| 2 | Cliff Walking | SARSA 更安全 vs Q 贴边 | 路径形态不同 |
| 3 | dqn_cartpole.py | 回放+目标网后曲线爬升 | 后期回报明显升 |
| 4 | 去掉目标网络 | 通常更抖、易塌 | 体会目标漂移 |
| 5 | ppo_cartpole_sb3.py | 默认超参可收敛 | 接近满分 |
| 6 | 把 clip 调很大 | 可能更不稳 | 体会约束意义 |
建议:1 → 3 → 5,有余力做 2、4、6。
11. 概念自测(公式 + 白话都能说)
Section titled “11. 概念自测(公式 + 白话都能说)”- 写出 Value Iteration 的一步更新,并解释 与 。
- 对比 MC 与 TD(0) 的目标: vs ,各适何时。
- SARSA 与 Q-learning 更新式差在哪一项?对应什么风险偏好?
- DQN 的 为何用 而不是 ?回放池解决什么?
- REINFORCE 中 的直觉;减 改变期望吗?
- PPO 的 与 :过大/过小各有何风险?
- 「PPO 已被 DPO 取代」在什么任务对、什么任务错?
- 多组学 CPT 哪些部分不该硬套本章算法?
12. 学习资源(少而精)
Section titled “12. 学习资源(少而精)”- 直觉:David Silver 课;Hugging Face Deep RL Course Unit 2–4
- 查阅:Sutton & Barto(当词典);DQN Nature 2015;PPO 2017(抓动机与结论)
- 工程:Stable-Baselines3;CleanRL 单文件实现
读论文时优先抓:更新式、稳定技巧、消融、适用动作空间,不必先抠全部证明。
13. 第2章 完成标准
Section titled “13. 第2章 完成标准”- 能画清:有/无模型,价值/策略,on/off-policy
- 能写出并解释:TD 目标、Q-learning、DQN 的 、REINFORCE、PPO clip 各 1 个核心式
- 能说明每个式子里 2~3 个关键参数怎么调
- 能说清「上一代痛点 → 本算法增强 → 后来又被谁增强」
- 对真实问题给出第一推荐 + 理由 + 备选
- 跑通
dp_value_iteration.py+(DQN 或 PPO 之一) - 区分 CPT 自监督 vs RL 回报最大化
14. 下一章预告
Section titled “14. 下一章预告”第3章 现代算法、对齐与生物边界 将覆盖:
- SAC / TD3:相对 PPO 强在哪、弱在哪
- 离线 RL 与模仿学习:实验日志怎么用
- 对齐专题:RLHF-PPO、DPO、GRPO——公式级直觉 + 取代关系
- 与生物 CPT 的严格边界
- 生物案例与失败模式:奖励黑客、过拟合模拟器、不可复现
- Sutton & Barto, Reinforcement Learning: An Introduction (2nd ed.) — 在线阅读。DP、MC、TD、Q-learning、策略梯度的权威推导来源。
- Mnih et al., Human-level control through deep reinforcement learning, Nature 2015 — 论文。DQN 的经验回放与目标网络原始工作。
- Schulman et al., Proximal Policy Optimization Algorithms, 2017 — arXiv:1707.06347。PPO clip 目标的出处。
- Schulman et al., High-Dimensional Continuous Control Using Generalized Advantage Estimation, 2015 — arXiv:1506.02438。GAE 在 MC 与 TD 之间平滑的依据。
- Stable-Baselines3 — 文档。本章 DQN / PPO 代码所用的生产级实现。
- CleanRL — 仓库。单文件算法实现,适合对照公式读源码。
主题色
字体
字号
视觉效果
即将离开本站
你将前往外部网站:
该网站与本站无关,本站不对其内容、安全性或可用性负责。确定后将在新标签页打开。