本专栏按照 https://lilianweng.github.io/lil-log/2018/04/08/policy-gradient-algorithms.html 顺序进行总结 。
D 4 P G \color{red}D4PG D4PG :[ paper | code ]
原理解析
主要 trick
D4PG 主要是在 DDPG的基础上做了一系列修改以应用分布式。
即:主要从两个方面对DDPG进行扩展:
- Distributed:对Actor,将单一Actor扩展至多个,并行收集experience,如算法Actor部分所示
- Distributional:对Critic,将Critic由一个函数扩展成一个分布
总体框架与DDPG相同,引入了一些trick:
- 支持分布式,由于是off-policy的算法,因此可以使用多个actor去分布式地采样,然后存储在同一个replay buffer中,learner从buffer中采样,更新之后再将权重同步到各个actor上。
- critic使用价值函数分布,分布式评论家不再只估计Q值的期望值,而是去估计期望Q值的分布,即将期望Q值作为一个随机变量来进行估计;学习该分布的参数所对应的损失函数是去最小化两个分布之间的某种距离度量,损失函数变为(d是距离度量): L ( w ) = E ρ [ d ( T π θ ′ Z ω ′ ( x , a ) , Z ω ( x , a ) ) ] L(w)=\mathbb{E}_ρ[d(\Tau_{\pi_{\theta'}}Z_{\omega'}(x,a),Z_\omega(x,a))] L(w)=Eρ[d(Tπθ′Zω′(x,a),Zω(x,a))];;其中, ( T π Z ) ( x , a ) = r ( x , a ) + γ E [ Z ( x ’ , π ( x ’ ) ) ∣ x , a ] (T_\pi Z)(x, a)=r(x,a)+\gamma\mathbb{E}[Z(x’,\pi(x’))|x,a] (TπZ)(x,a)=r(x,a)+γE[Z(x’,π(x’))∣x,a] 为 distributional Bellman operator, Z 是用来估计 Q 的, Q π ( x , a ) = E Z π ( x , a ) Q_\pi(x,a) = \mathbb{E}Z_\pi(x,a) Qπ(x,a)=EZπ(x,a)
- 引入n-step TD error:当计算TD误差时,D4PG计算的是N步的TD目标值而不仅仅只有一步,这样就可以考虑未来更多步骤的回报。这样可以减少更新的variance: r ( s 0 , a 0 ) + E [ ∑ n = 1 N − 1 r ( s n , a n ) + γ N Q ( s N , μ θ ( s N ) ) ∣ s 0 , a 0 ] r\left(s_{0}, a_{0}\right)+\mathbb{E}\left[\sum_{n=1}^{N-1} r\left(s_{n}, a_{n}\right)+\gamma^{N} Q\left(s_{N}, \mu_{\theta}\left(s_{N}\right)\right) | s_{0}, a_{0}\right] r(s0,a0)+E[∑n=1N−1r(sn,an)+γNQ(sN,μθ(sN))∣s0,a0]
- 使用prioritized experience replay:可以加速学习;使用一个非均匀的概率 p i p_i pi 从一个大小为 R R R 的回放缓冲中进行采样。在这种采样方式下,一个样本 i i i 将以概率 ( R p i ) − 1 (Rpi)^{−1} (Rpi)−1 被采样到因而重要性权重为 ( R p i ) − 1 (Rpi)^{−1} (Rpi)−1 。
与 DDPG的异同
DDPG 与 D4PG
算法实现
总体流程
代码实现
见github