Policy-gradient Algorithem

Intro

Policy-gradient 算法是无模型强化学习算法中的一种,也是Actor-Critic 算法中的Actor。 REINFORCE算法是一个比较基础的

算法

学习目标

Policy-gradient 的目标函数定义如下:

$$ \begin{equation} J(\theta)=\mathbb{E}[\sum_{t=0}^{T-1}r_{t+1}] \end{equation} $$

它表示希望学习一个policy能够最大化累计未来回报(cumulative future reward)。 $r_{t+1}$表示在状态 $s_t$时采取动作 $a_t$从环境中获得的回报。 $r_{t+1} = R(s_t,a_t)$, $R(\cdot)$表示回报函数(reward function) 因为这是个最大化问题,所以可以使用梯度上升来优化policy。 $$ \begin{equation} \theta = \theta + \frac{\delta}{\delta \theta}J(\theta) \end{equation} $$ Policy 一般会使用神经网络进行参数化。

期望(Expection)

在文献中经常出现的是期望符号——之所以使用它,是因为我们想要优化长期未来(预测的)奖励,而这有一定的不确定性。 期望值,也称为期望值或平均值,是通过每个x值及其概率的乘积之和来计算的。 $$ \begin{equation} \mathbb{E}[f(x)] = \sum_{x}P(x)f(x) \end{equation} $$ $P(x)$代表随机变量 $x$出现的概率, $f(x)$代表 $x$的值。

推导策略梯度

我们根据先前定义的目标函数,我们可以将期望项进行展开: $$ \begin{equation} \begin{split} J(\theta) &= \mathbb{E}[\sum_{t=0}^{T-1}r_{t+1}|\pi_{\theta}] \\ &= \sum_{t=i}^{T-1} P(s_t,a_t|\tau)r_{t+1} \end{split} \end{equation} $$

其中 $i$是轨迹 $\tau$中的任意一个起始点, $P(s_t,a_t|\tau)$是在给定轨迹 $\tau$时,出现 $s_t,a_t$的概率。 对两边同时对policy的参数 $\theta$求导: $$ \begin{equation} \begin{split} \nabla_{\theta}J(\theta) &= \sum_{t=i}^{T-1}\nabla_{\theta}P(s_t,a_t|\tau)r_{t+1} \\ &=\sum_{t=i}^{T-1}P(s_t,a_t|\tau)\frac{\nabla_{\theta}P(s_t,a_t|\tau)}{P(s_t,a_t|\tau)} r_{t+1} \\ &=\sum_{t=i}^{T-1}P(s_t,a_t|\tau)\nabla_{\theta}\log{P(s_t,a_t|\tau)}r_{t+1} \\ & = \mathbb{E}[\sum_{t=i}^{T-1}\nabla_{\theta}\log{P(s_t,a_t|\tau)r_{t+1}}] \end{split} \end{equation} $$

但是,由于我们在学习过程中并不能获取所有的轨迹,而是使用一些随机抽取的轨迹,因此我们可以将期望替换为: $$ \begin{equation} \nabla_{\theta}J(\theta) \sim \sum_{t=i}^{T-1}\nabla_{\theta}\log{P(s_t,a_t|\tau)}r_{t+1} \end{equation} $$ 接下来,我们深入探讨一下 $\nabla_{\theta}\log{P(s_t,a_t|\tau)}$。 首先,我们想将 $P(s_t,a_t|\tau)$进行展开: $$ \begin{equation} \begin{split} P(s_t,a_t|\tau) = & P(s_0,a_0,s_1,a_1,…,s_t,a_t|\pi_{\theta}) \\ = & P(s_0)\pi_{\theta}(a_1|s_0)P(s_1|s_0,a_0)\pi_{\theta}(a_1|s_1)P(s_2|s_1,a_1)\pi_{\theta}(a_3|s_2)\\ &…P(s_{t-1}|s_{t-2},a_{t-2})\pi_{\theta}(a_{t-1}|s_{t-2})P(s_t|s_{t-1},a_{t-1})\pi_{\theta}(a_t|s_{t-1}) \end{split} \end{equation} $$ 当我们对公式两边同时取log: $$ \begin{equation} \begin{split} \log P(s_t,a_t|\tau) &= \log{P(s_0)} + \log{\pi_{\theta}(a_0|s_0)} + \log{P(s_1|a_0,s_0)} + \log{\pi_{\theta}(a_1|s_1)} + \\ &… + \log{P(s_{t-1}|s_{t-2},a_{t-2})} + \log{\pi_{\theta}(a_{t-1}|s_{t-2}} + \log{P(s_t|s_{t-1},a_{t-1}) + \log{\pi_{\theta}(a_t|s_{t-1}})} \end{split} \end{equation} $$

接着,对 $\log{P(s_t,a_t|\tau)}$积分: $$ \begin{equation} \begin{split} \nabla_{\theta}\log{P(s_t,a_t|\tau)} & = \nabla_{\theta}\log{P(s_0)} + \nabla_{\theta}\log{\pi_{\theta}(a_1|s_0)} + \nabla_{\theta}\log{P(s_1|s_0,a_0)} \end{split} \end{equation} $$

相关文章