Actor-Critic
Actor 输出策略,Critic 估计价值并提供低方差学习信号。
学习目标
- 将动作选择与价值评价配合起来,理解低方差信号也会包含 critic 误差。
- 独立复核“TD 信号怎样同时更新 critic 和 actor”的输入、计算和解释。
- critic 在拟合价值,actor 在改变动作分布,两者目标不同。
为什么重要
将动作选择与价值评价配合起来,理解低方差信号也会包含 critic 误差。
学习前需要掌握
背景与问题
REINFORCE 等到任务结束才能用完整回报,而控制任务常需要每步更新。Actor-Critic 让 critic 学习后续收益估计,actor 用它判断所选动作好于还是差于预期,可以较早获得学习信号。
概念定义
Actor 参数化策略,critic 估计状态价值或动作价值,并提供策略更新所需的优势或梯度信号。它是一种结构家族,不是唯一算法;既包括 A2C 等 on-policy 形式,也包括 DDPG、TD3、SAC 等 off-policy 形式。
直观理解
执行者负责尝试,评论家用当前经验评价这次尝试。评论家不必等所有长期结果出现,但它的猜测可能有偏,执行者也可能学会利用评分漏洞。
核心原理
状态价值 critic 的一步 TD error 可作为优势估计:用奖励加后继价值减当前价值。critic 准确且数据条件合适时,它提供合理的相对行为信号;critic 尚未学准时,actor 可能被错误方向引导。
critic 的回归目标通常停止梯度,actor 更新也常将优势当固定信号。共享编码器可以省参数,但两种损失可能冲突,权重、更新频率与梯度尺度需要一起监测。
本页小例使用 on-policy 状态价值结构。不能把它的 δ×log_prob 更新直接套进确定性 DDPG 或最大熵 SAC;这些算法虽然也有 actor 和 critic,目标、数据使用和梯度路径不同。
数学表达
Actor-Critic 更新信号
Critic 的 TD error 指导 Actor。
变量含义
G_t从时刻 t 开始的折扣累计回报。R_{t+1}执行动作后收到的下一步奖励。γ折扣因子,通常位于 [0,1)。
计算步骤
- 1TD error 为 1+0.9×2−0.5=2.3。
- 2critic 的表格值更新为 0.5+0.1×2.3=0.73。
- 3actor 参数上升增量为 0.05×2.3×0.4=0.046。
代码对应位置
示例 1TD 信号怎样同时更新 critic 和 actor:同一 δ=2.3 让 critic 值变为 0.730,actor 参数沿 score 方向增加 0.046。
变量解释
| 变量 | 含义 |
|---|---|
G_t | 从时刻 t 开始的折扣累计回报。 |
R_{t+1} | 执行动作后收到的下一步奖励。 |
γ | 折扣因子,通常位于 [0,1)。 |
完整数值示例
TD 信号怎样同时更新 critic 和 actor
已知条件
- V(s)=0.5,后继 V=2,奖励 1,折扣 0.9。
- critic 学习率 0.1;本次动作的 log 概率梯度为 0.4,actor 学习率 0.05。
计算步骤
- TD error 为 1+0.9×2−0.5=2.3。
- critic 的表格值更新为 0.5+0.1×2.3=0.73。
- actor 参数上升增量为 0.05×2.3×0.4=0.046。
计算结果
同一 δ=2.3 让 critic 值变为 0.730,actor 参数沿 score 方向增加 0.046。
处理前后对比
- critic 在拟合价值,actor 在改变动作分布,两者目标不同。
- 只有本例的表格 critic 能直接按标量更新,神经网络需通过损失求梯度。
计算与实现步骤
- Actor 采样动作
- 环境返回 transition
- Critic 计算 δ
- 更新 Critic
- 用 δ 更新 Actor
代码实现
示例 1
TD 信号怎样同时更新 critic 和 actor
example_01.py用途:同一 δ=2.3 让 critic 值变为 0.730,actor 参数沿 score 方向增加 0.046。
value, next_value, reward = 0.5, 2.0, 1.0
delta = reward + 0.9 * next_value - value
new_value = value + 0.1 * delta
actor_increment = 0.05 * delta * 0.4
print(f"delta={delta:.3f}, critic_value={new_value:.3f}")
print(f"actor_increment={actor_increment:.3f}")代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
同一 δ=2.3 让 critic 值变为 0.730,actor 参数沿 score 方向增加 0.046。
Step 1 · 1–6 行
输出中间参数、形状或最终指标,用于核对代码是否符合预期。
value, next_value, reward = 0.5, 2.0, 1.0
delta = reward + 0.9 * next_value - value
new_value = value + 0.1 * delta
actor_increment = 0.05 * delta * 0.4
print(f"delta={delta:.3f}, critic_value={new_value:.3f}")
print(f"actor_increment={actor_increment:.3f}")预期输出或运行结果
delta=2.300, critic_value=0.730 actor_increment=0.046
常见错误 · 3 条
- 把 Actor-Critic 家族全部归为 on-policy。
- critic 误差很大时仍让 actor 大步追逐其评分。
- 忽略策略与价值共享网络时的梯度和尺度冲突。
实际应用
- 序贯决策
- 控制与资源分配
常见错误
- 把 Actor-Critic 家族全部归为 on-policy。
- critic 误差很大时仍让 actor 大步追逐其评分。
- 忽略策略与价值共享网络时的梯度和尺度冲突。
扩展内容说明
本页数值均为解释机制的构造案例,不能解读为真实训练或基准性能。定义和适用条件参见 Sutton 与 Barto《Reinforcement Learning: An Introduction》(第 13 章)。
算法属性与数据边界
失败模式、风险与性能
失败模式
- 把 Actor-Critic 家族全部归为 on-policy。
- critic 误差很大时仍让 actor 大步追逐其评分。
- 忽略策略与价值共享网络时的梯度和尺度冲突。
风险
- 奖励函数与真实目标不一致会诱发奖励黑客。
- 部署策略的行动权限必须由环境和应用层约束。
性能考虑
- 样本效率、墙钟时间和显存占用需要分别报告。
- 应使用多个随机种子、置信区间和固定评测策略。
常见问题
Actor-Critic 是 on-policy 还是 off-policy?
它是结构家族,不能统一归类。本页一步状态价值例按 on-policy 解释;A2C、PPO 与 DDPG、TD3、SAC 的数据边界应分别查看。
网页是否会训练模型?
不会。所有图表使用固定种子或解析公式在浏览器本地计算,不执行页面中的示例代码。
推荐学习资料
Proximal Policy Optimization Algorithms
提出基于概率比率裁剪的策略优化目标,限制单次更新幅度并复用 rollout。
Schulman et al. · arXiv