Policy Gradient

Tuesday, March 2, 2021

DQN类算法的不足

  1. 无法表示随机策略。
  2. 输出值(Q值)的微小改变可能会导致某一个动作被选中或者不选中,这种不连续的变化会影响算法的收敛。
  3. 无法表示连续动作。

策略梯度算法

相比于DQN类算法使用参数化函数表示价值函数,策略梯度算法则使用参数化函数表示策略。令\(\theta \in \mathbb{R}^{d}\)表示参数向量,则策略函数可表示为:

\[ \pi(a \mid s, {\theta})=\mathrm{P}_{\mathrm{r}}\left\{A_{t}=a \mid S_{t}=s, {\theta}_{t}={\theta}\right\} \]

使用上述策略生成马尔可夫过程的一个轨迹\(\tau=\left({s}_{1}, {a}_{1}, \ldots, {s}_{T}, {a}_{T}\right)\)的概率为:

\[ \underbrace{p_{\theta}\left(\mathbf{s}_{1}, \mathbf{a}_{1}, \ldots, \mathbf{s}_{T}, \mathbf{a}_{T}\right)}_{\pi_{\theta}(\tau)}=p\left(\mathbf{s}_{1}\right) \prod_{t=1}^{T} \pi_{\theta}\left(\mathbf{a}_{t} \mid \mathbf{s}_{t}\right) p\left(\mathbf{s}_{t+1} \mid \mathbf{s}_{t}, \mathbf{a}_{t}\right) \]

在策略梯度算法中,目标是找到一组最佳的参数\(\theta^*\)来表示策略函数使得累计奖励的期望最大,即:

\[ \theta^{\star}=\arg \max _{\theta} E_{\tau \sim p_{\theta}(\tau)}\left[\sum_{t} r\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)\right] \]

当然,相对于平均奖励的目标函数,也存在有起始状态的目标函数。这种情况相当于对各个时间步的奖励进行加权。在这里我们仅仅考虑平均奖励目标函数。

令累积奖励为\(R(\tau)=\sum_{t=1}^{T} r\left(s_{t}, a_{t}\right)\),则目标函数为:

\[ J\left(\pi_{\theta}\right)=\underset{\tau \sim \pi_{\theta}}{\mathrm{E}}[R(\tau)] \]

\(J\left(\pi_{\theta}\right)\)求梯度可以得到:

\[ \begin{aligned} \nabla_{\theta} J(\theta) &=\int \nabla_{\theta} \pi_{\theta}(\tau) r(\tau) d \tau \\ &=\int \pi_{\theta}(\tau) \nabla_{\theta} \log \pi_{\theta}(\tau) r(\tau) d \tau \\ &=E_{\tau \sim \pi_{\theta}(\tau)}\left[\nabla_{\theta} \log \pi_{\theta}(\tau) r(\tau)\right] \end{aligned} \]

由于有\(\pi_{\theta}(\tau) = p_{\theta}\left(\mathbf{s}_{1}, \mathbf{a}_{1}, \ldots, \mathbf{s}_{T}, \mathbf{a}_{T}\right)\),因此将\(p_{\theta}\left(\mathbf{s}_{1}, \mathbf{a}_{1}, \ldots, \mathbf{s}_{T}, \mathbf{a}_{T}\right)\)对数化后可代入上式。对数化后有:

\[ \log \pi_{\theta}(\tau)=\log p\left(\mathbf{s}_{1}\right)+\sum_{t=1}^{T} \log \pi_{\theta}\left(\mathbf{a}_{t} \mid \mathbf{s}_{t}\right)+\log p\left(\mathbf{s}_{t+1} \mid \mathbf{s}_{t}, \mathbf{a}_{t}\right) \]

将上述对数化后的式子代入求导,因为\(\log p\left(\mathbf{s}_{1}\right)\)以及\(\log p\left(\mathbf{s}_{t+1} \mid \mathbf{s}_{t}, \mathbf{a}_{t}\right)\)都与\(\theta\)无关,因此求导后可以消去。最终得到:

\[ \nabla_{\theta} J(\theta)=E_{\tau \sim \pi_{\theta}(\tau)}\left[\left(\sum_{t=1}^{T} \nabla_{\theta} \log \pi_{\theta}\left(\mathbf{a}_{t} \mid \mathbf{s}_{t}\right)\right)\left(\sum_{t=1}^{T} r\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)\right)\right] \]

使用蒙特卡洛采样可以近似求解。根据策略\(\pi_{\theta}\)生成\(N\)条轨迹后,由蒙特卡洛采样有:

\[ \nabla_{\theta} J(\theta) \approx \frac{1}{N} \sum_{i=1}^{N}\left(\sum_{t=1}^{T} \nabla_{\theta} \log \pi_{\theta}\left(\mathbf{a}_{i, t} \mid \mathbf{s}_{i, t}\right)\right)\left(\sum_{t=1}^{T} r\left(\mathbf{s}_{i, t}, \mathbf{a}_{i, t}\right)\right) \]

求得梯度后可以使用梯度上升法更新策略参数值。

REINFORCE算法

根据上述式子可以使用蒙特卡洛法更新策略参数。

输入:\(N\)个蒙特卡罗完整序列,训练步长\(\alpha\)

输出:策略函数的参数\(\theta\)

  1. 初始化\(\theta\)

  2. 开始循环

    1. 采样一条完整的序列,并计算每个时间位置\(t\)的状态价值\(v_{t}\)

    2. 对于每个时间位置\(t\),使用梯度上升法更新策略函数的参数\(\theta\)

    \[ \theta=\theta+\alpha \nabla_{\theta} \log \pi_{\theta}\left(s_{t}, a_{t}\right) v_{t} \]

  3. 返回策略函数的参数\(\theta\)

对于离散空间,最常用的策略函数为softmax函数。即:

\[ \pi_{\theta}(s, a)=\frac{e^{\phi(s, a)^{T_{\theta}}}}{\sum_{b} e^{\phi(s, b)^{T} \theta}} \]

这种情况下,其梯度为:

\[ \nabla_{\theta} \log \pi_{\theta}(s, a)=\phi(s, a)-\mathbb{E}_{\pi \theta}[\phi(s, .)] \]

对于连续空间,可以使用高斯分布函数作为策略函数。这种情况下通常使用神经网络预测分布的均值\(\mu(s)\),然后结合给定的方差\(\sigma^{2}\)构造分布\(a \sim \mathcal{N}\left(\mu(s), \sigma^{2}\right)\)

更新式的几何意义

显而易见,\(\log \pi_{\theta}\left(s_{t}, a_{t}\right)\)是策略\(\pi\)的对数似然表示。因此,\( \nabla_{\theta} \log \pi_{\theta}\left(s_{t}, a_{t}\right)\)表示了状态\(S_{t}\)下执行动作\(A_{t}\)的对数似然的梯度方向。而\(v_t\)控制了更新的幅度。相比之下,价值越大的动作更新的幅度越大,即下次遇到同样情况时执行此动作的概率会变高。

强化学习

Noisy Network

Deep Recurrent Q Network