演员-评论员算法( Actor-Critic Algorithm)是一种结合
策略梯度
和时序差分学习
的强化学习方法。其中演员(Actor)是指策略函数 (pi _ hetaleft( {a|s} ight)),即学习一个策略来得到尽量高的回报。评论员(Critic)是指值函数 ({V_phi }left( {{s_t}} ight)),对当前策略的值函数进行估计,即评估演员的好坏。
1 REINFORCE 改进
在 REINFORCE 算法中每次需要用一个策略采集完一条完整的轨迹,并计算这条轨迹上的回报。这个方法有两个缺点:
- 方差比较大
- 学习效率低
学习效率低很好理解,为什么说方差大呢?下面是李宏毅的课件中的图,因为我们在去评估在状态 (s_t) 时采取动作 (a_t) 的好坏时,需要用到这个总回报 (G),最准确的做法当时是对这个 (G) 求期望了,然后在实际操作的时候其实是只用了一次采样来代替这个期望了。从下图中也可以看出来,这个回报 (G) 的随机性还是挺大的。
解决这个问题的做法是可以借助时序差分学习的思想,即从状态 (s) 开始的总回报可以通过当前动作的即时奖励 (r(s,a,s^{prime})) 和下一个状态 (s^{prime}) 的值函数近似估计:
来看一下李宏毅课程的解释,在上一节策略梯度中得到 $mathbb{E}left[Gleft( au_{t : T} ight) ight]={Q^{{pi _ heta }}}left( {{s_t},{a_t}} ight) $,所以说我们需要的 (G) 的期望其实就是状态-动作值函数,而状态-动作值函数和状态值函数的关系为:
现在我们把 (2) 中的期望拿掉了,就得到了 (1) 式.
为什么拿掉呢?李宏毅课上说原作者实验了很多次,发现拿掉后结果比较好,很玄学。
2 算法流程
在演员-评论员算法中的策略函数(演员) (pi _ hetaleft( {a|s} ight)) 和值函数(评论员) ({V_phi }left( {{s_t}} ight)) 都是待学习的函数。
在每步更新中,一方面需要更新参数 (phi) 使得值函数 ({V_phi }left( {{s_t}} ight)) 接近于估计的真实回报 (hat Gleft( {{ au _{t:T}}} ight)). 这个真实回报是演员在当前环境 $s_t $ 下执行动作 $a_t $ 后得到的即时奖励,再加上评论员使用之前标准对新状态 (s_{t+1})的打分来近似的:({r_{t + 1}} + gamma {V_phi }left( {{s_{t + 1}}} ight)).
评论员来根据这个误差来调整自己的打分标准,使得自己的评分更接近于环境的真实回报。
另一方面,演员需要根据评论员的打分调整自己的策略 (pi_ heta). 即将值函数 ({V_phi }left( {{s_t}} ight)) 带入策略函数的梯度公式:
所以每步参数 ( heta) 的更新公式为(计算每个时刻的梯度就开始更新参数了):
具体的算法流程如下: