本专栏按照 https://lilianweng.github.io/lil-log/2018/04/08/policy-gradient-algorithms.html 顺序进行总结 。
文章目录
- 原理解析
-
- 1. Retrace Q-value Estimation
- 2. 重要性权重截断
- 3. 高效TRPO
- 4. 需要注意的点:
- 算法实现
-
- 总体流程
- 代码实现
具有经验回放的actor-critic
ACER\color{red}ACERACER :[ paper | code ]
原理解析
(ACER为了利用历史数据使用了多项技术,整体算法较为复杂)
ACER 是 actor-critic with experience replay 的缩写,是一种带经验回放的 off-policy 的actor-critic模型,可以使用off-policy训练的置信域策略优化方法,极大地提高了样本效率,降低了数据相关性。A3C为 ACER 奠定了基础,但是 A3C 是 on-policy的, 其实 ACER 是 A3C 的off-policy 版本。 使 A3C off-policy 的主要障碍是如何控制 off-policy estimator 的稳定性。 ACER 提出了三种设计方案来克服这一问题:
- 使用 Retrace Q值估计
- 使用偏差校正截断重要性权重,,控制方差的同时保证了无偏性;
- 更加高效的TRPO算法:一种新的置信域方法,计算简单,适合大规模问题;
1. Retrace Q-value Estimation
Retrace 是一种基于off-policy return-based Q-value estimation algorithm(离线的基于累积回报的Q值估计算法),它在任意的?标-策略?络对 (π,β)(\pi, \beta)(π,β) 下都有?个?较好的收敛性保证并且拥有很好的数据有效性。
回忆一下TD学习是如何进行预测的:
- 计算TD误差:δt=Rt+γEa?πQ(St+1,a)?Q(St,At)\delta_{t}=R_{t}+\gamma \mathbb{E}_{a \sim \pi} Q\left(S_{t+1}, a\right)-Q\left(S_{t}, A_{t}\right)δt?=Rt?+γEa?π?Q(St+1?,a)?Q(St?,At?);其中 rt+γEa?πQ(st+1,a)r_{t}+\gamma \mathbb{E}_{a \sim \pi} Q\left(s_{t+1}, a\right)rt?+γEa?π?Q(st+1?,a) 被称为”TD目标“。使用期望值 Ea?π\mathbb{E}_{a \sim \pi}Ea?π? 是因为如果我们遵循当前策略 πππ 的话对于未来时间步我们能做的最好的估计就是累积回报可能是多少。
- 通过校正误差往目标移动来更新Q值:Q(St,At)←Q(St,At)+αδtQ\left(S_{t}, A_{t}\right) \leftarrow Q\left(S_{t}, A_{t}\right)+\alpha \delta_{t}Q(St?,At?)←Q(St?,At?)+αδt?。换句话说,Q的增量更新幅度与TD误差成正比:ΔQ(St,At)=αδt\Delta Q\left(S_{t}, A_{t}\right)=\alpha \delta_{t}ΔQ(St?,At?)=αδt?。
当进行离线采样时,我们需要在Q值更新过程中应用重要性采样:
ΔQimp(St,At)=γt∏1≤τ≤tπ(Aτ∣Sτ)β(Aτ∣Sτ)δt\Delta Q^{\mathrm{imp}}\left(S_{t}, A_{t}\right)=\gamma^{t} \prod_{1 \leq \tau \leq t} \frac{\pi\left(A_{\tau} | S_{\tau}\right)}{\beta\left(A_{\tau} | S_{\tau}\right)} \delta_{t} ΔQimp(St?,At?)=γt1≤τ≤t∏?β(Aτ?∣Sτ?)π(Aτ?∣Sτ?)?δt?
当我们想象一下重要性权重的连乘会带来多大的方差时就会感觉到这个连乘项有多么可怕了。Retrace Q值估计方法通过截断重要性权重使其不超过某个常数 ccc 的方式对 ΔQΔQΔQ 进行修改:
ΔQret(St,At)=γt∏1≤τ≤tmin?(c,π(Aτ∣Sτ)β(Aτ∣Sτ))δt\Delta Q^{\mathrm{ret}}\left(S_{t}, A_{t}\right)=\gamma^{t} \prod_{1 \leq \tau \leq t} \min \left(c, \frac{\pi\left(A_{\tau} | S_{\tau}\right)}{\beta\left(A_{\tau} | S_{\tau}\right)}\right) \delta_{t} ΔQret(St?,At?)=γt1≤τ≤t∏?min(c,β(Aτ?∣Sτ?)π(Aτ?∣Sτ?)?)δt?
ACER使用 QretQ^{\mathrm{ret}}Qret 作为TD目标通过最小化 L2 误差项来训练评论家:(Qret(s,a)?Q(s,a))2\left(Q^{\mathrm{ret}}(s, a)-Q(s, a)\right)^{2}(Qret(s,a)?Q(s,a))2
2. 重要性权重截断
为了减少估计策略梯度 g^\hat{g}g^? 时产生的高方差,ACER使用一个常数 ccc 加上一个校正项来截断重要性权重。g^tacer \hat{g}_{t}^{\text { acer }}g^?t acer ? 代表 ttt 时刻的ACER策略梯度。
g^tacer=ωt(Qret(St,At)?Vθv(St))?θln?πθ(At∣St); 令 ωt=π(At∣St)β(At∣St)=min?(c,ωt)(Qret(St,At)?Vw(St))?θln?πθ(At∣St)+Ea?π[max?(0,ωt(a)?cωt(a))(Qw(St,a)?Vw(St))?θln?πθ(a∣St)]; 令 ωt(a)=π(a∣St)β(a∣St)\begin{aligned} \hat{g}_t^\text{acer} = & \omega_t \big( Q^\text{ret}(S_t, A_t) - V_{\theta_v}(S_t) \big) \nabla_\theta \ln \pi_\theta(A_t \vert S_t) & \scriptstyle{\text{; 令 }\omega_t=\frac{\pi(A_t \vert S_t)}{\beta(A_t \vert S_t)}} \\ = & \color{blue}{\min(c, \omega_t) \big( Q^\text{ret}(S_t, A_t) - V_w(S_t) \big) \nabla_\theta \ln \pi_\theta(A_t \vert S_t)} \\ & + \color{red}{\mathbb{E}_{a \sim \pi} \big[ \max(0, \frac{\omega_t(a) - c}{\omega_t(a)}) \big( Q_w(S_t, a) - V_w(S_t) \big) \nabla_\theta \ln \pi_\theta(a \vert S_t) \big]} & \scriptstyle{\text{; 令 }\omega_t (a) =\frac{\pi(a \vert S_t)}{\beta(a \vert S_t)}} \end{aligned} g^?tacer?==?ωt?(Qret(St?,At?)?Vθv??(St?))?θ?lnπθ?(At?∣St?)min(c,ωt?)(Qret(St?,At?)?Vw?(St?))?θ?lnπθ?(At?∣St?)+Ea?π?[max(0,ωt?(a)ωt?(a)?c?)(Qw?(St?,a)?Vw?(St?))?θ?lnπθ?(a∣St?)]?; 令 ωt?=β(At?∣St?)π(At?∣St?)?; 令 ωt?(a)=β(a∣St?)π(a∣St?)??
其中 Qw(.)Q_{w}( .)Qw?(.) 以及 Vw(.)V_{w}( .)Vw?(.) 由 www 参数化的评论家预测的动作-值以及状态-值。第一项(蓝色部分)包含了截断重要性权重。截断操作促进方差缩减,减去状态-值 Vw(.)V_{w}( .)Vw?(.) 作为基准进一步加强了方差缩减的效果。第二项(红色部分)进行了校正使得上述方差估计为无偏估计。
3. 高效TRPO
此外,ACER采用TRPO的思想,但通过一个小的调整使其具有更高的计算效率:ACER不再去计算当前策略与更新一步之后的新策略之间的KL散度,而是去维护一个历史策略的运行平均(running average)值并且强制新策略不会偏离这个平均策略太远。
ACER论文信息量很大,包含很多公式。但是在事先了解了TD学习,Q学习,重要性采样和TRPO之后,你会发现这篇论文会稍微变得容易理解一些:)
4. 需要注意的点:
- 算法首先on-policy地采样(存数据到buffer)并训练,然后多次从buffer中采样off-policy训练,off-policy训练的次数将在实验中进行讨论;
- sample的trajectory是有顺序的,不是完全的DQN类似的随机采样;
- 状态值函数通过当前策略下的动作值函数期望计算 V(s)=Ea?π[Q(s,a)]V(s)=Ea?π?[Q(s,a)]V(s)=E_{a - \pi}[Q(s,a)]V(s)=Ea?π?[Q(s,a)]V(s)=Ea?π?[Q(s,a)]V(s)=Ea?π?[Q(s,a)]
- 把retrace作为动作值函数网络的target更新动作值网络;
- Qretrace更新拆为了两步,实际上和retrace公式等价,先将后面t+1的项加上再加前面的rt:
- 由于需要历史数据的策略分布,因此在存数据的时候需要存策略分布参数。