强化学习—— 9 Actor-Critic算法

9 Actor-Critic算法

Actor-Critic 算法是基于值函数的方法和基于策略的方法的叠加。价值模块 Critic 在策略模块 Actor 采样的数据中学习分辨什么是好的动作,什么不是好的动作,进而指导 Actor 进行策略更新。随着 Actor 的训练的进行,其与环境交互所产生的数据分布也发生改变,这需要 Critic 尽快适应新的数据分布并给出好的判别。

9.1 Actor-Critic算法

Actor-Critic 算法既学习价值函数,又学习策略函数。不过本质上是基于策略的算法,因为这一系列算法的目标都是优化一个带参数的策略,只是会额外学习价值函数,从而帮助策略函数更好地学习。

在 REINFORCE 算法中,目标函数的梯度中有一项轨迹回报,用于指导策略的更新。REINFOCE 算法用蒙特卡洛方法来估计\(Q^{\pi_\theta}(s,a)\),能不能考虑拟合一个值函数来指导策略进行学习呢?这正是 Actor-Critic 算法所做的。

Actor-Critic 算法估计一个动作价值函数\(Q\),代替蒙特卡洛采样得到的回报

REINFORCE 算法基于蒙特卡洛采样,只能在序列结束后进行更新,这同时也要求任务具有有限的步数;而 Actor-Critic 算法则可以在每一步之后都进行更新,并且不对任务的步数做限制。

9.2 Actor-Critic算法描述

Actor-Critic 算法分为两个部分:

  • 策略网络(Actor):要做的是与环境交互,并在 Critic 价值函数的指导下用策略梯度学习一个更好的策略。
  • 价值网络(Critic):要做的是通过 Actor 与环境交互收集的数据学习一个价值函数,这个价值函数会用于判断在当前状态什么动作是好的,什么动作不是好的,进而帮助 Actor 进行策略更新。

更新方式:

  • Actor采用策略梯度更新
  • Critic采用梯度下降法更新

9.3 Actor-Critic算法流程

  1. 初始化策略网络参数\(\theta\)和价值网络参数\(\omega\)
  2. for 轮次\(episode=1,2,...,E\) do
    • 用当前策略\(\pi_\theta\)与环境交互,得到轨迹\({s_1,a_1,r_1,s_2,a_2,r_2,...,s_T,a_T,r_T}\)
    • 为每一步数据计算时序差分残差:\(\delta_t = r_t + \gamma V_w(s_{t+1}) - V_w(s_t)\)
    • 更新价值网络参数\(\omega\)\(\omega \leftarrow \omega + \alpha_\omega \delta_t \nabla_w V_w(s_t)\)
    • 更新策略网络参数\(\theta\)\(\theta \leftarrow \theta + \alpha_\theta \delta_t \nabla_\theta \log \pi_\theta(s_t,a_t)\)
  3. end for