基于Pytorch的强化学习(DQN)之REINFORCE VS A2C

目录

1. 引言

2. 比较

3. 本质联系


1. 引言

我们前面两次学习了与baseline有关的两种算法:REINFORCE 和 A2C,仔细阅读的同学会发现两者的神经网络的结构是一致的,那么这两者究竟有什么关系呢?

2. 比较

我们先来看看两者的算法

REINFORCE:

  1. 观测到从 t 时刻到游戏结束的一个trajectory (s_t,a_t,r_t,...,s_n,a_n,r_n)
  2. 计算观测到的return u_t=\sum_{i=t}^{n}\gamma^{i-t}r_i
  3. 计算误差
  4. 更新策略网络 \theta\leftarrow \theta-\beta\,\delta_t\frac{\partial \,\ln{\pi}(a_t|s_t;\theta)}{\partial \,\theta}
  5. 更新价值网络 w\leftarrow w-\alpha\delta_t\,\frac{\partial \,v(s_t;w)}{\partial \,w}

A2C:

  1. 观测到一个 transition (s_t,a_t,r_t,s_{t+1})
  2. 计算TD target y_t=r_t+\gamma v(s_{t+1};w)
  3. 计算TD error \delta_t=v(s_t;w)-y_t
  4. 更新策略网络 \theta\leftarrow \theta-\beta\,\delta_t\frac{\partial \,\ln{\pi}(a_t|s_t;\theta)}{\partial \,\theta}
  5. 更新价值网络 w\leftarrow w-\alpha\delta_t\,\frac{\partial \,v(s_t;w)}{\partial \,w}

我们可以看到两者不同的地方有三处:1,2,3。先看 REINFORCE 算法,REINFORCE 算法是以 t 时刻的 return 为目标,所以我们要先观测到是一个trajectory,使用baseline单纯只是为了减小随机过程的方差,使其收敛更快。再来看A2C算法,A2C本质上是一个Actor-Critic方法,是基于TD算法的,所以使用的是部分真实的信息而不是完全真实的信息,所以只需要观测到一个transition就行了而不需要等到游戏结束,这两者参数更新的方式都是一样的。

3. 本质联系

两种算法在本质上是有联系的,由于A2C是基于TD算法的,于是在A2C的第2步中,我们可以使用Multi-step方法 来提升收敛速度,也就是说我们修改TD target为 y_t=\sum_{i=0}^{m}\gamma^{i}r_{t+i}+\gamma^{m+1}v(s_{t+m+1};w),当 m=n-t 时TD target便变成了 t 时刻的return,A2C便变成了REINFORCE,所以我们可以将REINFORCE看成时A2C的一个特例,这便是两者的本质联系。

你可能感兴趣的:(深度学习,深度学习)