强化学习—— 12 DDPG算法

强化学习—— 12 DDPG算法
可爱可倾12 DDPG算法
深度确定性策略梯度是在动作空间无限的环境使用off-policy的actor-critic算法。它它的actor是一个确定性策略,通过梯度上升法来最大化Q值;它的critic是一个Q网络,通过梯度下降法来最小化Q值的TD误差。
12.1 DDPG算法
12.1.1 算法引出
- TRPO和PPO是on-policy的actor-critic算法,这意味着它们只能在当前策略上进行更新,样本效率较低。
- DQN是off-policy的Q-learning算法,直接估计Q值,样本效率较高,但是但是它只能处理动作空间有限的环境,这是因为它需要从所有动作中挑选一个\(Q\)值最大的动作。虽然可以将将动作空间离散化,但这比较粗糙,无法精细控制。
- TRPO和PPO学习的是随机策略,而DDPG学习的确定性策略。随机策略可以表示为\(a\sim \pi_\theta(a|s)\),确定性策略可以表示为\(a=\mu_\theta(s)\)。
12.1.2 算法公式
确定性策略梯度定理:
\[ \nabla_\theta J(\mu_\theta)=\mathbb{E}_{s\sim \rho_\mu,a\sim \mu_\theta}[\nabla_\theta \mu_\theta(s)\nabla_a Q_\phi(s,a)|_{a=\mu_\theta(s)}] \]
这个公式可以理解为:假定现在已有函数\(Q\),给定一个状态\(s\),但由于现在动作空间是无限的,所以无法遍历所有动作来得到最大的\(Q\)值,因此我们用策略\(\mu_\theta(s)\)来找到一个动作\(a\),使得\(Q(s,a)\)最大。此时,\(Q\)就是critic,\(\mu_\theta(s)\)就是actor。
12.1.3 算法描述
DDPG要用到4个网络:\(\mu,\mu',Q,Q'\)。其中\(\mu\)是actor,\(Q\)是critic,\(\mu'\)是actor的target网络,\(Q'\)是critic的target网络。
目标网络的的更新方式是软更新: \[ \omega^-=\tau\omega+(1-\tau)\omega^- \] 其中\(\tau\)是更新系数,通常很小的一个数。当\(\tau = 1\)时,就和DQN更新方式一样了。
另外,由于函数\(Q\)存在\(Q\)值估值过高的问题,DDPG 采用了 Double DQN 中的技术来更新\(Q\)网络。 但是,由于 DDPG 采用的是确定性策略,它本身的探索仍然十分有限。作为一种离线策略的算法,DDPG 在行为策略上引入一个随机噪声\(\mathcal{N}\)来进行探索。
12.1.4 算法流程
- 随机初始化actor和critic的网络参数\(\theta\)和\(\omega\),初始化噪声过程\(\mathcal{N}\)。
- 复制\(\theta\)和\(\omega\)到\(\theta^-\)和\(\omega^-\),初始化目标网络。
- 初始化经验回放池\(\mathcal{D}\)。
- for 轮次\(episode=1,2,...,E\) do
- 初始化随机过程\(\mathcal{N}\)用来探索。
- 获取环境初始状态\(s_1\)。
- for 时间步 t=1,2,…,T do
- 根据当前策略和噪声选择动作\(a_t = \mu_\theta(s_t)+\mathcal{N}\)。
- 执行动作\(a_t\),得到新状态\(s_{t+1}\),奖励\(r_t\)。
- 将\((s_t,a_t,r_t,s_{t+1})\)存入\(\mathcal{D}\)。
- 从\(\mathcal{D}\)中随机采样\(N\)个样本\({(s_i,a_i,r_i,s_{i+1})}_{i=1,2,...,N}\)。
- 对每个样本\(i\),用目标网络计算\(y_i=r_i+\gamma Q_\phi(s_{i+1},\mu_\theta(s_{i+1}))\)。
- 最小化目标损失函数\(L(\omega)=\frac{1}{N}\sum_i(y_i-Q_\omega(s_i,a_i))^2\),更新当前critic网络参数\(\omega\)。
- 计算采样的\(N\)个动作的策略梯度,更新当前actor网络参数\(\theta\)。\(\nabla_\theta J \approx \frac{1}{N}\sum_i\nabla_\theta \mu_\theta(s_i)\nabla_a Q_\phi(s_i,a_i)|_{a=\mu_\theta(s_i)}\)
- 更新目标网络。\(\omega^-=\tau\omega+(1-\tau)\omega^-, \theta^-=\tau\theta+(1-\tau)\theta^-\)。
- end for
- end for






