玉环市建设规划局网站,厦门集美建设局网站,有关网站建设的毕业设计,正确的网址格式例子在 DQN 称霸的时代#xff0c;我们为了解决强化学习中样本**“非独立同分布#xff08;Non-IID#xff09;”**的问题#xff0c;不得不引入了一个巨大的外挂硬盘——经验回放池#xff08;Experience Replay Buffer#xff09;。
然而#xff0c;2016 年 DeepMind 推出…在 DQN 称霸的时代我们为了解决强化学习中样本**“非独立同分布Non-IID”**的问题不得不引入了一个巨大的外挂硬盘——经验回放池Experience Replay Buffer。然而2016 年 DeepMind 推出 A3CAsynchronous Advantage Actor-Critic就像一道闪电划破夜空。它告诉我们只要你的“分身”够多你就不需要“记忆”。A3C 和随后 OpenAI 改进的 A2C不仅是 Actor-Critic 架构的集大成者更是一次关于**“并行计算如何改变算法收敛性”**的数学实验。今天我们深入公式内部拆解并行化带来的质变。一、回顾 Actor-Critic 的数学痛点在进入并行化之前我们必须先写出 Actor-Critic (AC) 的核心目标函数。AC 架构由两个网络组成Actor (πθ\pi_\thetaπθ)负责输出动作概率。Critic (VwV_wVw)负责评价状态价值。我们优化的目标是最大化期望回报J(θ)J(\theta)J(θ)。根据策略梯度定理Actor 的梯度更新公式为∇θJ(θ)Est,at∼π[∇θlogπθ(at∣st)⋅A(st,at)] \nabla_\theta J(\theta) \mathbb{E}_{s_t, a_t \sim \pi} \left[ \nabla_\theta \log \pi_\theta(a_t | s_t) \cdot A(s_t, a_t) \right]∇θJ(θ)Est,at∼π[∇θlogπθ(at∣st)⋅A(st,at)]其中A(st,at)A(s_t, a_t)A(st,at)是优势函数Advantage Function它衡量了“在这个状态下选动作ata_tat比平均情况好多少”。在实际计算中我们用 TD Error 来估计它A(st,at)≈rtγVw(st1)−Vw(st) A(s_t, a_t) \approx r_t \gamma V_w(s_{t1}) - V_w(s_t)A(st,at)≈rtγVw(st1)−Vw(st)痛点在于如果不使用 Replay Buffer单个 Agent 产生的数据是高度**时间相关Temporally Correlated**的。st→st1→st2… s_t \rightarrow s_{t1} \rightarrow s_{t2} \dotsst→st1→st2…这种强相关性会导致梯度下降的方向跑偏Bias让神经网络陷入局部最优或震荡。但如果使用 Replay Buffer我们又变成了 Off-Policy异策略这在处理连续动作或复杂策略时往往不稳定。A3C 的出现就是为了解决这个悖论如何在 On-Policy在线策略的前提下打破数据相关性二、A3C多线程的梯度异步轰炸A3C 的全称是Asynchronous Advantage Actor-Critic。它的核心逻辑是创建多个 Worker子线程每个 Worker 拥有独立的完整环境实例。1. N-Step 回报平衡偏差与方差A3C 并不使用单步 TD而是通常使用N-Step Return来计算目标值。这可以让奖励传播得更快。对于某个 Worker在ttt时刻它向前探索nnn步计算截断的累积回报Gt(n)G_t^{(n)}Gt(n)Gt(n)∑k0n−1γkrtkγnVw(stn) G_t^{(n)} \sum_{k0}^{n-1} \gamma^k r_{tk} \gamma^n V_w(s_{tn})Gt(n)k0∑n−1γkrtkγnVw(stn)这里前nnn步是真实的奖励低偏差高方差最后加上的是 Critic 的预测值Vw(stn)V_w(s_{tn})Vw(stn)引入偏差降低方差。2. 损失函数的构造每个 Worker 独立计算累积梯度。总损失函数LLL由三部分组成策略损失、价值损失和熵正则项。LLπ⏟Policy Loss12Lv⏟Value Loss−βH(π)⏟Entropy L \underbrace{L_\pi}_{\text{Policy Loss}} \frac{1}{2} \underbrace{L_v}_{\text{Value Loss}} - \beta \underbrace{H(\pi)}_{\text{Entropy}}LPolicy LossLπ21Value LossLv−βEntropyH(π)展开来看策略梯度损失我们要最大化目标所以 Loss 加负号Lπ−logπθ(at∣st)⋅(Gt(n)−Vw(st)) L_\pi - \log \pi_\theta(a_t | s_t) \cdot (G_t^{(n)} - V_w(s_t))Lπ−logπθ(at∣st)⋅(Gt(n)−Vw(st))(注意这里的Gt(n)−Vw(st)G_t^{(n)} - V_w(s_t)Gt(n)−Vw(st)即为 N-step 的优势函数估计)价值函数损失MSELv(Gt(n)−Vw(st))2 L_v (G_t^{(n)} - V_w(s_t))^2Lv(Gt(n)−Vw(st))2熵正则项鼓励探索防止过早收敛H(π)−∑πθ(a∣st)logπθ(a∣st) H(\pi) - \sum \pi_\theta(a | s_t) \log \pi_\theta(a | s_t)H(π)−∑πθ(a∣st)logπθ(a∣st)3. 异步更新Hogwild!这是 A3C 最狂野的地方。Worker 计算出梯度dθd\thetadθ后直接推送到全局网络Global Networkθglobal←θglobal−η⋅∇L(θworker) \theta_{global} \leftarrow \theta_{global} - \eta \cdot \nabla L(\theta_{worker})θglobal←θglobal−η⋅∇L(θworker)然后Worker 立刻把最新的θglobal\theta_{global}θglobal复制回自己身上继续跑。关键点这个过程是异步的没有锁Lock-free。这意味着 Worker A 更新参数时Worker B 可能正在用旧参数计算梯度。这种“混乱”不仅没有毁掉算法反而引入了额外的噪声起到了类似 SGD 中噪声的作用帮助逃离局部极小值。三、A2C同步的理性回归A3C 很强但 Google DeepMind 的工程师在实现时发现异步编程太痛苦了而且 Python 的多线程受到 GIL全局解释器锁的限制很难利用 GPU 的并行加速能力。OpenAI 的研究者后来提出了A2C (Advantage Actor-Critic)去掉了第一个 “Asynchronous”。他们发现异步并不是必须的并行才是核心。1. 同步更新机制A2C 让所有 Worker 必须“齐步走”。所有 Worker 并行执行动作产生一批数据。等到所有 Worker 都完成一步或 n 步后。将所有数据打包成一个 Batch。利用 GPU 对这个大 Batch 进行一次高效的前向和反向传播。2. 数学上的等价性A2C 的梯度更新本质上是所有 Worker 梯度的平均值∇θJ(θ)batch1N∑i1N∇θJ(θ)i \nabla_\theta J(\theta)_{batch} \frac{1}{N} \sum_{i1}^{N} \nabla_\theta J(\theta)_i∇θJ(θ)batchN1i1∑N∇θJ(θ)i这在数学上比 A3C 更稳健。A3C 因为参数滞后Laggy Updates其实是在优化一个“过时”的策略而 A2C 保证了当前计算梯度的策略和产生数据的策略是完全一致的。公式对比A3C:θt1θtα∇J(θt−τ)\theta_{t1} \theta_t \alpha \nabla J(\theta_{t-\tau})θt1θtα∇J(θt−τ)(存在τ\tauτ的延迟)A2C:θt1θtα1N∑∇Ji(θt)\theta_{t1} \theta_t \alpha \frac{1}{N}\sum \nabla J_i(\theta_t)θt1θtαN1∑∇Ji(θt)(无延迟)四、并行化到底带来了什么我们回到标题。并行化无论是 A3C 还是 A2C到底解决了什么根本问题1. 遍历性的增强 (Ergodicity)在数学上强化学习希望 Agent 能够遍历状态空间SSS。单智能体容易陷入环境的某一个死角Sub-optimal policy。P(s∣πparallel)≈1N∑P(s∣πi) P(s | \pi_{parallel}) \approx \frac{1}{N} \sum P(s | \pi_i)P(s∣πparallel)≈N1∑P(s∣πi)NNN个智能体同时在探索不同的角落相当于极大地拓宽了采样分布的支撑集Support这让神经网络能学到更普适的特征而不是死记硬背某一条路径。2. 替代经验回放 (Replacing Experience Replay)DQN 需要 Replay Buffer 来打破Correlation(st,st1)Correlation(s_t, s_{t1})Correlation(st,st1)。A3C/A2C 通过并行采样使得在一个 Batch 内的数据来源是Batch{(st1,at1),(st2,at2),…,(stN,atN)} Batch \{ (s_t^1, a_t^1), (s_t^2, a_t^2), \dots, (s_t^N, a_t^N) \}Batch{(st1,at1),(st2,at2),…,(stN,atN)}因为环境111和环境NNN是独立的所以Correlation(st1,stN)≈0Correlation(s_t^1, s_t^N) \approx 0Correlation(st1,stN)≈0。这使得我们可以在 On-Policy 的条件下直接训练网络而不需要在内存中存储数百万条过期的历史数据。结语算力换算法的胜利A2C 和 A3C 的故事告诉我们有时候数学上的难题数据相关性、非平稳性可以通过系统架构上的改变并行化来优雅解决。从公式上看它们只是在 Policy Gradient 的基础上加了一个求和符号∑\sum∑但从本质上看它们开启了**大规模分布式强化学习Distributed RL**的先河。后来的 PPO、IMPALA 甚至 AlphaStar其根基都植根于这种并行采样的思想之中。掌握 A2C你就不再只是在训练一个 Agent你是在指挥一支军团。给读者的图片生成提示总结如果你想自己生成文中的配图可以直接复制下面的 Prompt图1数据相关性Concept art comparison. Left side: A single robot snake eating apples and putting them in a jar labeled Memory, cyclical and slow. Right side: Multiple identical robot snakes in parallel separate tunnels, sending energy directly to a central brain. High speed, dynamic, sci-fi style.图2A3C架构Network topology diagram. A large glowing central sphere labeled Global Net. Surrounded by smaller nodes labeled Workers. Red dotted lines moving inwards representing Gradients, Blue solid lines moving outwards representing Parameters. Asynchronous, chaotic connections. Cyberpunk aesthetic.图3Sync vs AsyncVisual comparison of data flow. Top section labeled Asynchronous (A3C): Scattered dots on a timeline, random updates, messy. Bottom section labeled Synchronous (A2C): Organized vertical bars, agents moving in perfect unison, updates happening simultaneously in pulses. Clean infographic style.