强化学习中的策略优化方法1

强化学习中的策略梯度

Notation

先约定一些记号。用\((\mathcal{S},\mathcal{A},P)\)表示Markov Decision Process。其中\(\mathcal{S}\)是状态空间,包含了所有环境的状态;\(\mathcal{A}\)是动作空间,包含了所有可以采取的动作;\(P(r,s'|s,a)\)是在状态\(s\in \mathcal{S}\)下采取动作\(a\in\mathcal{A}\)后转移到状态\(s'\in\mathcal{S}\)并获得奖赏\(r\)的概率。我们把策略记为\(\pi_\theta\)\(\theta\)是策略的参数。对于确定性(deterministic)策略,\(a=\pi_\theta(s)\);对于随机策略,\(a\sim\pi_\theta(a|s)\),即\(\pi_\theta(a|s)\)反映了在状态\(s\)下采取动作a的概率。值得注意的是,如果策略空间是连续的,那么\(\pi_\theta(a|s)\)通常输出的是待采取策略的平均值和方差。在时刻\(t\)采取动作\(a_t\)后,环境反馈奖赏\(R(s_t,a_t)\)。那么从时刻0到时刻\(T\)我们获得的总奖赏为\(R(\tau)=\sum_{t=0}^{T-1}R(s_t,a_t)\)\(\tau\)表示经历的状态-行为序列\((s_0,a_0,r_0,s_1,a_1,r_1,\ldots,s_T)\),注意这里没有拿到第\(T\)步的奖赏,最终决策发生在\(T-1\)时刻。

下面进入主题。

Vanilla Policy Gradient

强化学习的目标是通过调整策略参数\(\theta\)以最大化期望奖赏\(\mathbb{E}_\tau[R(\tau)|\pi_\theta]\) 。策略梯度法的出发点是直接算期望奖赏对参数的梯度,之后利用梯度更新参数: \[ \begin{align} \nabla\mathbb{E}_\tau[R(\tau)|\pi_\theta]&=\nabla\int R(\tau) P(\tau|\pi_\theta) \mathcal{D}\tau \\ &=\int R(\tau) \nabla P(\tau|\pi_\theta) \mathcal{D}\tau\\ &=\int P(\tau|\pi_\theta) \left(R(\tau) \nabla \log P(\tau|\pi_\theta) \right)\mathcal{D}\tau \\ &(=\mathbb{E}_\tau[R(\tau)\nabla\log P(\tau|\pi_\theta)|\pi_\theta])\\ &=\int P(\tau|\pi_\theta) \left(R(\tau)\nabla\sum_{t=0}^{t=T-1}\log\pi_\theta(a_t|s_t) \right)\\ &=\mathbb{E}_\tau[R(\tau)\nabla\sum_{t=0}^{t=T-1}\log\pi_\theta(a_t|s_t) |\pi_\theta] \end{align} \] 从(3)到(5)是利用了\(P(\tau|\pi_\theta)\)的展开。(4)式非常清晰明了,所以我明确写了出来。有了(6) 式后,我们便可以通过采样\(m\)条路径去近似\(\mathbb{E}_\tau\) ,从而得到参数的梯度。

改进之一

如果所有的\(R(\tau)\)都为正,那岂不是算得的梯度是试图增加每一条轨迹\(\tau\)的概率\(P(\tau|\pi_\theta)\)?所以可以减去一个baseline也就是计算\(\nabla\mathbb{E}_\tau[R(\tau)-b|\pi_\theta]\),并且减去baseline后不影响估计出的梯度的无偏性: \[ \begin{align} \nabla\mathbb{E}_\tau[b|\pi_\theta]&=\nabla\int b P(\tau|\pi_\theta) \mathcal{D}\tau \\ &=\nabla\int b \mathcal{D}\tau \\ &=0 \end{align} \] 另一方面,这么做可以降低variance。

改进之二

考虑Temporal structure: \[ \begin{align} \nabla\mathbb{E}_\tau[R(\tau)-b|\pi_\theta]&=\mathbb{E}_\tau[(R(\tau)-b)\nabla\sum_{t=0}^{t=T-1}\log\pi_\theta(a_t|s_t) |\pi_\theta] \\ &=\mathbb{E}_\tau[\sum_{t=0}^{t=T-1}(R(s_t,a_t)-b)\nabla\sum_{t=0}^{t=T-1}\log\pi_\theta(a_t|s_t) |\pi_\theta] \end{align} \] 策略只对未来的奖赏有影响,所以可以扔掉一些项: \[ \begin{align} \nabla\mathbb{E}_\tau[R(\tau)-b|\pi_\theta]&=\mathbb{E}_\tau[\sum_{t'=t}^{t'=T-1}(R(s_t,a_t)-b)\nabla\sum_{t=0}^{t=T-1}\log\pi_\theta(a_t|s_t) |\pi_\theta] \end{align} \]\(b\)依赖于\(s_t\)时,我们可以证明 \[ \mathbb{E}_\tau[b(s_t)\nabla\sum_{t=0}^{t=T-1}\log \pi_\theta(a_t|s_t)|\pi_\theta]=0 \] 所以这里baseline \(b\)可以推广成依赖\(s_k\)的baseline \(b(s_k)\)

(另一种理解方式:只计算一个时刻\(t'\)时的奖赏的梯度,再求和,也就是说,未来的action不依赖于现在的reward: \[ \begin{align} \nabla\mathbb{E}_\tau[R(s_{t'},a_{t'})|\pi_\theta] &=\mathbb{E}_\tau[(R(s_{t'},a_{t'}))\nabla\sum_{t=0}^{t=T-1}\log\pi_\theta(a_t|s_t) |\pi_\theta] \\ &=\mathbb{E}_\tau[(R(s_{t'},a_{t'}))\nabla\sum_{t=0}^{t=t'}\log\pi_\theta(a_t|s_t) |\pi_\theta] \\ \end{align} \] )

最终得到策略梯度公式 \[ \nabla_\theta \mathbb{E}_\tau[R(\tau)|\pi_\theta] =\mathbb{E}_\tau[\nabla_\theta\sum_{t=0}^{t=T-1}\log\pi_\theta(a_t|s_t)\cdot\sum_{t'=t}^{t'=T-1}(R(s_{t'},a_{t'})-b(s_{t'})) |\pi_\theta] \]

baseline的选取

回顾一下值函数\(V\)和状态值函数\(Q\)的定义(discount factor \(\gamma=1\)) \[ \begin{align} V_\pi(s_t) &= \mathbb{E}_\tau[\sum_{t'=t}^{t'=T-1}R(s_{t'},a_{t'})|\pi_\theta,s_t] \\ Q_\pi(s_t,a_t) &= \mathbb{E}_\tau[\sum_{t'=t}^{T-1}R(s_{t'},a_{t'})|\pi_\theta,s_t,a_t] \end{align} \] 它们的含义分别是固定初始状态下的状态累计奖赏期望和固定初始状态和动作下的累计奖赏期望。再观察(16)式,发现它的右边正好包含\(Q(s_t,a_t)\)\[ \nabla_\theta \mathbb{E}_\tau[R(\tau)|\pi_\theta] =\mathbb{E}_\tau[\nabla_\theta\sum_{t=0}^{t=T-1}\log\pi_\theta(a_t|s_t)\cdot(Q(s_t,a_t)-\sum_{t'=t}^{t'=T-1}b(s_{t'})) |\pi_\theta] \] 这一步利用了鞅的性质。剩下的 \(b(s_t)\)我们就取\(Q\)的期望值好了,正好把\(a_t\)干掉,而且得到的就是\(V\),完美! \[ \nabla_\theta \mathbb{E}_\tau[R(\tau)|\pi_\theta] =\mathbb{E}_\tau[\nabla_\theta\sum_{t=0}^{t=T-1}\log\pi_\theta(a_t|s_t)\cdot(Q(s_t,a_t)-V(s_t) |\pi_\theta] \] 我们把\(A(s_t,a_t)\equiv Q(s_t,a_t)-V(s_t)\)称作adventage function。它描述动作\(a_t\)的回报比平均的期望回报高多少。实际中一般令Q和V中的\(\gamma>0\)以减少未来的影响,降低variance。

(要意识到其实\(A(s_t,a_t)\)中大部分都是噪声: \(A(s_t,a_t)=\sum_{t'=t}^{t'=T-1}(R(s_{t'},a_{t'})-b(s_{t'}))\)),只有动作\(a_t\)产生的结果是确定的信号,后续动作\(a_{t+1},a_{t+2},\ldots\)贡献噪声。)

另一种reduce variance的方法是用值函数估计未来奖赏: \[ \begin{align} R(s_t,a_t)+\gamma R(s_{t+1},a_{t+1})+\ldots & =R(s_t,a_t)+\gamma V^\gamma(s_{t+1}) \\ & =R(s_t,a_t)+\gamma R(s_{t+1},a_{t+1}) +\gamma^2 V^\gamma(s_{t+2}) \\ &= \ldots \end{align} \] 这里引入\(\gamma\)也是为了减少variance。则\(A(s_t,a_t)\)变成 \[ \begin{align}A^\gamma(s_t,a_t)&= R(s_t,a_t)+\gamma V ^\gamma(s_{t+1}) -V^\gamma(s_t)\\ & = R(s_t,a_t)+\gamma R(s_{t+1},a_{t+1})+\gamma^2 V^\gamma (s_{t+2}) -V^\gamma(s_t)\\ & = ... \end{align} \]

再进一步,引入类似TD(\(\lambda\))的general advantage estimation: \((1-\lambda)\)*[(24)式 +(25)式\(\lambda\)+(26)式\(\lambda^2\)…),把它作为advantage estimator。通过调整两个参数\(\gamma\)\(\lambda\),我们可以得到一族estimators。\(\lambda=0\)\(\lambda=1\)时的两个特例为: \[ \mathrm{GAE(\gamma,0): =}R(s_t,a_t)+\gamma V(s_{t+1}) - V(s_{t}) \quad\mathrm{high\ bias, low\ variane}\\ \mathrm{GAE(\gamma,1): =}\sum_{l=0}\gamma^lR(s_{t+l},a_{t+l})- V(s_{t}) \quad\mathrm{high\ bias, low\ variane}\\ \] (注意是\(V\)\(不是\)\(V^\gamma\),这里推导的过程中符号有点乱了)

如要进一步了解general advantage esitimation,可参阅Schulman的博士论文或他的High-Dimensional Continuous Control Using Generalized Advantage Estimation(arxiv: 1506.02438) 这篇文章。