深度强化学习系列之(5): 策略梯度(Policy Gradient)

对于DQN来说使用一个网络直接逼近了值函数,最后取得了非常不错的效果, 但是对于一些连续性控制或者动作空间特别大的环境来说,很难全部计算所有的值函数来得到最好的策略,那么直接计算策略的方法就别提出来了。

回顾一下前面几篇,所谓的策略,其实就是状态到动作的映射数学表达为 π : s → a \pi : s \to a πsa
我们用 τ \tau τ 表示状态s到最后一个状态的一个序列,表示为:
τ : s t , s t + 1 . . . . s T \tau : s_{t},s_{t+1}....s_{T} τst,st+1....sT
那么奖励 R ( τ ) R(\tau) R(τ) 是一个随机变量,没法直接作为目标函数被优化,因此采用了随机变量的期望作为目标函数:
(1) J = ∫ r ( τ ) P π ( τ ) d τ J= \int r(\tau)P_{\pi}(\tau)d\tau \tag{1} J=r(τ)Pπ(τ)dτ(1)
因此强化学习的目标是找到最好的 max ⁡ π ∫ R ( τ ) P π ( τ ) d τ \max\limits_{\pi} \int R(\tau)P_{\pi}(\tau)d\tau πmaxR(τ)Pπ(τ)dτ,从最优策略的角度来说,对于序列$ s_{t},s_{t+1}…s_{T} , 最 优 的 策 略 序 列 为 : , 最优的策略序列为: ,u_{0}^{} \to u_{1}^{} \to u_{2}^{} \to…u_{T}^{}$,总结为:找到最优策略: π ∗ : s → u ∗ \pi^{*}:s \to u^{*} π:su

继续从目标函数说起, 由于要用神经网络来计算策略梯度,需要用一个网络结构去逼近策略,在此处我们假设神经网络的结构参数为 θ \theta θ,将目标函数由公式-1变为:
(2) J ( θ ) = E τ ∼ π θ ( τ ) [ r ( τ ) ] = ∫ τ ∼ π θ ( τ ) π θ ( τ ) r ( τ ) d τ J(\theta) = E_{\tau \sim \pi_{\theta}(\tau)}[r(\tau)] = \int _{\tau \sim \pi_{\theta}(\tau)}\pi_{\theta}(\tau)r(\tau)d\tau \tag{2} J(θ)=Eτπθ(τ)[r(τ)]=τπθ(τ)πθ(τ)r(τ)dτ(2)
推导原因: f ( x ) f(x) f(x) 关于某分布 P ( x ) P(x) P(x)的期望,对于连续性变量,期望通过积分求得:
(3) E x ∼ P [ f ( x ) ] = ∫ p ( x ) f ( x ) d x E_{x \sim P}[f(x)]= \int p(x)f(x)dx \tag{3} ExP[f(x)]=p(x)f(x)dx(3)

在数学中梯度的含义就是对函数求取导数,在监督学习中,我们求取损失函数的时候经常求取目标函数的梯度。同理,对于策略的目标函数,我们同样对目标函数 J ( ⋅ ) J(\cdot) J()公式(2)求取梯度:
(4) ∇ θ J ( θ ) = ∫ τ ∼ π θ ( τ ) ∇ θ π θ ( τ ) r ( τ ) d τ \nabla_{\theta}J(\theta) = \int _{\tau \sim \pi_{\theta}(\tau)}\nabla_{\theta}\pi_{\theta}(\tau)r(\tau)d\tau \tag{4} θJ(θ)=τπθ(τ)θπθ(τ)r(τ)dτ(4)
到这里,我们发现并没有方法直接计算,通过导数求导变换得到:
(5) ∇ θ π θ ( τ ) = π θ ( τ ) ∇ θ log ⁡ π θ ( τ ) \nabla_{\theta}\pi_{\theta}(\tau) = \pi_{\theta}(\tau)\nabla_{\theta}\log\pi_{\theta}(\tau) \tag{5} θπθ(τ)=πθ(τ)θlogπθ(τ)(5)
将公式(5)代入(4)得到策略梯度:

(6) ∇ θ J ( θ ) = E τ ∼ π θ ( τ ) [ ∇ θ log ⁡ π θ ( τ ) r τ ] = ∫ τ ∼ π θ ( τ ) π θ ( τ ) ∇ θ log ⁡ π θ ( τ ) r ( τ ) d τ \nabla_{\theta}J(\theta) = E_{\tau \sim \pi_{\theta}(\tau)}[\nabla_{\theta}\log\pi_{\theta}(\tau)r{\tau}] \\ = \int _{\tau \sim \pi_{\theta}(\tau)}\pi_{\theta} (\tau)\nabla_{\theta}\log \pi_{\theta}(\tau)r(\tau)d\tau \tag{6} θJ(θ)=Eτπθ(τ)[θlogπθ(τ)rτ]=τπθ(τ)πθ(τ)θlogπθ(τ)r(τ)dτ(6)
终于通过变化计算得到了策略梯度的计算方法,但是发现 ∇ θ log ⁡ π θ ( τ ) \nabla_{\theta}\log \pi_{\theta}(\tau) θlogπθ(τ) 并没法直接求取。那么该怎样计算呢?
通过前面我们知道对于序列 τ \tau τ,策略 π ( τ ) = π ( s 0 , a 0 , s 1 , a 1 , . . . , s T , a T ) \pi(\tau) = \pi(s_{0},a_{0},s_{1},a_{1},...,s_{T},a_{T}) π(τ)=π(s0,a0,s1,a1,...,sT,aT),我们将 π ( τ ) \pi(\tau) π(τ)通过最原始的方法展开得到

(7) π ( τ ) = p ( s 0 ) ∏ t = 0 T π θ ( a t ∣ s t ) p ( s t + 1 ∣ s t , a t ) \pi(\tau) = p(s_{0}) \prod_{t=0}^{T}\pi_{\theta}(a_{t}|s_{t})p(s_{t+1}|s_{t},a_{t}) \tag{7} π(τ)=p(s0)t=0Tπθ(atst)p(st+1st,at)(7)
于是将公式(7)代入公式(6)得到

(8) ∇ θ log ⁡ π θ ( τ ) = ∇ θ log ⁡ ( p ( s 0 ) ∏ t = 0 T π θ ( a t ∣ s t ) p ( s t + 1 ∣ s t , a t ) ) = ∇ θ ( log ⁡ p ( s 0 ) + ∑ t = 0 T log ⁡ π θ ( a t ∣ s t ) + ∑ t = 0 T log ⁡ p ( s t + 1 ∣ s t , a t ) ) = ∑ t = 0 T ∇ θ log ⁡ π θ ( a t ∣ s t ) \nabla_{\theta}\log \pi_{\theta}(\tau)= \nabla_{\theta}\log(p(s_{0}) \prod_{t=0}^{T}\pi_{\theta}(a_{t}|s_{t})p(s_{t+1}|s_{t},a_{t})) \\ = \nabla_{\theta}(\log p(s_{0})+\sum_{t=0}^{T}\log\pi_{\theta}(a_{t}|s_{t})+\sum_{t=0}^{T}\log p(s_{t+1}|s_{t},a_{t})) \\ = \sum_{t=0}^{T} \nabla_{\theta} \log\pi_{\theta}(a_{t}|s_{t}) \tag{8} θlogπθ(τ)=θlog(p(s0)t=0Tπθ(atst)p(st+1st,at))=θ(logp(s0)+t=0Tlogπθ(atst)+t=0Tlogp(st+1st,at))=t=0Tθlogπθ(atst)(8)

这样公式已经和监督学习中的最大似然有相同点了,因此我们对其进行蒙特卡洛处理,最终将公式(6)(7)(8)组合,并对公式(6)中的期望用蒙特卡洛进行替换,得到最终策略梯度:
∇ θ J ( θ ) = E τ ∼ π θ ( τ ) [ ∑ t = 0 T ∇ θ log ⁡ π θ ( a t ∣ s t ) ( ∑ t T r ( s t , a t ) ) ] = 1 N ∑ t = 0 N [ ∑ t = 0 T ∇ θ log ⁡ π θ ( a t ∣ s t ) ( ∑ t = 0 T r ( s t ∣ a t ) ) ] \nabla_{\theta}J(\theta) = E_{\tau \sim \pi_{\theta}(\tau)}[ \sum_{t=0}^{T} \nabla_{\theta} \log\pi_{\theta}(a_{t}|s_{t})(\sum_{t}^{T}r(s_{t},a_{t}))] \\ = \frac{1}{N}\sum_{t=0}^{N}[\sum_{t=0}^{T}\nabla_{\theta}\log\pi_{\theta}(a_{t}|s_{t})(\sum_{t=0}^{T}r(s_{t}|a_{t}))] θJ(θ)=Eτπθ(τ)[t=0Tθlogπθ(atst)(tTr(st,at))]=N1t=0N[t=0Tθlogπθ(atst)(t=0Tr(stat))]
终于我们得到了策略梯度的计算公式,接下来就是更新了梯度,和监督学习是一个方式
θ ^ = θ + α ∇ θ J ( θ ) \hat \theta = \theta+\alpha \nabla_{\theta}J(\theta) θ^=θ+αθJ(θ)
到这里,策略梯度的理论和公式部分计算讲完了,
其实说了这么多,最终只是服务于策略网络的逼近和参数更新,在后面的博客(DDPG等算法的的使用中都会用到)

参考文献:
1.强化学习原理及入门
2.强化学习核心算法讲解

你可能感兴趣的:(强化学习,深度强化学习)