基于策略的强化学习


一、策略函数

策略函数 $\pi(a|s)$ 的本质是一个概率密度函数(Probability Density Function, PDF)。它将从环境观察到的状态 $s$ 作为输入,输出所有动作中每个动作的概率。在需要执行动作时,就从这些动作概率中随机抽取一个动作来执行。

二、策略网络

因为从环境观察到的状态 $s$ 常常有无数多种,所以可以使用神经网络 $\pi(a|s; \theta)$ 来近似策略函数 $\pi({a|s})$,其中 $\theta$ 是神经网络的参数。神经网络 $\pi(a|s; \theta)$ 就是策略网络。

因为策略网络输出的是各个动作的概率,而各个动作概率的总和应该是1,所以策略网络最后的激活函数通常是 softmax 以保证策略网络输出值的总和为1。

三、如何训练策略网络

根据状态价值函数的定义有(为便于推导,假定动作是离散的):

使用神经网络 $\pi(a|s; \theta)$ 来近似策略函数 $\pi({a|s})$ 得到:

我们知道,当找到最优价值函数时,就解决了马尔科夫决策问题。即当我们找到一个策略网络的参数值 $\hat{\theta}$ 使得 $V(s; \hat{\theta})$ 的值最大,我们就找到了一个最优的策略网络。

所以,令:

可以使用 梯度上升 方法来更新策略网络的参数值 $\theta$ :

  1. 从环境观察到的状态 $s$ 。
  2. 更新策略网络( $\beta$ 是学习率)

四、策略梯度

策略梯度就是使用神经网络 $\pi(a|s; \theta)$ 来近似策略函数 $\pi({a|s})$ 后得到的状态价值函数对神经网络参数 $\theta$ 的导数,即 $\frac{\partial V(s; \theta)}{\partial \theta}$ 。

  1. 上面的计算过程中,假设了 $Q_{\pi}(s, a)$ 不依赖于 $\theta$ ,这是为了简化推导,便于理解。实际上即使将 $Q_{\pi}(s, a)$ 对于 $\theta$ 的导数也考虑进去,得到的结果也是一样的。
  2. 链式求导法则

即:

五、计算策略梯度

5.1 离散动作

如果动作是离散的,比如动作空间是 $\mathcal{A} \in \{ \text{“left”}, \text{“right”}, \text{“fire”} \}$。可以使用 公式4.1

  1. 对每个动作 $a \in \mathcal{A}$ ,计算

  2. 计算策略梯度

5.2 连续动作

如果动作是连续的,比如动作空间是 $\mathcal{A} = [0,1]$。可以使用 公式4.2

因为直接求期望很难,所以可以对期望做蒙特卡洛(Monte Carlo)近似,步骤如下:

  1. 从概率密度函数 $\pi(\cdot | s; \theta)$ 中随机抽样得到一个动作 $\hat{a}$ 。
  2. 计算

    1. 显然有 $\mathbb{E}_A \left[ \mathbf{g}(A, \theta) \right]= \frac{\partial V(s; \theta)}{\partial \theta}$ 。
    2. 因为 $\hat{a}$ 是从 $\pi(\cdot | s; \theta)$ 中随机抽样得到的,所以 $\mathbf{g}(\hat{a}, \theta)$ 是 $\frac{\partial V(s; \theta)}{\partial \theta}$ 的一个无偏估计。
  3. 使用 $\mathbf{g}(\hat{a}, \theta)$ 来近似 $\frac{\partial V(s; \theta)}{\partial \theta}$ (蒙特卡洛近似)。

上面的这种方法对离散的动作也是有效的。

六、使用策略梯度来更新策略网络

完整的步骤如下:

  1. 从环境观察到的状态 $s_t$ 。
  2. 从概率密度函数 $\pi(\cdot | s_t; \theta_t)$ 中随机抽样得到一个动作 $a_t$ 。
  3. 计算动作价值 $q_t \approx Q_{\pi}(s_t, a_t)$ 。
  4. 计算策略梯度 $\mathbf{d}_{\theta, t} = \frac{\partial \log \pi(a_t | s_t; \theta)}{\partial \theta} \mid_{\theta = {\theta}_t}$ 。
  5. 计算策略梯度的近似值 $\mathbf{g}(a_t, {\theta}_t) = q_t \cdot \mathbf{d}_{\theta, t}$ 。
  6. 更新策略网络 $\theta_{t+1} = \theta_t + \beta \cdot \mathbf{g}(a_t, \theta_t)$ 。

在上面的步骤3中,计算 $q_t$ 的方式有两种。

6.1 REINFORCE

使用观测到的 $g_t$ 来代替 $Q_{\pi}(s_t, a_t)$ 。

  • 用策略网络 $\pi(\cdot | s_t; \theta_t)$ 控制 agent 从游戏开始到游戏结束玩一局完整的游戏,得到游戏轨迹 $s_1, a_1, r_1, s_2, a_2, r_2, \cdots , s_T, a_T, r_T$ 。
  • 计算所有时刻的折扣回报 $g_t = \sum_{k=t}^T \gamma^{k-t} r_k$ 。
  • 因为 $Q_\pi (s_t, a_t) = \mathbb{E}[G_t]$ ,所以可以使用折扣回报 $g_t$ 来近似 $Q_\pi (s_t, a_t)$ ,即 $q_t = g_t$ 。

6.2 Actor-Critic Method

使用神经网络来近似 $Q_{\pi}(s_t, a_t)$。

我们已经使用神经网络 $\pi(a|s; \theta)$ 来近似策略函数 $\pi({a|s})$,其中 $\theta$ 是神经网络的参数。同时,我们再使用神经网络 $q(s,a;\mathbf{w})$ 来近似价值函数 $Q_{\pi}(s, a)$,其中 $\mathbf{w}$ 是神经网络的参数。

训练时,策略网络 $\pi(a|s; \theta)$ 相当于运动员(Actor),而价值网络 $q(s,a;\mathbf{w})$ 相当于裁判(Critic):

  • 训练 Actor 的目的是让 Critic 的打分尽可能的高,即更新策略网络 $\pi(a|s; \theta)$ 使状态价值 $V(s; \theta, \mathbf{w})$ 的值增加。 Actor 依靠 Critic 的打分来改进自己。
  • 而训练 Critic 的目的则是让它对 Actor 的打分更准确,即更新价值网络 $q_{\pi}(s, a; \mathbf{w})$ 以能够更好的估计未来奖励的总和。 Critic 依靠环境给与的奖励来改进自己。
  • 当 Critic 的打分比较准确且 Actor 的得分都比较高时,就能得到一个比较好的策略网络了。

在推理时,只需要使用 Actor 来控制 agent 动作就可以了,推理时的不需要 Critic 。

算法完整的训练流程如下:

  1. 从环境获得状态 $s_t$ 输入策略网络 $\pi(a|s; \theta)$ ,并从得到的动作概率 $\pi(a|s_t; \theta)$ 中抽样得到动作 $a_t$ 。

  2. 在环境中执行动作 $a_t$ 并获取到新的环境状态 $s_{t+1}$ 和奖励 $r_t$ 。

  3. 将新的环境状态 $s_{t+1}$ 输入策略网络中 $\pi(a|s; \theta)$ 并随机抽样得到一个临时的动作 $\hat{a}_{t+1}$ (这个动作不会在环境中执行,仅用于更新价值网络)。

    随机抽样保证样本的无偏性,这样才能用来做蒙特卡洛近似,详见5.2 连续动作

  4. 计算动作 $a_t$ 和 $\hat{a}_{t+1}$ 的动作价值

  5. 计算 TD error

  6. 对价值网络 $q(s,a;\mathbf{w})$ 求导

  7. 使用时序差分学习来更新价值网络( $\alpha$ 是学习率)

    其中 ${\delta}_t \cdot \mathbf{d}_{\mathbf{w}, t}$ 是 TD error $\delta_t$ 的均方差关于参数 $\mathbf{w}$ 的导数

  8. 对策略网络 $\pi(a|s; \theta)$ 求导

  9. 使用梯度上升方法来更新策略网络( $\beta$ 是学习率)

    注意:实现中大多都使用第 5 步计算出来的 ${\delta}_t$ 来替代上面公式中的 $q_t$ 得到

    这两种方式都是对的,使用 $q_t$ 是标准算法,而使用 ${\delta}_t$ 则是 Policy Gradient with Baseline 。 使用了 Baseline 的方法不影响期望,但是降低了方差,能让算法收敛更快,所以效果更好。


参考:策略学习 Policy-Based Reinforcement Learning
Policy Gradient 论文:Policy Gradient Methods for Reinforcement Learning with Function Approximation


文章作者: Kiba Amor
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 Kiba Amor !
  目录