IMPALA 分布式框架 学习笔记

以下总结来源于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 起一个模拟环境,来使用自己能获得的最新策略去采样,并且把获取到的 { x t , a t , r t , μ ( a t ∣ x t ) } \{ x_t, a_t, r_t, \mu(a_t|x_t)\} {xt,at,rt,μ(atxt)} 传回供 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的目的是根据采样到的 { x t , a t , r t , μ ( a t ∣ x t ) } \{ x_t, a_t, r_t, \mu(a_t|x_t)\} {xt,at,rt,μ(atxt)} 和 当前状态价值函数网络 来给出 当前状态价值函数的一个更好的估计 v s v_s vs s s s 下标表示它是其中的一个样本),这样价值神经网络就可以把它作为一个更新的目标来更新权重。

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

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

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

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

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值