美文网首页
系列论文阅读——Policy Gradient Algorith

系列论文阅读——Policy Gradient Algorith

作者: 想学会飞行的阿番 | 来源:发表于2020-05-25 15:05 被阅读0次

发个库存,嘻嘻,这篇主要讲AC类算法

演员-评论家算法(Actor-Critic)

上文公式中我们采用的累计回报和(G_t=\sum^{T-t}_{k=0}R_{t+k+1}),虽然它是期望收益的无偏估计,但由于只使用了一个样本,存在方差非常大的问题,在这里我们用Q^\pi(s,a)代替原来公式中的累计回报:
Qπ(s,a)=E_{\pi_\theta}[\sum_{t=0}^{T}r_t| s_0=s,a_0=a]\\ \begin{aligned} \nabla_\theta J(\theta) &=E_{s\sim \rho_\pi,a \sim \pi_\theta}\left[\sum^T_{t=0}\nabla_{\theta} log \ \pi_{\theta}(a_{t}|s_{t})Q_\pi(s_{t},a_{t})\right] \\ &\approx \frac{1}{N}\sum_{n=0}^N\left[\sum^T_{t=0}\nabla_{\theta} log \ \pi_{\theta}(a_{i,t}|s_{i,t})Q_\pi(s_{i,t},a_{i,t})\right]\\ \end{aligned}
若同时加入值函数作为baseline:
V_\pi(s)=E_{\pi_\theta}\left[\sum_{t=0}^Tr_t|s_0=s\right]
此时,梯度函数可以转为:
\begin{aligned} \nabla_\theta J(\theta) &\approx \frac{1}{N}\sum^N_{i=0}\sum^T_{t=1}\bigtriangledown_\theta\log\pi_\theta(a_{i,t}|s_{i,t})\left[Q(s_{i,t},a_{i,t})-V(s_i)\right] \\ &= \frac{1}{N}\sum^N_{i=0}\sum^T_{t=1}\bigtriangledown_\theta\log\pi_\theta(a_{i,t}|s_{i,t})A(s_{i,t},a_{i,t}) \end{aligned}

A (s_t,a_t)为优势函数,表明了在s_t下,采取某个a_t能比该策略下的平均期望收益优劣多少,这就是A2C 和A3C的灵魂公式了。

如果用采样代替期望,那么Q,A都可以被近似为和V相关的函数:
\begin{aligned} Q_\pi(s_t,a_t) &= r(s_t,a_t) + E_{s_{t+1}\sim p(s_{t+1}|s_t,a_t)}\left[V_\pi(S_{t+1})\right] \\ &\approx r(s_t,a_t) + V_\pi(S_{t+1}) \end{aligned}

A_\pi(s_t,a_t) \approx r(s_t,a_t) + \gamma V_\pi(s_{t+1}) - V_\pi(S_t)

我们可以使用蒙特卡洛、TD等方法通过神经网络拟合V。这种方法被称为表演家-评论家算法,很直白的解释就是,表演家(\pi_\theta)做出动作,而评论家(V_w)对动作进行打分,表演家根据分数进行提升。

下面给出一种在线AC算法过程:
 1.随机化策略函数和价值函数的参数\theta,w
 2.循环:
  a.使用当前策略\pi_\theta产生一条完整的迹:\tau=(s_0,a_0,s_1,a_1,s_2,a_2,s_3......s_T)
  b.对于每个时间步骤t=T,......2,1: # 从后往前计算G_t的效率更高
   i.评论家网络根据根据s_t和输出V(s_t),V(s_{t+1})
   ii.计算TD误差:\delta=G_t-V(s_t)
   iii.使用mse作为损失函数更新批评家网络参数:w←w+α_wδt∇_wV_w(s)
   iv.评估优势函数:A_w(s_t,a_t)=r_{t+1} + \gamma V_w(s_{t+1}) - V_w(s_t)
   v.更新表演家网络参数:\theta \leftarrow \theta + \alpha_\theta ∇_\theta \log \pi(s_t,a_t)A_w(s_t,a_t)

值得一提的是,AC算法中的critic并非只有上文优势函数一种,还可以是:

基于状态函数V_w(a,s)更新参数的:
\theta \leftarrow \theta + \alpha_\theta ∇_\theta \log \pi(s_t,a_t)V_w(s_t)
基于状态-动作函数Q_w(a,s)更新参数的:
\theta \leftarrow \theta + \alpha_\theta ∇_\theta \log \pi(s_t,a_t)Q_w(s_t,a_t)
基于TD error\delta更新参数的:
\delta(t) = r_{t+1} + \gamma V_w(s_{t+1}) - V_w(s_t) \\ or \\ \delta(t) = r_{t+1} + \gamma Q_w(s_{t+1},a_{t+1}) - Q_w(s_t,a_t)

\theta \leftarrow \theta + \alpha_\theta ∇_\theta \log \pi(s_t,a_t)\delta(t)

表演家和评论家的两个网络可以共享参数也可以不共享,不共享的好处是相对简单稳定,缺点是表演家和评论家没有建立起共享的特征,参数量和计算量也巨大,但如果使用同一个网络,两个输出,因为V,\pi会往不同方向推动共享参数,所以会带来网络不稳定的问题。

A3C 和 A2C

如上文单纯的只用一个样本去估计梯度更新值函数,存在方差大的问题,也导致了训练难以收敛。想要扩大batch size,除了多采样几次,降低更新策略频率,一个更有效的方法就是并行——开多个线程一起去和环境交互获取样本。

A3C算法就是异步优势演员-评论家方法的缩写,它的三个关键思想是:(1)交互得到固定长度的一段经验,并用它去估计累计回报和优势函数(2)策略函数和价值函数共享网络结构(3)异步更新。

而A2C去掉了异步(更新)。两个算法都使用多个agent同时与多个环境交互产生批量样本用来更新参数。不同的地方在于A2C有一个同步点(如下图左),多个agent与环境交互得到的样本,并用样本数据计算梯度,等到同步的时间点,多个智能体的梯度累加起来一起更新参数,因此,不同的agent上的参数始终是一致的,且batch size = agent数量 * 每个agent采的batch size;而A3C去掉了同步的点,每个agnet独立的与环境交互一定的时间步骤,并得到累计梯度,异步的push和pull master(保存了全局参数)的参数,因此同一时刻,不同的agent可能使用不同版本的参数。它的batch size就是每个agent的batch size。

openai提到(OpenAI Baselines: ACKTR & A2C),一方面尚未看到任何证据证明异步更新引入的噪声能够提供任何性能收益,另一方面,A2C 相对于A3C的优势在于它能够更有效的利用GPU,能够适应更大的批量大小,且在效果上,A2C也比A3C更好。

A2C 和A3C对比
下面给出A3C的算法过程
A3C.png

相关文章

网友评论

      本文标题:系列论文阅读——Policy Gradient Algorith

      本文链接:https://www.haomeiwen.com/subject/jyyyahtx.html