第2章:强化学习的实现
把 Q 学习写成可手算、可重放的 C 循环,明确探索、合法动作和终止状态的更新边界。
学习目标
- 能用“怎样证明一次 Q 更新使用的是旧值、合法动作和正确的终止语义,而不是“看起来收敛”的偶然运行?”解释本页问题,并把结论限制在官方 2017 年版目录范围内
- 能逐项重建“可靠的 Q 学习实现必须保存更新前值和 TD 目标,并在终止转移切断未来价值。”的输入、状态、公式与中间证据
- 能对“令旧 Q 为 0.4、奖励为 1、学习率为 0.5;终止转移的目标是 1,新 Q 为 0.7。若误加下一状态垃圾值,第一处偏差就在目标计算。”完成一次手算或逐步重放,而不是只观察最终奖励
- 能注入“终止状态继续自举下一状态价值”,定位首个分岔并用重置回到相同初值
为什么从这个问题开始
怎样证明一次 Q 更新使用的是旧值、合法动作和正确的终止语义,而不是“看起来收敛”的偶然运行? 可靠的 Q 学习实现必须保存更新前值和 TD 目标,并在终止转移切断未来价值。 “第2章:强化学习的实现”的学习目标不是复述原书目录,而是把目录约束转成可以计算、运行、失败和复位的教学合同。为 q21.c 类迷宫程序建立数组、动作掩码、TD 目标和 episode 生命周期的完整合同。
先写预测:在同一初值下,如果故障“终止状态继续自举下一状态价值”被启用,最先变化的是输入、转移、TD 目标、激活、梯度还是评价哈希?运行后若观察不一致,应缩小结论并检查第一处差异,不能用更长训练覆盖它。
来源、版次与版权边界
欧姆社官方书页确认小高知宏著、2017 年 10 月 14 日出版、208 页、ISBN 978-4-274-22114-9,并公开四章详细目录。官方页同时声明配套压缩包仅供购书者使用;本课程没有下载、缓存或改写该压缩包,只用公开目录核定范围。
技术事实另以《Reinforcement Learning: An Introduction》作者页面和《Deep Learning》作者开放页面交叉核对。第2章:强化学习的实现的中文解释、C 片段、交互、数值、反例、练习与答案均为独立教学重写;现代 DQN、经验回放、目标网络或策略梯度若出现,只能明确标成边界,不能倒填为 2017 年原书内容。
术语、对象与前提
- ↡用下一个状态最大动作价值构造目标的离策略 TD 方法。:用下一个状态最大动作价值构造目标的离策略 TD 方法。
- ↡即时奖励与折扣后的下一状态价值之和。:即时奖励与折扣后的下一状态价值之和。
- ↡TD 目标减去更新前状态动作价值。:TD 目标减去更新前状态动作价值。
- ↡在尝试未知动作与选择当前最优动作之间取舍。:在尝试未知动作与选择当前最优动作之间取舍。
- ↡限定状态下允许进入最大值与采样的动作集合。:限定状态下允许进入最大值与采样的动作集合。
- ↡终止状态错误地继续加入未来价值的缺陷。:终止状态错误地继续加入未来价值的缺陷。
必须先声明以下假设:
- Q 表尺寸覆盖全部状态与动作编号
- 最大值和随机探索只遍历合法动作
- 计算目标时读取更新前的 Q 表快照
- 终止转移的下一状态价值固定为零
实现管线
第2章:强化学习的实现
怎样证明一次 Q 更新使用的是旧值、合法动作和正确的终止语义,而不是“看起来收敛”的偶然运行?
输入与状态合同
环境独立返回状态、动作、奖励、下一状态和终止标记。
必须留下的证据
保存固定种子下的动作来源、合法动作集和转移五元组。
target = r + (done ? 0 : γ max_a Q[next][a]); Q += α(target - Q)
来源边界:欧姆社公开目录核定范围;购书者示例包未下载、未缓存、未改写;本课程代码与实验独立编写。
核心机制与可复算表达
本页主张: 可靠的 Q 学习实现必须保存更新前值和 TD 目标,并在终止转移切断未来价值。
这条主张只在上述四条假设下成立。令旧 Q 为 0.4、奖励为 1、学习率为 0.5;终止转移的目标是 1,新 Q 为 0.7。若误加下一状态垃圾值,第一处偏差就在目标计算。 验收时必须保存“固定种子、合法动作列表、转移五元组、旧 Q、TD 目标、TD 误差、新 Q 和终止分支日志。”,否则最终奖励或损失曲线不足以排除索引、初始化、终止和评价模式错误。
正常轨迹与单故障轨迹
逐步重放
正常轨迹与失败轨迹使用同一输入合同
- 01从状态二按固定种子选择合法动作一。
- 02环境返回奖励零、下一状态三、未终止。
- 03用下一状态合法动作最大值构造 TD 目标。
- 04只更新 Q[2][1] 并保存前后值。
不变量:一次转移只允许一个 Q 单元变化,且终止转移的目标不包含任何下一状态价值。
正常轨迹要求同一输入和随机序列得到同一中间状态。故障轨迹只删除一个前提:“终止状态继续自举下一状态价值”。两条轨迹共用其余条件,才能把首个分岔归因到该故障,而不是换了任务、模型或初值。
独立 C 实现片段
double q_update(double old_q, double reward, double next_max,
double alpha, double gamma, int done) {
const double target = reward + (done ? 0.0 : gamma * next_max);
return old_q + alpha * (target - old_q);
}这段代码由本课程独立编写,只展示“第2章:强化学习的实现”的最小接口,不复制官方购书者压缩包。编译时应启用告警、地址检测和未定义行为检测;运行记录包含输入尺寸、索引、旧值、新值和终止标记。
反例、适用边界与复位
反例与证据
删除一个前提,定位首个错误状态
复位不是只把按钮切回默认值。它必须恢复与“第2章:强化学习的实现”有关的环境、随机数、表格、参数、轨迹和模式开关,并再次确认“一次转移只允许一个 Q 单元变化,且终止转移的目标不包含任何下一状态价值。”。
正式目录逐项深读
第2章 强化学习的实现
目录映射 1/7。 第2章 强化学习的实现在“第2章:强化学习的实现”中承担为 q21.c 类迷宫程序建立数组、动作掩码、TD 目标和 episode 生命周期的完整合同。的一个明确节点。复核时先指出它读取的输入和允许改变的状态,再用“一次转移只允许一个 Q 单元变化,且终止转移的目标不包含任何下一状态价值。”核对结果;不能把目录标题本身当作技术结论。
2.1 强化学习与 Q 学习
目录映射 2/7。 2.1 强化学习与 Q 学习在“第2章:强化学习的实现”中承担为 q21.c 类迷宫程序建立数组、动作掩码、TD 目标和 episode 生命周期的完整合同。的一个明确节点。复核时先指出它读取的输入和允许改变的状态,再用“一次转移只允许一个 Q 单元变化,且终止转移的目标不包含任何下一状态价值。”核对结果;不能把目录标题本身当作技术结论。
2.1.1 强化学习的思路
目录映射 3/7。 2.1.1 强化学习的思路在“第2章:强化学习的实现”中承担为 q21.c 类迷宫程序建立数组、动作掩码、TD 目标和 episode 生命周期的完整合同。的一个明确节点。复核时先指出它读取的输入和允许改变的状态,再用“一次转移只允许一个 Q 单元变化,且终止转移的目标不包含任何下一状态价值。”核对结果;不能把目录标题本身当作技术结论。
2.1.2 Q 学习算法
目录映射 4/7。 2.1.2 Q 学习算法在“第2章:强化学习的实现”中承担为 q21.c 类迷宫程序建立数组、动作掩码、TD 目标和 episode 生命周期的完整合同。的一个明确节点。复核时先指出它读取的输入和允许改变的状态,再用“一次转移只允许一个 Q 单元变化,且终止转移的目标不包含任何下一状态价值。”核对结果;不能把目录标题本身当作技术结论。
2.2 Q 学习的实现
目录映射 5/7。 2.2 Q 学习的实现在“第2章:强化学习的实现”中承担为 q21.c 类迷宫程序建立数组、动作掩码、TD 目标和 episode 生命周期的完整合同。的一个明确节点。复核时先指出它读取的输入和允许改变的状态,再用“一次转移只允许一个 Q 单元变化,且终止转移的目标不包含任何下一状态价值。”核对结果;不能把目录标题本身当作技术结论。
2.2.1 q21.c 程序实现
目录映射 6/7。 2.2.1 q21.c 程序实现在“第2章:强化学习的实现”中承担为 q21.c 类迷宫程序建立数组、动作掩码、TD 目标和 episode 生命周期的完整合同。的一个明确节点。复核时先指出它读取的输入和允许改变的状态,再用“一次转移只允许一个 Q 单元变化,且终止转移的目标不包含任何下一状态价值。”核对结果;不能把目录标题本身当作技术结论。
2.2.2 例题二:寻找目标的学习程序
目录映射 7/7。 2.2.2 例题二:寻找目标的学习程序在“第2章:强化学习的实现”中承担为 q21.c 类迷宫程序建立数组、动作掩码、TD 目标和 episode 生命周期的完整合同。的一个明确节点。复核时先指出它读取的输入和允许改变的状态,再用“一次转移只允许一个 Q 单元变化,且终止转移的目标不包含任何下一状态价值。”核对结果;不能把目录标题本身当作技术结论。
最小可重放记录
unit: 02-reinforcement-implementation/rlc-02-reinforcement-implementation
question: "怎样证明一次 Q 更新使用的是旧值、合法动作和正确的终止语义,而不是“看起来收敛”的偶然运行?"
initial_state: fixed_and_hashed
normal_trace: saved
fault: "终止状态继续自举下一状态价值"
first_divergence: required
invariant: "一次转移只允许一个 Q 单元变化,且终止转移的目标不包含任何下一状态价值。"
artifact: "固定种子、合法动作列表、转移五元组、旧 Q、TD 目标、TD 误差、新 Q 和终止分支日志。"
reset: restore_environment_rng_tables_weights_trace_and_mode这份记录把“第2章:强化学习的实现”的目录坐标、输入、故障和证据绑在一起。复核者应先盲跑正常轨迹,再注入故障,最后执行恢复与复位;任何依赖隐藏操作者或上一轮状态的运行都不合格。
练习与答案
练习
问题 1: 旧 Q 为 0.4、奖励为 1、学习率为 0.5 且已终止,新 Q 是多少?
问题 2: 为什么 argmax 必须使用合法动作掩码?
问题 3: 怎样确认评价没有继续学习?
本页回顾
可靠的 Q 学习实现必须保存更新前值和 TD 目标,并在终止转移切断未来价值。 掌握“第2章:强化学习的实现”的标准是:能声明假设、手算关键值、逐步解释 C 状态变化、制造一个最小反例,并证明“一次转移只允许一个 Q 单元变化,且终止转移的目标不包含任何下一状态价值。”在复位后仍然成立。
名词解释
本章出现的专业名词,用大白话再讲一遍。
- Q 学习
- 用下一个状态最大动作价值构造目标的离策略 TD 方法。
- TD 目标
- 即时奖励与折扣后的下一状态价值之和。
- TD 误差
- TD 目标减去更新前状态动作价值。
- 探索利用
- 在尝试未知动作与选择当前最优动作之间取舍。
- 合法动作掩码
- 限定状态下允许进入最大值与采样的动作集合。
- 终止自举
- 终止状态错误地继续加入未来价值的缺陷。