参考内容:https://zhuanlan.zhihu.com/p/58226117
参考书籍:《深度强化学习学术前沿与实战应用》
IMPALA全名Importance Weighted Actor-Learner Architecture,也就是重要性加权Actor-learner架构,可以训练高效复杂的任务序列。
框架概述
在实际的问题场景中,我们可以将数百个Actor设置在每一个服务器的每一个线程上,它们可以相互独立,同时处理一个任务,也可以同时训练不同的任务,下面开始运行一个完整的过程。
从每一段训练过程开始,每个Actor将自己的本地策略和中心Learner的最新策略同步,之后于自身所处的环境交互n个时间步。在n步之后,Actor发送自己经历这一段“状态——动作——奖励”的轨迹 “ s 1 , a 1 , r 1 , s 2 , a 2 , r 2 , . . . s n , a n , r n ” “s_1,a_1,r_1,s_2,a_2,r_2,...s_n,a_n,r_n” “s1,a1,r1,s2,a2,r2,...sn,an,rn”,以及自己本地的策略分布(包括LSTM的初始状态,通过相应的队列等数据结构),发送回给Learner,我们的Learner从训练启动开始就在不断地收到来自Actor的这些序列信息和策略,并且在这些序列信息中不断进行自身更新。在各个线程训练actor的过程中,Learner是在不断学习更新策略的,无需等待actor都训练完毕,因此Learner的策略是在时间上比所有actor超前很多的,每一个Actor和Learner的时间差距有不同,这样的巨大差异是不利于训练质量的,但为了训练速度我们又不能妥协去把异步改为同步,使得服务器相互等待。
V-trace
这里引入了一种off-policy的actor-critic算法——V-trace,它用在像IMPALA这样的分布式任务框架上,改进了原先计算梯度的公式,来适应Actor于Learner在策略上的时间差。
在A3C这样的on-policy场景,值函数的更新可以表示为:
V s = V ( x s ) + ∑ t = s s + n − 1 γ t − s ( r t + γ V ( x t + 1 ) − V ( x t ) ) V_s = V(x_s) + \sum_{t=s}^{s+n-1} \gamma^{t-s}(r_t + \gamma V(x_{t+1}) - V(x_t)) Vs=V(xs)+t=s∑s+n−1γt−s(rt+γV(xt+1)−V(xt))
这时候我们采用off-policy策略来修正时间差,从比较过时和比较新的策略去估计一个最好的策略,这就需要用到重要性采样(Importance Sampling)。这时候我们可以得到在n步下V-trace算法下的目标价值函数:
V s = d e f V ( x s ) + ∑ t = s s + n − 1 γ t −