riverstar

ddpg 论文读书笔记

ddpg 论文 2016

CONTINUOUS CONTROL WITH DEEP REINFORCEMENT LEARNING

DQN只能解决离散、低维度的动作空间。对于连续高维的动作空间,DQN就不能为力了。借此引出了DDPG。

  • 为什么不能直接离散化连续动作空间
    1. 如果对于连续动作空间进行精细离散化的话,会导致维度灾难,动作空间的维度很高,并且空间大小是指数级地增长。对于如此大的动作空间,难以高效探索,很难训练。
    2. 而过小的离散维度,会扔掉较多的动作信息,而有些任务需要精细的动作控制,粗间隔的动作无法完成任务。

论文提出一种model-free、off-policy,actor-critic算法。应对高维的、连续的动作控制问题---DDPG。
ddpg的工作是基于2014年的dpg思想,结合了当时(2016)最近成功的DQN思想启发。采用了两大利器:

  1. 经验回放。从经验池中随机取一批样本进行训练,打乱了样本之间相关性
  2. 固定备份网络训练,增加了训练的稳定性。
  3. 此外还使用了Batch Normalization

强化学习建模

考虑基本的强化学习模型,一个\(agent\)与环境\(E\)交互离散的时间步长。
在时间\(t\)\(agent\)接收环境返回的观察\(x_t\),采取动作\(a_t\),获得环境反馈的标量奖励值\(r_t\).

graph LR; Agent--动作a-->Environment Environment--奖励r-->Agent Environment--状态s-->Agent

一般而言,环境对于agent只是部分可观测性,历史上整个环境观测\(x_t\)\(a_t\)才能表述系统的状态.\(s_t = (x_1,a_1,...,a_{t-1},x_t)\)
为了简化起见,我们一般都认为模型是完全观测系统,有\(s_t = x_t\)

首先来解释随机策略 \(\pi :\mathcal S\rightarrow P(\mathcal A)\).得到的是状态到动作的概率,agent不是一定选择某一个动作,是有随机性的。

对于强化模型一次交互,系统进行状态转移\(P(s_{t+1}|s_t,a_t)\),环境返回奖励值\(r_t = r(s_t,a_t)\).
奖励值随着状态的推进会累计成总奖励值。对于\(t\)时刻的状态来说他所能得到的总奖励值\(R_t = \sum_{i=t}^T\gamma^{i-t}r(s_i,a_i)\),
其中\(\gamma\)是折扣因子,用来调整未来的奖励对现在的影响,\(\gamma \in[0,1]\)
强化学习的目标自然是最大化奖励值,即最大下式:

\[{\large J = \mathbb E_{r_i,s_i\thicksim E,a_i\thicksim \pi}[R_1] }\]

这个式子,我们可以优化的就只有策略\(policy\): \(\pi\)。强化学习要做的也就是找到一个最好的策略,让累计奖励值最大。
状态动作价值方程:当状态\(s_t\)采取动作\(a_t\),然后遵循\({\Large policy}\)\({\Large \pi}\)做决策

\[{\large Q^\pi(s_t,a_t) = \mathbb E_{r_{i\ge t},s_{i\gt t}\thicksim E,a_{i\gt t}\thicksim \pi}[R_t|s_t,a_t] }\]

bellman方程

\[{\large Q^\pi(s_t,a_t) = \mathbb E_{r_t,s_{t+1} \sim E}[r(s_t,a_t) + \gamma \mathbb E_{a_{t+1}\sim \pi}[Q^\pi(s_{t+1},a_{t+1})]] }\]

如果目标策略是确定的,有策略\({\large \mu :\mathcal S \rightarrow \mathcal A}\)

\[{\large Q^\mu(s_t,a_t) = \mathbb E_{r_t,s_{t+1} \sim E}[r(s_t,a_t) + \gamma Q^\mu(s_{t+1},\mu(s_{t+1}))] }\]

可以看到,确定策略消除掉了第一个方程里的求期望的部分。这一点很重要,因为对于连续动作和高维离散动作空间来说,这个期望的求解你就求不出来。确定策略就可以用一个确定的值代替之前的E,使得bellman方程依然可以使用(在实践中).
第二个方程只有一个外部的期望,这个期望只取决于环境,这就意味着可以使用不同的随机策略生成的转移过程去学习\(Q^\mu\)。也就是说对于相同的\(s_t\),用不同的策略使用不同的动作\(a_t\),但是因为有\(Q^\mu\)的价值函数依然可以计算。

作者使用loss去优化Q网络

\[{\large L(\theta^Q) = \mathbb E_{s_t \sim \rho^\beta,a_t \sim \beta,r_t \sim E} \left[ (Q(s_t,a_t|\theta^Q)-y_t)^2 \right] }\]

其中:

\[{\large y_t = r(s_t,a_t) + \gamma Q(s_{t+1},\mu(s_{t+1})|\theta^Q) }\]

显然,Q网络要去估计状态-动作的价值,扮演的是一个评论家critic,越准越好。

对于\(\mu\)网络扮演的是actor角色,他的训练是这样的:

\[{\large \begin{align} \nabla_{\theta^\mu} &\approx \mathbb E_{s_t\sim \rho^\beta}[\nabla_{\theta^\mu}Q(s,a|\theta^Q)|_{s=s_t,a=\mu(s_t|\theta^\mu)}] \\ & =\mathbb E_{s_t\sim \rho^\beta}[\nabla_{a}Q(s,a|\theta^Q)|_{s=s_t,a=\mu(s_t)}\nabla_{\theta_{\mu}}\mu(s|\theta^\mu)|_{s=s_t}] \end{align} } \]

使用了链式法则,$${\large \frac {\partial Loss} {\partial\theta^\mu} = \frac{\partial Q} {\partial a}\frac {\partial a}{\partial\theta^\mu}}$$.由于actor的目标值是使得Q值越大越好,所以对于这个loss为Q值的损失函数,采用的是梯度上升,寻找最大值。

深度强化学习,使用大规模的非线性网络去估计函数,有一个很大的问题就是训练出来的网络不收敛。对此文章作者花了很大的篇幅去讲述他们怎么使用各种设计和实现上的技巧去使得网络收敛的。
借鉴了DQN设计的思想:

  1. 经验池。很多强化学习都假设数学数据之间是独立同分布的.(independently and identically distributed ,iid)。很显然从环境中一个一个生成的数据序列并不是iid的。另外使用mini-batcher的方法去做训练还可以从硬件的并行中收益,所以说经验池是十分必要的。

posted on 2022-04-07 23:17  RVIER  阅读(442)  评论(0编辑  收藏  举报

导航