A2C 与 A3C
同步或异步并行环境收集 Actor-Critic 数据。
学习目标
- 区分同步聚合与异步更新,正确计算不同长度 rollout 的损失与目标。
- 独立复核“不同 worker 长度下的样本加权平均”的输入、计算和解释。
- 同步与异步描述更新协调,样本权重仍须单独定义。
为什么重要
区分同步聚合与异步更新,正确计算不同长度 rollout 的损失与目标。
学习前需要掌握
背景与问题
单个环境连续产生高度相关轨迹,等待长 episode 也会降低训练吞吐。并行运行多个环境能增加经验多样性;但收集并行与参数更新并行是不同设计,不能只看 worker 数量判断是哪一种。
概念定义
A3C 的多个 worker 用各自参数副本采样、计算梯度并异步更新共享参数;A2C 通常同步收集多个环境 rollout,聚合成批次后统一更新。两者常使用 n-step 回报和状态价值基线,属于典型 on-policy actor-critic 路线。
直观理解
A2C 像大家等一轮练习结束后共同修改笔记;A3C 像每个人随时提交修改,吞吐可能更灵活,但提交时依据的旧笔记可能已经过时。
核心原理
每段 rollout 的末尾若非真正终止,就用 critic 的末端价值补足未来;若终止则用零。多环境批次中各样本结束时间不同,必须保留逐样本边界,不能用一个全局 done 掩码覆盖所有环境。
同步聚合时损失通常按实际有效时间步求平均,而不是对不同长度 worker 的均值再无条件等权平均。两种平均对应不同样本权重,影响梯度尺度。
异步梯度来自较旧策略,存在参数陈旧与执行顺序随机性;同步实现更容易复现,但环境速度不均可能导致等待。并行吞吐收益不等于每次交互的样本效率提高,应分别报告。
数学表达
n-step critic 目标
若片段内真正终止,终止后奖励与 bootstrap 为零。
变量含义
n当前 rollout 的有效奖励长度V末端状态价值估计
计算步骤
- 1按样本平均为 (1+1+4)/3=2。
- 2先算 worker 均值再等权平均为 (1+4)/2=2.5。
- 3两者差异来自权重,不来自同步本身。
代码对应位置
示例 1不同 worker 长度下的样本加权平均:按有效样本聚合损失是 2.000,等权 worker 平均是 2.500。
变量解释
| 变量 | 含义 |
|---|---|
n | 当前 rollout 的有效奖励长度 |
V | 末端状态价值估计 |
完整数值示例
不同 worker 长度下的样本加权平均
已知条件
- worker A 有 2 个有效样本,每个损失为 1。
- worker B 有 1 个有效样本,损失为 4。
计算步骤
- 按样本平均为 (1+1+4)/3=2。
- 先算 worker 均值再等权平均为 (1+4)/2=2.5。
- 两者差异来自权重,不来自同步本身。
计算结果
按有效样本聚合损失是 2.000,等权 worker 平均是 2.500。
处理前后对比
- 同步与异步描述更新协调,样本权重仍须单独定义。
- 本例仅展示聚合算术,不能据此比较完整 A2C/A3C 训练成绩。
计算与实现步骤
- 并行 rollout
- 计算 n-step return
- 聚合/异步梯度
- 更新共享模型
代码实现
示例 1
不同 worker 长度下的样本加权平均
example_01.py用途:按有效样本聚合损失是 2.000,等权 worker 平均是 2.500。
worker_losses = [[1.0, 1.0], [4.0]]
sample_mean = sum(sum(x) for x in worker_losses) / sum(len(x) for x in worker_losses)
worker_mean = sum(sum(x) / len(x) for x in worker_losses) / len(worker_losses)
print(f"sample_mean={sample_mean:.3f}, worker_mean={worker_mean:.3f}")代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
按有效样本聚合损失是 2.000,等权 worker 平均是 2.500。
Step 1 · 1–4 行
只从训练数据逐列计算均值与标准差,对应标准化公式中的 μ 和 σ。
worker_losses = [[1.0, 1.0], [4.0]]
sample_mean = sum(sum(x) for x in worker_losses) / sum(len(x) for x in worker_losses)
worker_mean = sum(sum(x) / len(x) for x in worker_losses) / len(worker_losses)
print(f"sample_mean={sample_mean:.3f}, worker_mean={worker_mean:.3f}")代码与数学原理
减去训练均值并除以训练标准差,对应代码中的 mean/std 或 StandardScaler。
平方误差代码对应均方损失。
预期输出或运行结果
sample_mean=2.000, worker_mean=2.500
常见错误 · 4 条
- 不要在测试集上调用 fit 或 fit_transform;测试集只能复用训练参数。
- 把任何多环境采样都叫 A3C。
- 混合长短 rollout 时无意改变每样本权重。
- 非终止 rollout 末端未 bootstrap,系统性低估价值。
实际应用
- 序贯决策
- 控制与资源分配
常见错误
- 把任何多环境采样都叫 A3C。
- 混合长短 rollout 时无意改变每样本权重。
- 非终止 rollout 末端未 bootstrap,系统性低估价值。
扩展内容说明
本页数值均为解释机制的构造案例,不能解读为真实训练或基准性能。定义和适用条件参见 Mnih 等:Asynchronous Methods for Deep Reinforcement Learning。
算法属性与数据边界
失败模式、风险与性能
失败模式
- 把任何多环境采样都叫 A3C。
- 混合长短 rollout 时无意改变每样本权重。
- 非终止 rollout 末端未 bootstrap,系统性低估价值。
风险
- 奖励函数与真实目标不一致会诱发奖励黑客。
- 部署策略的行动权限必须由环境和应用层约束。
性能考虑
- 样本效率、墙钟时间和显存占用需要分别报告。
- 应使用多个随机种子、置信区间和固定评测策略。
常见问题
A2C 一定比 A3C 慢吗?
不一定。硬件批处理、环境开销、等待与参数通信共同决定吞吐;同步还可能带来更易复现与更高批计算效率。
网页是否会训练模型?
不会。所有图表使用固定种子或解析公式在浏览器本地计算,不执行页面中的示例代码。
推荐学习资料
参考库不会生成虚假资源或无效外部链接。