想象你接手了一家米其林后厨:主厨负责掌勺、决定每道菜放什么料,美食评论家坐在灶台旁随时点评“这勺盐放得值不值”。这里的主厨就是 Actor(演员),评论家就是 Critic(评论家)。单靠主厨一个人蒙头练,进步太慢;于是你决定开连锁店:一种模式是所有分店在同一节拍下练同一道菜,每到整点统一把心得汇报给总部、总部汇总后统一修改菜谱——这就是 A2C(同步更新);另一种模式是各家分店独立研发、谁有新心得谁就随时把“菜谱修订意见”传回总部、互不等待——这就是 A3C(异步并行)。 强化学习领域正是靠这套“主厨 + 评论家 + 多店协作”的框架,让 AI 学会打游戏、控制机器人、优化推荐策略。这篇文章用厨房故事把 A2C/A3C 的算法原理、网络结构、性能对比、适用场景以及与 PPO 的传承关系一次讲透,看完你就能看懂大部分现代策略优化论文的骨架。
掌握 A2C/A3C,你就拿到了理解 PPO、GRPO 等现代策略优化算法的钥匙,在训练智能体、读懂强化学习论文时能快速抓住核心思路。
可视化演示
本节配有交互动效(进入视口后自动加载,约 3KB)。
Actor-Critic架构 Actor: 输出动作概率π(a|s) Critic: 估计价值V(s) A(s,a)=Q(s,a)-V(s)=r+γV(s')-V(s)
算法家族脉络
村口的阿强开了一家小饭馆,他做菜全凭直觉:今天客人夸了宫保鸡丁,他明天就多放一勺辣椒。这就是最早的策略梯度方法——每一步只能靠整餐饭吃完后的好评度(累计奖励)来判断方向,运气不好时波动巨大。后来他请来一位美食评论家坐在灶台旁,每放一勺盐就即时点评“这个动作比一般水平好 8 分”,于是主厨的调整立刻有了方向感。这套“主厨 + 评论家”的组合,就是 Actor-Critic 的核心思想。
在强化学习里,策略梯度方法用“整局游戏的最终得分”来更新策略,方差大、学习慢;Actor-Critic 引入评论家网络估计状态价值,把“这次动作相对平均水平的优势”作为更新信号,方差大幅降低。A2C(Advantage Actor-Critic,同步优势演员-评论家)和 A3C(Asynchronous Advantage Actor-Critic,异步优势演员-评论家)正是这套思想的量产升级版——不再是一口锅单练,而是开分店、多线程并行训练。
理解了“主厨负责动作、评论家负责点评”的分工,接下来看这两个网络如何搭建,就是水到渠成的事了。
- 目标函数 J(θ)定义“这桌菜做得有多好”——智能体从开始到结束获得的累积奖励期望,是所有优化动作的最终目的。
- 打分函数括号里的 $\nabla_\theta \log \pi_\theta(a \mid s)$ 告诉主厨“顺着哪个方向微调菜谱,能让当前这道菜更常被做出来”。
- 权重信号$A(s,a)$ 是评论家的点评——它说“这次发挥比平时好多少”。
- 期望把所有采样到的“状态-动作”经验都拿过来平均,消除单次运气的影响。
双网络结构
阿强的厨房里现在多了两张清晰的职责表。主厨(Actor)手上有一本《食材状态决策手册》:看到鸡肉(状态)就翻开手册,按概率决定“多放辣还是多放甜”;评论家(Critic)则时刻在心里算着一笔账:当前这个局面,按现有菜谱走下去,平均能拿到几颗星的好评。
在神经网络实现中,Actor 和 Critic 就像两个各司其职的小组,它们共享同一份“当下状态”输入,但输出完全不同。Actor 网络输出的是动作概率分布——每个动作被选中的概率;Critic 网络输出的是一个标量——当前状态的估计价值 $V(s)$。在代码里通常写成两个独立的头,共用底层的特征提取层。
Critic 输出的价值 $V(s)$ 承担着一个关键任务:作为“平均水平”的参照系。如果只告诉主厨“这道菜客人给了 9 分”,他不知道 9 分是高是低;但如果评论家补充“平时这道菜平均只有 6 分”,那 9 分就是一次超常发挥。优势函数(Advantage)度量的正是“这次选择的动作,比平均水平好多少”。
这套“Actor 出招、Critic 估值”的结构贯穿整个 Actor-Critic 家族。但单店模式效率太低,于是 A2C 和 A3C 分别给出了“开分店”的两种组织方式。
- 动作价值 Q(s,a)在状态 $s$ 时先做动作 $a$,之后一直按策略走,能获得的期望回报。
- 状态价值 V(s)在状态 $s$ 时直接按策略走,不考虑“先做某个特定动作”,能获得的平均回报。
- 差值作信号$Q(s,a) - V(s)$ 越大,说明动作 $a$ 比平均策略更值得做;为负则说明这个动作拖了后腿。
A2C 同步原理
阿强开了六家分店,他给每家店规定:所有学徒厨师必须在同一个节拍下练习同一道菜,每当秒针走到整点,六家店同时把“我这道菜的调整心得”发给总部的评论家,评论家汇总后把同一套修改意见返给所有人。没有哪家店抢跑,也没有哪家店偷懒——这就是同步更新。
A2C 在工程上正是这样运作的:启动 $N$ 个并行环境(worker),每个 worker 独立与游戏环境交互,各自收集一小段轨迹(通常 5~20 步,称为 n 步采样)。采样完成后,各个 worker 分别计算自己的策略梯度与价值损失,传回主进程做梯度平均,然后用平均梯度统一更新一次共享的 Actor 与 Critic 网络参数。
同步机制最大的好处是稳定:$N$ 个 worker 的平均梯度抹平了单个环境的随机波动,参数更新方向更平滑;同时批量数据能高效利用 GPU 做矩阵运算,在单机多进程场景下训练速度反而常常胜过异步版本。A2C 的总损失由三部分组成:主厨的策略损失、评论家的价值损失、以及一项鼓励探索的熵奖励。
同步节拍带来了稳定,但也暴露了一个缺点:所有 worker 必须互相等待,最慢的那个决定了整体节奏。如果能让各家分店按自己的节奏独立研发,是不是能更快找到新菜式?这就是 A3C 的思路。
- 策略损失项$\log \pi_\theta(a_i \mid s_i)$ 乘以优势 $A_i$,优势为正时概率上调,为负时概率下调(负号来自损失函数需最小化)。
- 价值损失项$G_i$ 是 n 步采样后估算的真实回报,$(G_i - V_\phi(s_i))^2$ 是均方误差,让评论家的估值逐步贴近现实。
- 熵奖励项$H(\pi)$ 是动作概率分布的熵,熵越大代表越“犹豫”、越愿意尝试不同动作,防止策略过早固化。
- 系数平衡$\beta$ 通常可取 0.5~1.0,$\alpha$ 常取 0.01~0.1,用于控制“估值准确性”与“探索程度”的权重。
A3C 异步并行
阿强决定放开约束:七家分店不再齐步走。每家店按自己的灶台节奏做菜,谁觉得自己发现了值得分享的调味心得(完成一小段采样),就立刻把“菜谱修改建议”发回中央厨房,上传前顺手从总部取回最新菜谱继续试。中央厨房 24 小时接收更新,任何店都不需要等别人。
A3C 的做法与之完全对应:每个 worker(actor-learner)都持有一份全局网络参数的本地副本,独立地与自己的环境副本交互、采集 n 步经验并计算梯度;算完直接异步推送给全局网络,然后拉取最新参数继续下一轮。整个过程没有全局锁、没有同步屏障,多个线程各跑各的。
这种“自由散养”模式带来两个宝贵收益:一是环境采样效率大幅提升——多个环境同时推进,单位时间产出的经验更多;二是探索多样性更好——不同 worker 的本地参数略有差异,天然会在策略空间中尝试不同方向。但异步也引入一个隐患:某 worker 推送梯度时,全局参数可能已被其他线程更新过,它基于的“旧菜谱”已经过时,这被称为 stale gradients(过时梯度)。为了平衡探索与利用,A3C 在梯度中显式加入熵正则项,鼓励策略保持开放性。
分店模式让 A3C 名利双收,但 2017 年之后越来越多的实验发现,经 GPU 优化的同步版 A2C 反而常常跑赢它的异步前辈。两种模式到底孰优孰劣?
- 主梯度项与 A2C 的策略梯度形式完全相同,每个 worker 用自己采样的 n 步数据独立计算。
- 熵梯度项对熵 $H(\pi)$ 求梯度,推动动作概率分布更加均匀、减少过早收敛。
- 系数 $\alpha$控制探索强度,通常取 0.01~0.1;过大则策略接近随机乱走,过小则退化为普通策略梯度。
性能对比
同步的 A2C 像一支整齐划一的大合唱队,每个声部都踩着同一个节拍,声音汇聚后气场稳定;异步的 A3C 则像一场即兴爵士 jam session,乐手们各自发挥,时不时有人甩出一个新动机带动全场。两种形式都能演奏出好音乐,但听感完全不同。
大量基准实验(如 Atari 游戏)表明:A2C 的收敛曲线通常更平滑,最终得分往往不低于 A3C,而且在 GPU 环境下训练吞吐显著更高——因为梯度可以批量矩阵化计算。A3C 的核心优势体现在“环境交互开销大、参数更新便宜”的场景:多核 CPU 上开 16 个线程并行采样,算法简单、无锁无等待,能在老式硬件上快速跑通实验。
从数学上看,A2C 与 A3C 其实是同一优化目标的两种实现方式:A2C 一次性平均所有 worker 的梯度再更新,A3C 让各 worker 各自推送梯度,两者梯度的期望值完全一致,区别只在于方差和更新节奏。理解这一点,就不会再纠结“谁取代了谁”。
既然两种模式殊途同归,工程实践里到底该选哪一家?这取决于你要开的餐厅开在什么地段、卖什么菜。
- 左侧期望A2C 先收集 $N$ 个 worker 的梯度再做平均,用平均梯度更新一次。
- 右侧期望A3C 各 worker 分别推送自己的梯度 $g_i$,全局参数被逐步更新。
- 等价结论两边都是 $\mathbb{E}[g_i]$ 的无偏估计,所以期望相同——差异体现在单次更新的方差大小。
适用场景
阿强很懂经营:夜市大排档和高端日料店的策略完全不同,同样的菜谱不能生搬硬套。算法选型也是如此——离散动作和连续动作是两条截然不同的赛道。
当动作空间是离散的(比如游戏中的“上、下、左、右”),Actor 网络输出层用 Softmax 得到每个动作的概率;当动作空间是连续的(比如机器人关节力矩取 $[-1, 1]$ 之间任意值),Actor 网络通常输出一个对角高斯分布:网络预测均值 $\mu_\theta(s)$ 和方差 $\sigma^2$,然后从该分布中采样一个具体的连续数值作为动作。A2C/A3C 的策略梯度模式天然支持这两种输出,这是它相比 DQN 家族的显著优势。
在训练环境选择上:如果你的团队算力充足、使用 GPU 训练,优先选 A2C——多进程采样后统一更新,梯度计算可批量矩阵化,稳定且高效;如果你的硬件是多核 CPU、环境交互昂贵,或者想快速写一个分布式训练原型,A3C 的无锁结构更合适。两者都要求能轻易创建多个环境实例(多线程在同一个模拟器中跑不同局),因此“可廉价并行采样”是它们的共同前提。
选好了店型和地段,主厨还要考虑一件事:技术是会进化的。A2C/A3C 之后,这套“主厨 + 评论家”的框架又演变成了什么模样?
- 均值输出$\mu_\theta(s)$ 由 Actor 网络输出,代表当前状态下“最可能正确的动作值”。
- 方差控制$\sigma^2$ 决定分布的宽度——方差大 = 手抖得厉害 = 探索强;方差小 = 动作稳健 = 利用强。
- 采样公式实际动作从分布中抽取,等价于 $a = \mu_\theta(s) + \sigma \cdot \varepsilon$,其中 $\varepsilon \sim \mathcal{N}(0, 1)$。
与PPO关系
阿强发现,大胆试菜也有风险:某天一位厨师灵光一闪放了三勺辣,客人好评如潮,第二天他就想放五勺——结果把客人辣跑了。如果每次只“试一小口”、不让菜谱偏离太远,就能既保持进步又不翻车。这个朴素的想法,催生了 PPO。
A2C/A3C 的梯度更新没有“步子限制”,一个异常 batch 可能把策略推得太远,导致后续采样质量崩坏。TRPO(Trust Region Policy Optimization)用复杂的约束保证更新不越界,而 PPO(Proximal Policy Optimization,近端策略优化)把同样的思想简化成一个巧妙的小函数:用新旧策略的概率比 $r_t(\theta)$ 来衡量“这次改了多少”,如果比值超出区间 $[1-\epsilon, 1+\epsilon]$,就把贡献截断住。
PPO 的训练目标只改动了 A2C 损失中的策略项:把 $-\log \pi_\theta(a|s)A$ 换成“概率比 × 优势”的截断版本。这个改动看似微小,却解决了强化学习里最棘手的超参数敏感问题,让 PPO 成为今天大语言模型 RLHF 阶段最常用的算法之一。可以说,没有 A2C/A3C 铺好的 Actor-Critic 骨架,就没有 PPO 的辉煌。
从 REINFORCE 到 A2C/A3C,再到 PPO 乃至大模型微调中的 GRPO,主厨与评论家的分工框架从未改变,变的只是“试菜的步幅”和“点评的方式”。理解了 A2C/A3C,你就拿到了打开整个策略优化家族的钥匙。
- 概率比$r_t(\theta)$ 是新旧策略在动作 $a_t$ 上的概率之比,$=1$ 表示“完全没改”。
- 截断函数把 $r_t(\theta)$ 限制在 $[1-\epsilon, 1+\epsilon]$ 内,$\epsilon$ 通常取 0.2。
- 取最小值min 保证优化目标不会高估——当 $A_t > 0$ 时限制最大增幅,当 $A_t < 0$ 时限制最坏下降。
- 最终效果PPO 拥有了“大胆更新 + 安全兜底”的双重性格,训练稳定性显著优于 A2C。
AI 应用场景
游戏 AI 分布式训练
阶段:策略训练与并行采样
解决的问题:单游戏环境采样太慢,且相邻帧高度相关导致梯度抖动。传统 DQN 需要经验回放池才能打散相关性,而 A2C 直接开多个环境并行采样、同步平均梯度,既解决相关性又提升吞吐。
具体案例:某游戏工作室训练《贪吃蛇》AI,用 A2C 启动 8 个并行游戏环境,每个 worker 采 20 步就统一更新一次,训练 2 小时即达到原先单环境训练 12 小时的效果。
机器人连续运动控制
阶段:连续动作策略学习
解决的问题:机械臂关节力矩是连续值,DQN 无法直接输出。A2C 的 Actor 网络输出高斯分布的均值与方差,天然支持“力矩 0.73”这样的连续指令,Critic 评估当前姿态的价值。
具体案例:四足机器人步态学习项目中,Actor 输出 12 个关节的目标角度(连续值),Critic 根据机身倾角与能耗评分;工程师用 A2C 在仿真环境训练后迁移到真机,替代了人工调参的 PID 控制方案。
多线程推荐系统策略优化
阶段:线上策略更新与探索
解决的问题:推荐系统面对源源不断的用户会话流,传统规则策略无法动态调整。A3C 的每个 worker 独立模拟一路用户会话,异步把“该加强哪些内容推荐”的梯度推回全局策略,无须等待所有会话结束。
具体案例:短视频平台用 20 个 A3C worker 并行模拟不同兴趣人群的浏览行为,全局策略每 5 秒接收一次异步更新,内容点击率比离线训练策略提升 8%,且探索机制让新内容冷启动更快。
Python 演示
import numpy as np def softmax(x): x = x - x.max() e = np.exp(x) return e / e.sum() class MiniA2C: def __init__(self, n_state=4, n_action=2, lr=0.05, gamma=0.99): self.n_action = n_action self.gamma = gamma self.lr = lr self.actor_w = np.random.randn(n_state, n_action) * 0.1 self.critic_w = np.random.randn(n_state) * 0.1 self.train_count = 0 def act(self, s): probs = softmax(s @ self.actor_w) a = np.random.choice(self.n_action, p=probs) return a, probs[a] def value(self, s): return float(s @ self.critic_w) def learn(self, batch): ga = np.zeros_like(self.actor_w) gc = np.zeros_like(self.critic_w) for s, a, s2, r, done in batch: target = r if done else r + self.gamma * self.value(s2) adv = target - self.value(s) probs = softmax(s @ self.actor_w) dlog = probs.copy() dlog[a] -= 1.0 ga += np.outer(s, dlog) * adv gc += (self.value(s) - target) * s self.actor_w -= self.lr * ga / len(batch) self.critic_w -= self.lr * gc / len(batch) self.train_count += 1 def run_episode(self, max_len=60): s = np.random.rand(4) total = 0.0 batch = [] for _ in range(max_len): a, _ = self.act(s) if a == 0: s2 = s + np.array([0.1, 0.0, 0.0, 0.0]) else: s2 = s + np.array([-0.05, 0.08, 0.0, 0.0]) done = s2[1] > 0.8 r = 1.0 if done else -0.1 batch.append((s, a, s2, r, done)) s = s2 total += r if done: break self.learn(batch) return total def main(): agent = MiniA2C() for i in range(200): score = agent.run_episode() if i % 50 == 0: print("episode", i, "reward", round(score, 2), "updates", agent.train_count) if __name__ == "__main__": main()
probs = softmax(s @ self.actor_w)把原始打分变成每个动作被选中的概率,这是 Actor 的“菜谱”。a = np.random.choice(self.n_action, p=probs)按概率采样动作,保证探索与利用的平衡。target = r if done else r + self.gamma * self.value(s2)用即时奖励加未来折扣价值估算“真实回报”,相当于评论家看完整道菜后的综合评分。adv = target - self.value(s)计算优势:这次动作比平均水平好多少,是主厨调整方向的信号。dlog = probs.copy(); dlog[a] -= 1.0Softmax 的对数概率梯度,实现“优势越大,该动作概率增加越多”。ga += np.outer(s, dlog) * adv策略梯度的核心累积,相当于把 N 位学徒的心得按平均方向汇总。self.actor_w -= self.lr * ga / len(batch)用平均梯度统一更新 Actor 参数,这是 A2C “同步更新”的关键一步。
常见误区
误区我以为 A2C 和 A3C 是两种研究方向不同的算法,就像 DQN 和 Policy Gradient 的区别一样,底层结构完全不同。
正解它们的网络结构、损失函数、优势估计方式几乎一模一样,唯一的关键区别是“同步平均梯度”还是“异步各自推送”。形象地说,同一份连锁店经营手册,A2C 是全员齐步走、统一汇报,A3C 是各店独立研发、随时反馈。数学上两者梯度的期望完全等价。
为何常见:看到名字里一个同步一个异步,很容易先入为主认为是两种“物种”;加上论文中 A3C 用多线程、A2C 用多进程,工程实现差异加剧了误解。
误区异步并行听起来就比同步高效,所以 A3C 在各种环境下都应该比 A2C 更快收敛。
正解A3C 免去了同步等待,但引入过时梯度(stale gradients)问题——worker 基于旧参数算出的梯度可能干扰新参数。在 GPU 场景下,A2C 能把多个 worker 的梯度打包成矩阵做批量计算,吞吐量反而碾压 A3C。现实中 A2C 在多数基准上表现更好,A3C 更多是思想上的里程碑。
为何常见:直觉上“并行 = 加速”太自然了,容易忽略“异步带来的数据过期成本”这个隐性代价。
误区我觉得 A2C 只是在 REINFORCE 基础上加了另一个网络,两个网络各自独立训练就行。
正解Critic 不是旁观者,它的价值估计直接影响 Actor 的更新信号——优势 $A = Q - V$ 就是用 Critic 的输出来“去均值”的。没有 Critic 的配合,策略梯度会退化为高方差的蒙特卡洛估计。两个网络是咬合在一起的齿轮,不是各自转动的轮子。
为何常见:初学者习惯把模块拆开理解,容易忽略“优势函数”这个连接两者的枢纽。
误区A3C 里的熵正则项会鼓励随机动作,那还不如干脆用 $\epsilon$-greedy 随机探索。
正解熵正则不是盲目加噪声,它是给策略概率分布一个“维持多样性”的软约束,防止策略过早坍缩到某个局部最优动作上。它和 $\epsilon$-greedy 的区别在于:熵正则作用于整个动作分布的形状,而 $\epsilon$-greedy 只在局部加离散扰动。
为何常见:“熵越大越随机”的说法流传太广,让人忽略了熵正则的精确目标是“保持分布平滑”而非“无脑掷骰子”。
误区既然 A3C 有多个 worker 各自独立探索,探索多样性必定远超同步的 A2C。
正解A2C 的多个环境同样在并行采样,只是梯度更新时做了平均。真正的探索多样性来自环境的随机性和策略的熵,而非“异步推送”本身。异步确实让每个 worker 的本地参数短暂偏离全局,但同时也带来过时梯度的副作用,两者抵消后优势并不绝对。
为何常见:把“训练机制”和“探索机制”混为一谈,其实它们是强化学习里两个独立的维度。
面试题
Q1. A2C 中字母 "A" 代表哪一关键概念?
- A.优势函数 Advantage(优势)← 正确答案
- B.异步更新 Asynchronous(异步)
- C.平均梯度 Average(平均)
- D.自适应学习率 Adaptive(自适应)
答案:A。A2C 全称是 Advantage Actor-Critic,字母 A 代表 Advantage(优势函数);而 A3C 中的 A 才是 Asynchronous(异步)。评论家的优势信号是这套算法降低方差的核心,选项 B 描述的是 A3C,C 和 D 是混淆项。
Q2. 在 Actor-Critic 框架中,Critic 网络的主要作用是什么?
- A.直接输出每个动作的最佳选择值
- B.评估状态好坏并计算优势信号← 正确答案
- C.储存并回放历史经验数据
- D.控制智能体与环境的交互频率
答案:B。Critic 的角色是美食评论家——评估当前状态的价值 V(s),并用它构造优势信号 A = Q − V。它不直接选动作(那是 Actor 的工作),不做经验回放(那是 DQN 的做法),也不管交互频率。
Q3. A2C 与 A3C 在训练机制上的关键区别是什么?
- A.前者用神经网络而后者用查表
- B.前者同步平均梯度而后者异步推送← 正确答案
- C.前者没有评论家而后者有评论家
- D.前者只能处理离散动作空间
答案:B。两者都使用神经网络、都有评论家、都支持离散和连续动作。核心差异在于组织方式:A2C 将所有 worker 的梯度平均后统一更新,A3C 的 worker 各自异步推送梯度,如同“齐步走”和“各自研发”的经营模式差别。
Q4. A3C 中加入熵正则项的主要目的是什么?
- A.提升单次采样的内存利用率
- B.防止策略过早坍缩而失去探索← 正确答案
- C.同时优化多个评论家网络参数
- D.让异步线程之间的通信更快
答案:B。熵正则项奖励动作概率分布保持一定的“犹豫度”,避免策略太早锁定到某个动作。它是主厨的“创新菜配额”,与内存、多评论家、线程通信都无关,目的是平衡探索与利用。
Q5. 关于 A2C 中 n 步时序差分优势估计,下列说法正确的是?
- A.只利用单步即时奖励计算价值差
- B.使用 n 步累积奖励与价值差估计优势← 正确答案
- C.必须等到整个回合结束才能计算
- D.优势始终等于奖励累计总和的相反数
答案:B。A2C 的 worker 采集 n 步后,用 $\sum_{i=0}^{n-1} \gamma^i r_i + \gamma^n V(s_n)$ 估算回报,再减当前状态价值得到优势。它既不用单步奖励(Bootstrap 过强),也不必等到回合结束(REINFORCE 的做法),更不是相反数。
Q6. 与 A2C 相比,PPO 在策略更新上的关键改进是什么?
- A.用截断比值限制单次更新幅度← 正确答案
- B.使用两层网络替换单层线性网络
- C.将异步线程数量从 N 增加到 2N
- D.完全放弃优势函数只使用奖励值
答案:A。PPO 的 CLIP 目标用新旧策略概率比 r_t 配合 clip 函数,把每次更新的幅度限制在 [1−ε, 1+ε] 内,防止策略被一个坏 batch 推得太远。它继承了 Actor-Critic 架构,仍然使用优势函数,B/C/D 描述都不对。
Q7. A3C 中每个工作线程更新全局参数的基本流程是什么?
- A.先等待其他线程全部同步完毕再更新
- B.独立采样计算梯度后随时推送给全局网络← 正确答案
- C.只在完整 episode 结束后推一次梯度
- D.将全局策略网络复制到本地后就再也不更新
答案:B。A3C 的每个 worker 独立采样 n 步、独立计算梯度,算完立即异步推送给全局网络,然后拉取最新参数继续。这正是“分店各自研发、随时反馈”的经营模式;A 是 A2C 的做法,C 是 REINFORCE 的回合制做法,D 则完全错误。
Q8. 关于 A2C 稳定性来源,下列说法正确的有哪些?
- A.多个线程采样后统一进行梯度平均← 正确答案
- B.价值函数为策略梯度提供低方差基线← 正确答案
- C.每次只用单个样本的奖励信号更新
- D.批量更新使得参数变化方向更平滑← 正确答案
答案:ABD。A2C 的稳定来自三点:多 worker 梯度平均(A)、Critic 提供基线降低方差(B)、批量更新让方向平滑(D)。C 恰恰相反——A2C 用的是批量采样,不是单样本更新,单样本更新方差很大。
Q9. 下列关于 A3C 异步机制可能带来的影响,正确的有哪些?
- A.线程参数过期可能产生过时梯度← 正确答案
- B.异步并行可以提高环境采样吞吐量← 正确答案
- C.异步一定比同步算法收敛性能更好
- D.多个线程增加了探索行为的多样性← 正确答案
答案:ABD。A3C 的 worker 推送梯度时全局参数可能已变化,产生过时梯度(A 对);多个环境并行推进确实提升采样吞吐(B 对);多线程独立探索带来多样性(D 对)。C 太绝对——大量实验表明 GPU 下同步的 A2C 往往表现更好,异步并不保证更优。
Q10. 适合选择 A2C 而不是 DQN 的典型场景有哪些?
- A.需要处理连续动作空间的机器人控制← 正确答案
- B.动作空间为离散且状态空间较小的卡片棋牌
- C.训练过程需要输出动作概率并引入随机策略← 正确答案
- D.必须使用固定目标网络打破样本相关性
答案:AC。A2C 的策略梯度天然支持连续动作(A 对),且输出的是动作概率分布而非 Q 值,支持随机策略(C 对)。B 类场景 DQN 也能胜任,不算典型优势;D 是 DQN 的机制,A2C 不需要固定目标网络。