0 引言
为了解决连续动作空间的问题,也是绞尽了脑汁。D. Silver在2014和2016年分别提出了DPG[1]和DDPG[2]。就是封面的大神。
首先要区分两个概念:确定性策略和随机性策略。
- 随机性策略:$\pi_{\theta}(a|s)=\mathbb{P}[a|s;\theta]$
其含义是,在状态$s$时,动作符合参数为$\theta$的概率分布。比如说高斯策略:
$$
\pi_{\theta}(a|s)=\frac{1}{\sqrt{2\pi}\sigma}exp(-\frac{(a-f_{\theta}(s))}{2\sigma^2})
$$
在状态$s$时,使用该策略获取动作,多次采样可以看到动作服从均值为$f_{\theta}(s)$,方差为$\sigma^2$的正太分布。也就是说,当使用随机策略时,虽然每次处于相同的状态,但是采取的动作也不一样。 - 确定性策略:$a=\mu_{\theta}(s)$
其含义是,对于相同的状态,确定性地执行同一个动作。
确定策略有哪些优点呢?需要的采样数据少,算法效率高
1 DPG
为什么要提出DPG?
在解决连续动作空间的问题上,确定性策略的求解通过动作值函数的梯度来实现,形式比较简单。相对随机性策略,估计起来也更加方便。
是什么?
确定性策略:$\mu_{\theta}:\mathcal{S}\to \mathcal{A}$,其中,$\theta$是策略函数的参数。目标就是确定$\theta$。
目标函数:
$$
J(\mu_{\theta})=\int_{\mathcal{S}}\rho^{\mu}(s)r(s,\mu_{\theta}(s))ds=\mathbb{E}_{s\sim \rho^{\mu}}[r(s,\mu_{\theta}(s))]
$$
其中,状态转移的概率分布可以表示为$p(s\to s^{\prime},t,\pi)$,即根据策略$\pi$从状态$s$经过$t$时间转移到状态$s^{\prime}$的概率分布。有了状态转移的概率分布,就可以定义折扣的状态分布
$$
\rho^{\pi}(s^{\prime}):=\int_{\mathcal{S}}\sum_{t=1}^{\infty}\gamma^{t-1}p_1(s)p(s\to s^{\prime},t,\pi)ds
$$
$p_1(s)$为初始的状态分布。
确定性策略梯度:
$$
\nabla_{\theta}J(\mu_{\theta})=\int_{\mathcal{S}}\rho^{\mu}(s)\nabla_{\theta}\mu_{\theta}(s)\nabla_{a}Q^{\mu}(s,a)\mid_{a=\mu_{\theta}(s)}ds
$$
$$
=\mathbb{E}_{s\sim \rho^{\mu}}[\nabla_{\theta}\mu_{\theta}(s)\nabla_{a}Q^{\mu}(s,a)\mid_{a=\mu_{\theta}(s)}]
$$
为什么要对Q函数求偏导数呢?因为对于连续动作空间问题,使用贪婪法,每一步都需要求解概率最大的动作,相当于寻找Q函数的全局最大值,比较困难。于是,一个自然的想法就是将策略函数每次都沿着Q函数的梯度更新参数,而不是求解Q函数的全局最大值。于是,
$$
\theta^{k+1}=\theta^k+\alpha\mathbb{E}_{s\sim\rho^{\mu^k}}[\nabla_{\theta}Q^{\mu^k}(s,\mu_{\theta}(s))]
$$
根据链式法则,可以将上式改写成,
$$
\theta^{k+1}=\theta^k+\alpha\mathbb{E}_{s\sim\rho^{\mu^k}}[\nabla_{\theta}\mu_{\theta}(s)\nabla_{a}Q^{\mu^k}(s,a)\mid_{a=\mu_{\theta}(s)}]
$$
同策略实现
使用同一个策略产生训练数据,并提升这个策略,会导致“探索”不够充分,最终得到一个此优解。但是,为了展示算法的完整性,还是介绍一下。同样实现的过程用到了AC的思想,actor使用确定性策略梯度更新参数,critic使用Sarsa更新动作-状态值函数。同样的,状态值函数使用函数逼近的方式获得:$Q^w(s,a)$
TD-error: $\delta_t=r_t+\gamma Q^w(s_{t+1},a_{t+1})-Q^w(s_t,a_t)$
critic参数更新: $w_{t+1}=w_t+\alpha_w\delta_t\nabla_wQ^w(s_t,a_t)$
actor参数更新: $\theta_{t+1}=\theta_t+\alpha_{\theta}\nabla_{\theta}\mu_{\theta}(s_t)\nabla_{a}Q^w(s_t,a_t)\mid_{a=\mu_{\theta}(s)}$ (SGD)
异策略实现
实现大致和同策略一致,只不过学习的数据是通过一个随机策略生成的。
2 DDPG
为什么要提出DDPG?
DDPG解决了四大问题:
一是使用神经网络解决优化问题的一个前提是训练数据独立同分布,但是根据随机策略产生的数据不具备这样的属性,而且为了发挥硬件的特性,需要使用minibatch的数据来进行训练。借鉴DQN的思路,使用Experience Replay的思想。
使用双端队列的代码实现$^{[4]}$
二是直接使用神经网络实现Q-learning被证明是不稳定的,可能不会收敛。解决的办法是复制一份actor和critic网络作为target网络,使用相同的网络结构但是不同的参数。
三是当状态特征向量的纬数比较低,不同特征由于不同的单位,数值大小各不相同,并且随着环境的变化而发生变化,这时候就很难有效学习一组参数可以适用于各种环境。通常的解决办法是batch normalization,将每个minibatch中的样本的特征归一化到具有单位均值和方差。
四是增加探索的成分,获取全局最优解。
$$
\mu^{\prime}(s_t)=\mu(s_t\mid \theta^{\mu}_t)+\mathcal{N}
$$
是什么?
算法的伪代码如下:
critic: $Q(s,a\mid\theta^{Q})$
$$
L=\frac{1}{N}\sum_i(y_i-Q(s_i,a_i\mid\theta^Q))^2
$$
其中,$y_i=r_i+\gamma Q^{\prime}(s_{i+1},\mu^{\prime}(s_{i+1}\mid\theta^{\mu^{\prime}})\mid \theta^{Q^{\prime}})$
actor: $\mu(s\mid\theta^{\mu})$
$$
\nabla_{\theta^{\mu}}J\approx\frac{1}{N}\sum_i\nabla_aQ(s,a\mid\theta^Q)\mid_{s=s_i,a=\mu(s_i)}\nabla_{\theta^{\mu}}\mu(s\mid\theta^{\mu})\mid_{s_i}
$$
actor: $\mu^{\prime}(s\mid\theta^{\mu^{\prime}})$
critic: $Q^{\prime}(s,a\mid\theta^{Q^{\prime}})$
两种更新策略:
- 每隔C步更新一次;
- 每次更新一点点,如伪代码所示,通常$\tau$是一个很小的数。
DDPG代码实现$^{[4]}$
Actor的DNN类:
Critic的DNN类:
|
|
参考文献
[1] Deterministic Policy Gradients. D. Silver, G. Lever, N. Heess, T. Degris, D. Wierstra, M. Riedmiller. ICML 2014.
[2] Continuous Control with Deep Reinforcement Learning. T. Lillicrap, J. Hunt, A. Pritzel, N. Heess, T. Erez, Y. Tassa, D. Silver, D. Wierstra. ICLR 2016.
[3] 天津包子馅儿 强化学习知识大讲堂 知乎专栏
[4] http://pemami4911.github.io/blog/2016/08/21/ddpg-rl.html