TD Error、TD(0) 与 n-step
在轨迹未结束时用下一状态估计 bootstrap 更新。
学习目标
- 用一步奖励加后继价值立即更新,识别 bootstrap 的优势与误差来源。
- 独立复核“非终止与终止转移的 TD(0) 更新”的输入、计算和解释。
- bootstrap 改变目标,终止标记不是可忽略的日志字段。
为什么重要
用一步奖励加后继价值立即更新,识别 bootstrap 的优势与误差来源。
学习前需要掌握
背景与问题
机器人每秒都收到反馈,等到数小时任务结束才更新会很慢。TD 在得到一个后继状态后就使用当前价值估计补足未来,使持续任务也能边交互边学习;代价是目标本身含有估计误差。
概念定义
时序差分学习用实际一步奖励与后继价值构造目标,比较目标和当前预测得到 TD error。TD(0) 是一步方法;n-step 方法使用更长真实奖励片段后再 bootstrap。该思想既可评价状态价值,也可进入动作价值与 actor-critic 算法。
直观理解
原来预计路还要走 10 分钟,走了一段后用时 2 分钟、剩余估计变成 9 分钟,就发现先前估计偏低 1 分钟。TD error 是相邻预测在新证据下的不一致。
核心原理
更新前需要固定当前价值与后继价值,先构造目标,再按学习率缩小误差。若共享网络同时变化,目标会随参数漂移;表格收敛条件不能直接涵盖任意非线性网络。
真实终止状态没有后续回报,bootstrap 项为零。纯采样截断的持续任务通常仍保留最后观察的价值;mask 错误会系统性扭曲所有接近时间边界的状态。
TD 通常比完整回报的方差更低,但会利用不准确的后继估计。目标误差、采样噪声与函数逼近需要区分;增大学习率可以更快传播信息,也可能放大震荡。
数学表达
TD error
目标与当前估计之差。
变量含义
δ_t时刻 t 的 TD 误差。V(S_t)当前状态价值。V(S_{t+1})下一状态 bootstrap 价值。
计算步骤
- 1非终止目标为 1+0.9×5=5.5,误差为 1.5。
- 2新价值为 4+0.2×1.5=4.3。
- 3真正终止时目标为 1,新价值为 4+0.2×(1−4)=3.4。
代码对应位置
示例 1非终止与终止转移的 TD(0) 更新:相同奖励下,非终止更新为 4.300,终止更新为 3.400。
变量解释
| 变量 | 含义 |
|---|---|
δ_t | 时刻 t 的 TD 误差。 |
V(S_t) | 当前状态价值。 |
V(S_{t+1}) | 下一状态 bootstrap 价值。 |
完整数值示例
非终止与终止转移的 TD(0) 更新
已知条件
- 当前价值 4,奖励 1,后继价值 5,折扣 0.9。
- 学习率 0.2;对比同样奖励下真正终止的转移。
计算步骤
- 非终止目标为 1+0.9×5=5.5,误差为 1.5。
- 新价值为 4+0.2×1.5=4.3。
- 真正终止时目标为 1,新价值为 4+0.2×(1−4)=3.4。
计算结果
相同奖励下,非终止更新为 4.300,终止更新为 3.400。
处理前后对比
- bootstrap 改变目标,终止标记不是可忽略的日志字段。
- TD error 是学习残差,不是真实价值误差的直接测量。
计算与实现步骤
- 观察 transition
- 计算 δ
- 更新价值
- 继续交互
代码实现
示例 1
非终止与终止转移的 TD(0) 更新
example_01.py用途:相同奖励下,非终止更新为 4.300,终止更新为 3.400。
value, reward, next_value = 4.0, 1.0, 5.0
alpha, gamma = 0.2, 0.9
for terminal in [False, True]:
target = reward + gamma * (not terminal) * next_value
updated = value + alpha * (target - value)
print(f"terminal={terminal} target={target:.3f} updated={updated:.3f}")代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
相同奖励下,非终止更新为 4.300,终止更新为 3.400。
alpha- 当前学习率,控制每次参数更新的步长。
Step 1 · 1–6 行
输出中间参数、形状或最终指标,用于核对代码是否符合预期。
value, reward, next_value = 4.0, 1.0, 5.0
alpha, gamma = 0.2, 0.9
for terminal in [False, True]:
target = reward + gamma * (not terminal) * next_value
updated = value + alpha * (target - value)
print(f"terminal={terminal} target={target:.3f} updated={updated:.3f}")预期输出或运行结果
terminal=False target=5.500 updated=4.300 terminal=True target=1.000 updated=3.400
常见错误 · 3 条
- 用更新后的值重新计算同一次目标,改变预期备份。
- 真正终止后仍加上价值网络预测。
- 把 TD error 为零当成真实价值已经正确。
实际应用
- 序贯决策
- 控制与资源分配
常见错误
- 用更新后的值重新计算同一次目标,改变预期备份。
- 真正终止后仍加上价值网络预测。
- 把 TD error 为零当成真实价值已经正确。
扩展内容说明
本页数值均为解释机制的构造案例,不能解读为真实训练或基准性能。定义和适用条件参见 Sutton 与 Barto《Reinforcement Learning: An Introduction》(第 6、7 章)。
算法属性与数据边界
失败模式、风险与性能
失败模式
- 用更新后的值重新计算同一次目标,改变预期备份。
- 真正终止后仍加上价值网络预测。
- 把 TD error 为零当成真实价值已经正确。
风险
- 奖励函数与真实目标不一致会诱发奖励黑客。
- 部署策略的行动权限必须由环境和应用层约束。
性能考虑
- 样本效率、墙钟时间和显存占用需要分别报告。
- 应使用多个随机种子、置信区间和固定评测策略。
常见问题
TD 是模型方法吗?
通常不需要显式转移模型;它使用采样转移加价值 bootstrap。价值预测未来回报,不等于预测下一状态的动力学模型。
网页是否会训练模型?
不会。所有图表使用固定种子或解析公式在浏览器本地计算,不执行页面中的示例代码。
推荐学习资料
Reinforcement Learning: An Introduction
从多臂赌博机、MDP、动态规划、蒙特卡洛和 TD 方法建立强化学习理论主线。
Richard Sutton / Andrew Barto · MIT Press