IMPALA(Importance Weighted Actor-Learner Architectures
IMPALA特性
- 每个Actor单独定期地从Learner同步参数,然后进行数据收集(s, a, r, s’)。
- 所有Actor收集的数据都会即时存储到数据采样队列(queue)里。
- 当队列的数据达到mini-batchsize时,Learner开始梯度学习,并更新其参数。
- Actor与Learner互不干扰,Actor定期从Learner同步参数,Learner定量学习更新参数。
- Learner也可以是分布式集群,这种情况下,Actor需要从集群同步参数。
- Actor一般使用CPU,Learner使用GPU。
- 与A2C相比,Actor采集数据无需等待,并由GPU快速统一学习。与A3C相比 ,Actor无需计算梯度,只需收集数据,数据吞吐量更大。与GA3C相比,引入V-trace策略纠错,同时接受更大延迟,方便大规模分布式部署Actors。框架拓展方便,支持多任务学习
缺点:
资源利用率低、无法大规模扩展
当场景包含很多终止条件的Episode,而又对这些终止(Terimal)敏感时,不管是在Actor收集数据时,还是在Learner梯度学习时,分段处理长短不一的Episode,都会大大降低IMPALA的性能,影响其流畅性;所以场景最好是Episode不会终止或者是对终止不敏感。
由于IMPALA中的Actor不等待Learner产生了一个问题,Learner还在计算新的para的时候,actor继续使用旧的para生产数据,导致learner读取数据进行para更新的时候,部分数据是旧数据(actor前向推理的参数滞后问题),因此引入V-trace
V-trace
问题描述:learner和actor都已经应用了新的para,即新的policy,记为π。而读入的数据是由旧的policy,记为μ,产生的。如何修正,使得使用这些数据来计算不会产生太大偏差?核心思想是Important Sampling(IMPALA的Important Weighted就是这个意思)。
算法中需要根据采样到的样本来维护一个状态价值函数 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,μ(at∣xt)} 和 当前状态价值函数网络 来给出 当前状态价值函数的一个更好的估计 v s ( s ) v_s(s) vs(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:{\kern 1pt} {\kern 1pt} {\kern 1pt} 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 \bar \rho }}
Vπρˉ,该价值函数对应的策略如下所示;最后面我们通过计算V-trace算子的不动点可以得到这个结论。
- 状态价值函数
V
θ
(
x
)
V_{\theta}(x)
Vθ(x)每次往上
v
s
v_s
vs 更新,收敛到的状态价值函数是介于
V
π
{V^\pi }
Vπ和
V
μ
V^\mu
Vμ 之间的某个价值函数,我们记该价值函数为
V
π
ρ
ˉ
{V^{\pi \bar \rho }}
Vπρˉ,该价值函数对应的策略如下所示;最后面我们通过计算V-trace算子的不动点可以得到这个结论。
- 为了避免importance weight发散,我们需要加上相应的上界来避免;参数 ρ ˉ \bar \rho ρˉ 决定了收敛到的不动点位置; c ˉ \bar c cˉ和 ρ ˉ \bar \rho ρˉ 决定了收敛的速率。
- 在on-policy的情况下,如果 ρ ˉ \bar \rho ρˉ ≥ c ˉ \bar c cˉ≥ 1 ,那么 v s v_s vs就退化为on-policy n-steps Bellman target。