当前位置: 代码迷 >> 综合 >> RL策略梯度方法之(十八): Importance Weighted Actor-Learner Architecture (IMPALA)
  详细解决方案

RL策略梯度方法之(十八): Importance Weighted Actor-Learner Architecture (IMPALA)

热度:40   发布时间:2023-12-15 05:32:46.0

本专栏按照 https://lilianweng.github.io/lil-log/2018/04/08/policy-gradient-algorithms.html 顺序进行总结 。


文章目录

  • 原理解析
  • 算法实现
    • 总体流程
    • 代码实现


基于重要性采样的分布式深度强化学习算法

SVPG\color{red}SVPGSVPG :[ paper:Stein Variational Policy Gradient | code ]


原理解析

以下总结来源于:https://blog.csdn.net/yH0VLDe8VG8ep9VGe/article/details/79292530

IMPALA的灵感来自于热门的A3C架构,后者使用多个分布式actor来学习agent的参数。在类似这样的模型中,每个actor都使用策略参数的一个副本,在环境中操作actor会周期性地暂停探索,将它们已经计算得出的梯度信息分享至中央参数服务器,而后者会对此进行更新。

在这里插入图片描述
与此不同,IMPALA中的actor不会被用来计算梯度信息。它们只是收集经验,并将这些经验传递至位于中心的learnerlearner计算梯度。因此在这样的模型中,actor 和 learner 是完全独立的。为了利用当代计算系统的规模优势,IMPALA在配置中可支持单个learner机器也可支持多个相互之间同步的learner机器。以这种方式将学习和操作分开也有利于提升整个系统的吞吐量,因为与批量A2C这类架构不同,actor不再需要等待学习步骤。这帮助我们在有趣的环境中训练IMPALA,同时不必面临由于帧渲染时间或任务重启耗时造成的差异。

在这里插入图片描述
不过操作和学习的解耦也导致,actor的策略落后于learner。为了弥补这样的差距,我们引入了离策略优势actor-评价者公式V-trace。它弥补了离策略actor获得的轨迹。你可以从我们的论文中了解算法及其分析细节。
在这里插入图片描述
凭借优化的模型,与传统agent相比,IMPALA可以处理多出一到两个数量级的经验,使得在挑战性环境中的学习成为可能。我们将IMPALA与多种热门的actor-评价者方法进行了比较,发现前者有明显的速度提升。此外,IMPALA的吞吐量上升与actor、learner的数量增长呈线性关系。这表明,分布式agent模型和V-trace算法都可以胜任超大规模的实验,即使机器数量达到数千台。

在利用DMLab-30关卡进行测试时,与分布式A3C相比,IMPALA的数据效率达到10倍,而最终得分达到两倍。此外,与单任务环境中的训练相比,IMPALA在多任务环境的训练中表现出正向转换。

以下总结来源于:https://zhuanlan.zhihu.com/p/58226117?utm_source=wechat_session

在这里插入图片描述
Single Learner

learner 的主要作用是通过获取 actor 得到的轨迹来做 SGD 来更新各个神经网络的参数,神经网络训练本身可并行的特性,learner 使用的是一块GPU。actor 定期从 learner 获取最新的神经网络参数,并且每个 actor 起一个模拟环境,来使用自己能获得的最新策略去采样,并且把获取到的 {xt,at,rt,μ(at∣xt)}\{ x_t, a_t, r_t, \mu(a_t|x_t)\}{ xt?,at?,rt?,μ(at?xt?)} 传回供 learner 去更新各个神经网络参数。由于模拟环境的运行通常不方便做并行,actor 一般使用 CPU。由于 actor 上的策略 μ\muμ 可能不是 learner中最新的策略 π\piπ ,因此这里使用了不同的符号来表示。

下一步,当训练规模扩大的时候,可以考虑使用多个learner(多块GPU)并且每块GPU配套多个 actor (CPU)。每个learner只从自己的 actor 们中获取样本进行更新,learner之间定期交换gradient并且更新网络参数actor也定期从任意learner上获取并更新神经网络参数。(这里有点没搞懂,为啥 actor 会去从别的learner那里拿神经网络参数?参考了[1]还是不明白)

IMPALA中 actorlearner相互异步工作,极大提高了时间利用率。文章还与与batched A2C做了对比,如下图所示。

  • a图中,正向传播和反向传播都想凑一批来做(可能是给到GPU来算),因此每一步都需要同步,而模拟环境各步所需时间方差很大,这样浪费了大量的等待时间;
  • b图中,只把耗时较长的反向传播凑一批来做,正向传播就给各个 actor 自己做;
  • 而c图中的IMPALA则完全把 actorlearner分开异步进行,这样 actor 不用去等待别的 actor ,可以尽可能多的做采样,相应地,所作出的牺牲就是每次更新得到的样本变为了off-policy样本。接下来本文提出了 V-trace 对于 off-policy 样本做修正。

在这里插入图片描述

V-trace

算法中需要根据采样到的样本来维护一个状态价值函数 Vθ(x)V_{\theta} (x)Vθ?(x),V-trace的目的是根据采样到的 {xt,at,rt,μ(at∣xt)}\{ x_t, a_t, r_t, \mu(a_t|x_t)\}{ xt?,at?,rt?,μ(at?xt?)} 和 当前状态价值函数网络 来给出 当前状态价值函数的一个更好的估计 vsv_svs?sss 下标表示它是其中的一个样本),这样价值神经网络就可以把它作为一个更新的目标来更新权重。

我们直接写出 vsv_svs? 的表达形式。
在这里插入图片描述
它具有如下性质:

  • 状态价值函数 Vθ(x)V_{\theta} (x)Vθ?(x) 每次往 vsv_svs? 上更新,最后能够收敛;最后面我们会证明如果有 V-trace 算子 R:V(xs)→vsR:V(x_s) \to v_sR:V(xs?)vs?,那么该算子是contraction。

  • 状态价值函数 Vθ(x)V_{\theta} (x)Vθ?(x) 每次往 vsv_svs? 上更新,收敛到的状态价值函数是介于 VπV^{\pi}VπVμV^{\mu}Vμ 之间的某个价值函数,我们记该价值函数为 Vπρ?V^{\pi_{\overline \rho}}Vπρ?? ,该价值函数对应的策略如下所示;最后面我们通过计算V-trace算子的不动点可以得到这个结论。
    在这里插入图片描述

  • 为了避免importance weight发散,我们需要加上相应的上界来避免;参数 ρ?\overline \rhoρ? 决定了收敛到的不动点位置; c?\overline ccρ?\overline \rhoρ? 决定了收敛的速率。

  • 在on-policy的情况下,如果 ρ?≥c?≥1\overline \rho \ge \overline c \ge1ρ?c1 ,那么 vsv_svs? 就退化为on-policy n-steps Bellman target。

算法实现

总体流程

代码实现

  相关解决方案