强化学习笔记(八)- 连续空间的确定性策略

  |     |   本文总阅读量:

版权声明:本文原创,转载请留意文尾,如有侵权请留言,谢谢

引言

  之前我们说的基本都是离散空间内的算法,本文记录连续空间内的算法。在连续空间内,动作的个数往往是无穷的,很难计算出 \(\max_a q(s,a;\boldsymbol{\theta})\)。面对这个问题,我们可以在策略梯度中引入确定性策略。

同策确定性算法

    我们先回顾下 DQN 中的更新式:

\[ Q(s, a)=Q(s, a)+\alpha\left(r+\gamma \max _{a} Q\left(s_{t+1}, a_{t+1}\right)-Q(s, a)\right) \]

  在更新的过程中,先完成策略评估的工作,再进行策略改进,即需要先计算出下一时刻状态下所以动作的价值,并从中选出最优的行动价值,如果动作数量是有限的,这是可行的,而如果动作空间连续,无法进行这种计算和选择。所以我们可以采取策略梯度的更新方式:

\[ \theta^{\prime}=\theta+\alpha \nabla_{\theta} J(\theta) \]

  策略梯度法直接对轨迹的价值期望求导,不需要进行最优行动的选择,因此连续型动作空间的问题可以使用策略梯度算法求解。
  对于没有回合区分的连续性空间问题,我们需要定义一个平均回报率,它实际上是轨迹的价值期望,不需要进行最优行动的选择:

\[ \begin{aligned} J(\boldsymbol{\theta}) \doteq r(\pi) & \doteq \lim _{h \rightarrow \infty} \frac{1}{h} \sum_{t=1}^{h} \mathbb{E}\left[R_{t} | S_{0}, A_{0: t-1} \sim \pi\right] \\ &=\lim _{t \rightarrow \infty} \mathbb{E}\left[R_{t} | S_{0}, A_{0: t-1} \sim \pi\right] \\ &=\sum_{s} \mu(s) \sum_{a} \pi(a | s) \sum_{s^{\prime}, r} p\left(s^{\prime}, r | s, a\right) r \end{aligned} \\ \mu(s) \doteq \lim _{t \rightarrow \infty} \operatorname{Pr}\left\{S_{t}=s | A_{0: t} \sim \pi\right\} \]

  下图是基于后向视角的连续空间下的 Actor–Critic 算法,它当中也用到了资格迹:

  在连续性空间下,我们有: \[ v_{\pi}(s) \doteq \mathbb{E}_{\pi}\left[G_{t} | S_{t}=s\right] \\ q_{\pi}(s,a,a) \doteq \mathbb{E}_{\pi}\left[G_{t} | S_{t}=s, A_{t}=a\right] \]

  因此便可得到连续性空间下的 return:

\[ G_{t} \doteq R_{t+1}-r(\pi)+R_{t+2}-r(\pi)+R_{t+3}-r(\pi)+\cdots \]

  原先回合任务下的策略梯度定理便可以拓展到连续性空间下了,证明过程如下:

  对比随机策略梯度公式,确定性策略梯度公式少了对动作求期望,多了 Q 值函数对动作的导数。随机策略梯度里,需要对动作和状态求积分,而在确定性策略梯度里只需要对状态求积分,这就决定了求确定性策略梯度只需要更小的样本,特别是动作空间很大的时候。
  在强化学习算法中,很多时候做策略更新的时候是贪心的,即对 Q 值取最大值。但如果是在连续动作的强化学习问题里,对 Q 求最优值往往不是很容易,或者计算量很大。这也是 Q-learning 和 DQN 不好解决高维连续动作问题的原因。而在确定性策略梯度里,其梯度的更新可以视为策略往 Q 值梯度的方向走,这样就一步步往 Q 值增大的方向走。

策略参数化

  基于策略的方法为较大 action 空间的问题提供了实用的处理方法,甚至对于连续型问题,通常有着无穷动作空间的情况也没问题,它并不去计算某个具体动作的概率值,而是直接去学习概率分布。
  举个例子,假设动作集合是一些实数,并且来自一个高斯分布,其概率分布便可写作:

\[ \pi(a | s, \boldsymbol{\theta}) \doteq \frac{1}{\sigma(s, \boldsymbol{\theta}) \sqrt{2 \pi}} \exp \left(-\frac{(a-\mu(s, \boldsymbol{\theta}))^{2}}{2 \sigma(s, \boldsymbol{\theta})^{2}}\right) \]   其中 \(\mu: \mathcal{S} \times \mathbb{R}^{d^{\prime}} \rightarrow \mathbb{R}, \sigma: \mathcal{S} \times \mathbb{R}^{d^{\prime}} \rightarrow \mathbb{R}^{+}\) 是参数化的近似函数。策略参数 \(\boldsymbol{\theta}\)\(\boldsymbol{\theta}=\left[\boldsymbol{\theta}_{\mu}, \boldsymbol{\theta}_{\sigma}\right]^{\top}\)两部分组成,第一部分用于均值的近似,第二部分用于标准差的近似:

\[ \mu(s, \boldsymbol{\theta}) \doteq \boldsymbol{\theta}_{\mu}^{\top} \mathbf{x}_{\mu}(s) \quad \\ \quad \sigma(s, \boldsymbol{\theta}) \doteq \exp \left(\boldsymbol{\theta}_{\sigma}^{\top} \mathbf{x}_{\sigma}(s)\right) \]

  \(\mathbf{x}_{\mu}(s)\)\(\mathbf{x}_{\sigma}(s)\) 是状态特征向量,可以通过一些方法构造,Sutton 的书里 9.5节有介绍。

异策确定性算法

  一般而言在一个学习过程中,智能体需要探索不同的路径。在相同的状态下需要采取不同的行为,去探索一些更优策略的可能性。随机策略没有这个问题,因为策略本身就带有随机性和探索性,但确定性策略不行,它在某个特定的状态下采取的行为是一定的,所以策略没有探索性。于是在确定性策略算法里,一般采用异策方法。策略梯度法是一个同策的方法, 它非常依赖与环境交互的过程,而 DQN 方法直接对值函数进行优化,可以使用异策的方法进行训练。所以,如果想在连续行动空间使用异策算法进行优化,可以考虑结合两种算法的特点。

DPG(Deterministic Policy Gradient)

  在与环境交互时,DQN 算法一般使用 \(\epsilon-greedy\) 策略, 策略梯度则是从一个概率分布中采样得到的, 而 DPG 的交互方式结合了前面两种算法。从形式上看, DPG 使用了 \(\epsilon-greedy\) 策略,以一定的概率使用随机策略,而在剩下的情况下使用最优行动; 从策略产生的动作上看, DPG 将先得到一个确定的行动,这个动作由确定的策略得到,不需要从概率分布中采样,相当于当前状态下的最优行动。如果决定使用随机策略,那么就在求出的确定行动基础上加上一定的噪声,反之则没有噪声。
  虽然确定策略的思想和 DQN 相近,但实际上, DPG 也可以看作是策略梯度法的一种特殊情况。我们知道随机策略梯度的输出是动作分布形式,对于离散行动空间,模型输出的是一个类别的分布,也就是每一个取值的概率。而对于连续行动空间,一般会输出一个高斯分布,其中一部分值表示分布的均值,另一部分值表示分布的方差,然后可以使用这些分布的参数采样出动作值。DPG 的输出也可以想像成一个连续的分布,只不过这个分布的方差为 0 ,这样我们就把 DPG 和策略梯度法统一起来了。
  我们再看一眼随机策略的梯度计算公式:

\[ \begin{aligned} \nabla_{\theta} J\left(\pi_{\theta}\right) &=\int_{\mathcal{S}} \rho^{\pi}(s) \int_{\mathcal{A}} \nabla_{\theta} \pi_{\theta}(a | s) Q^{\pi}(s, a) \mathrm{d} a \mathrm{d} s \\ &=\mathbb{E}_{s \sim \rho^{\pi}, a \sim \pi_{\theta}}\left[\nabla_{\theta} \log \pi_{\theta}(a | s) Q^{\pi}(s, a)\right] \end{aligned} \]

  随机性策略梯度需要在整个动作的空间进行采样,策略梯度是关于状态和动作的期望,在求期望时,需要对状态分布和动作分布求积分,这就要求在状态空间和动作空间采集⼤量的样本,这样求均值才能近似期望。
  由于确定性策略产生的动作是确定的,和随机策略不同,相同的策略(即\(\boldsymbol{\theta}\)相同时),在状态为 \(s\) 时,动作是唯⼀确定的,因此策略梯度的求解不需要在动作空间采样积分。相比于随机策略方法,确定性策略需要的样本数据更小,算法效率⾼。
  如果采用确定性策略,当初始状态已知时,⽤确定性策略所产⽣的轨迹是固定的,智能体⽆法探索其他轨迹或访问其他状态,即智能体⽆法学习。事实上,确定性策略使用异策方法进行学习,即动作策略和评估策略不是同⼀个策略,此处具体为动作策略是随机策略,以保证充足的探索,评估策略是确定性策略,即利用函数逼近方法估计值函数。则异策确定性策略梯度为:

\[ \begin{aligned} \nabla_{\theta} J(\mu_{\theta}) &=\int_{\mathcal{S}} \rho^{\mu}(s) \nabla_{\theta} \mu_{\theta}(s) \nabla_{a} Q^{\mu}(s, a)|_{a=\mu_{\theta}(s)} \mathrm{d} s \\ &= \mathbb{E}_{s \sim \rho^{\mu}} [\nabla_{\theta} \mu_{\theta}(s) \nabla_{a} Q^{\mu}(s, a)|_{a=\mu_{\theta}(s)}] \end{aligned} \]

  DPG 则是确定性策略梯度与 Actor-Critic 算法的结合,Actor 采用随机策略,Critic 采用确定性策略,更新过程如下:

\[ \begin{array}{c} \delta_{t}=r_{t}+\gamma Q^{w}\left(s_{t+1}, \mu_{\theta}\left(s_{t+1}\right)\right)-Q^{w}\left(s_{t}, a_{t}\right) \\ w_{t+1}=w_{t}+\alpha_{w} \delta_{t} \nabla_{w} Q^{w}\left(s_{t}, a_{t}\right) \\ \theta_{t+1}=\theta_{t}+\left.\alpha_{\theta} \nabla_{\theta} \mu_{\theta}\left(s_{t}\right) \nabla_{a} Q^{w}\left(s_{t}, a_{t}\right)\right|_{a=\mu_{\theta}(s)} \end{array} \]

  利用值函数逼近的方法更新值函数参数来进行 Critic 的参数更新,即上面更新公式的前两行时,动作为输入,权重连接的是输入状态和动作。在进行 Actor 更新的时候,需要更新的参数是 \(\theta\),确定性策略计算中 \(\nabla_{a} Q^{w}\left(s_{t}, a_{t}\right)|_{a=\mu_{\theta}(s)}\) 与参数 \(\theta\) 无关。

DDPG(Deep Deterministic Policy Gradient)

  DDPG 是深度神经网络和 DPG 的结合,所谓深度是指利⽤深度神经⽹络逼近 Q 值函数 \(Q^w(s,a)\) 和确定性策略。为了打破数据之间的相关性,DDPG 和 DQN 一样同样使用了经验回放和独⽴的目标网络,其实现框架和流程如下:

  我们简单说下各个组件的作用:

  • Actor当前网络:负责策略网络参数 \(\theta\) 的迭代更新,负责根据当前状态 \(s\) 选择当前动作 \(a\),用于和环境交互生成 \(s^{\prime}, r\)
  • Actor目标网络:负责根据经验回放池中采样的下一状态 \(s^{\prime}\) 选择最优下一动作 \(a^{\prime}\),网络参数 \(\theta\) 定期从 \(\theta^{\prime}\) 复制。
  • Critic当前网络:负责价值网络参数 \(w\) 的迭代更新,负责计算负责计算当前 \(Q\)\(Q(s,a,w)\)。目标 Q 值 \(y_{i}=r+\gamma Q^{\prime}\left(s^{\prime}, a^{\prime}, w^{\prime}\right)\)
  • Critic目标网络:负责计算目标Q值中 \(Q^{\prime}\left(s^{\prime}, a^{\prime}, w^{\prime}\right)\) 的部分,网络参数 \(w\) 定期从 \(w^{\prime}\) 复制。。

  DDPG 从当前网络到目标网络的复制和 DQN 不一样,DQN 是直接把当前 Q 网络的参数复制到目标 Q 网络,即 \(w = w^{\prime}\),DDPG没有使用这种硬更新,而是使用了软更新:

\[ \begin{array}{l} w^{\prime} \leftarrow \tau w+(1-\tau) w^{\prime} \\ \theta^{\prime} \leftarrow \tau \theta+(1-\tau) \theta^{\prime} \end{array} \]

  同时,为了学习过程可以增加一些随机性,增加学习的覆盖,DDPG 对选择出来的动作会增加一定的噪声,例如 Ornstein-Uhlenbeck 噪声:

\[ a=\pi_{\theta}(s)+\mathcal{N} \]

  对于 DDPG 的损失函数,Critic 当前网络的损失函数和 DQN 是类似的,都是均方误差:

\[ \text { Loss }=\frac{1}{N} \sum_{j=1}^{N}\left(y_{j}-Q\left(\phi\left(s_{j}\right), a_{j}, w\right)\right)^{2} \]

  而对于 Actor 当前网络,由于是确定性策略,原论文定义的损失梯度是:

\[ \nabla_{\theta} J(\theta)=\partial g(x) 1 N \sum_{i=1}^{N}[\nabla_{a} Q_{(} s_{i}, a_{i}, w)|_{s=s_{i}, a=\pi_{\theta}(s)} \nabla_{\theta} \pi_{\theta(s)}|_{s=s_{i}}] \]

  假如对同一个状态,我们输出了两个不同的动作 \(a_1\)\(a_2\),从 Critic 当前网络得到了两个反馈的Q值 \(Q_1\)\(Q_2\),假设 \(Q_1 \gt Q_2\),那么策略梯度的思想就是增加 \(a_1\) 的概率,降低 \(a_2\) 的概率,也就是说,Actor 想要尽可能的得到更大的 Q 值。所以我们的 Actor 的损失可以简单的理解为得到的反馈 Q 值越大损失越小,得到的反馈 Q 值越小损失越大,因此只要对状态估计网络返回的 Q 值取个负号即可,即:

\[ \operatorname{Loss}=-\frac{1}{m} \sum_{i=1}^{m} Q( s_{i}, a_{i}, w) \]

  算法伪代码如下:

TD3

  Dueling DQN 可以消除 DQN 里 overestimation bias的问题,而 TD3 算法可以 消除 Actor-Critic 类算法里 overestimation bias 的问题,同时目标网络在 TD update 中还可以消除累积误差。
  伪代码如下:

  论文的理解可以看看这篇文章

总结

  我们可以看出在连续性空间下,有同策和异策的算法,我们一般是使用确定性策略的 Actor–Critic 算法。

Refer

相关内容


坚持原创技术分享,您的支持将鼓励我继续创作,π(3.14)元就够啦!



文章目录
  1. 1. 引言
  2. 2. 同策确定性算法
    1. 2.1. 策略参数化
  3. 3. 异策确定性算法
    1. 3.1. DPG(Deterministic Policy Gradient)
    2. 3.2. DDPG(Deep Deterministic Policy Gradient)
    3. 3.3. TD3
  4. 4. 总结
  5. 5. Refer
  6. 6. 相关内容
您是第 位小伙伴 | 本站总访问量 | 已经写了 670.5k 字啦

载入天数...载入时分秒...