强化学习 10 —— Policy Gradient详细推导

前面几篇文章价值函数近似DQN算法DQN改进算法DDQN和Dueling DQN介绍了 DQN 算法以及其改进算法 DDQN 和 Dueling DQN 。他们都是对价值函数进行了近似表示,也就是 学习价值函数,然后从价值函数中提取策略,这种方式叫做 Value Based。

一、Value Based 的不足

回顾学习路径发现,从动态规划到蒙地卡罗,到TD到Qleaning再到DQN,一路为计算Q值和V值绞尽脑汁。但大家有没有发现,上述过程包含一个固定思维,就是求解最优策略一定要算Q值和V值,然后找到具有最大Q值的动作,这种思路属于Value Based算法。但是计算Q值和V值并不是最终目的呀,强化学习问题是要找一个最优策略,那为什么不直接学习这个最优策略呢?这就是 Policy Based 算法的路线。

Value Based 强化学习方法在很多领域得到比较好的应用,但是其也有局限性。

  • 1)首先就是对连续动作处理能力不足,算法 DQN 使用的 CartPole-v1 环境,在这个环境中只有两个动作:控制小车向左或者向右,这就是离散动作。那连续动作就是动作不光有方向,而且还有大小,对小车施加的力越大,小车的动作幅度也会越大。例如自动驾驶控制方向盘,还请读者自行体会。这个时候,使用离散的方式是不好表达的,而使用基于 Policy Based 方法就很容易。

  • 2)无法解决随机策略(Stochastic Policy)问题。随机性策略就是把当前状态输入网络,输出的是不同动作的概率分布(比如 40% 的概率向左,60% 的概率向右)或者是对于连续动作输出一个高斯分布。而基于 Value Based 的算法是输出是每个动作的动作价值 Q ( s , a ) Q(s,a) Q(s,a) ,然后选择一个价值最大的动作,也就是说输出的是一个确定的动作,这种称之为确定性策略(Deterministic Policy)。但是有些问题的最优策略是随机策略,所以此时 基于 Value Based 的方法就不再适用,这时候就可以适用基于 Policy Based 的方法。
    在这里插入图片描述

二、策略梯度

1、优化目标

类比于近似价值函数的过程: q ^ ( s , a , w ) ≈ q π ( s , a ) \hat{q}(s, a, w) \approx q_\pi(s, a) q^(s,a,w)qπ(s,a) 。对于 Policy Based 强化学习方法下,可以使用同样的方法对策略进行近似,给定一个使用参数 θ \theta θ 近似的 π θ ( s , a ) \pi_\theta(s,a) πθ(s,a) ,然后找出最好的 θ \theta θ

那么该如何评估策略 π θ \pi_\theta πθ 的好坏呢?也就是优化目标是什么?

对于离散动作的环境可以优化初始状态收获的期望:
J 1 ( θ ) = V π θ ( s 1 ) = E π θ [ v 1 ] J_1(\theta) = V_{\pi_\theta}(s_1) = E_{\pi_\theta}[v_1] J1(θ)=Vπθ(s1)=Eπθ[v1]
对于那些没有明确初始状态的连续环境,可以优化平均价值:
J a v V ( θ ) = ∑ s d π θ ( s ) V π θ ( s ) J_{avV}(\theta) = \sum_sd_{\pi_{\theta}}(s)V_{\pi_\theta}(s) JavV(θ)=sdπθ(s)Vπθ(s)
或者定义为每一段时间步的平均奖励:
J a v R ( θ ) = ∑ s d π θ ( s ) ∑ a π θ ( s , a ) R ( s , a ) J_{avR}(\theta) = \sum_sd_{\pi_\theta}(s)\sum_a\pi_\theta(s,a)R(s,a) JavR(θ)=sdπθ(s)aπθ(s,a)R(s,a)

其中 d π θ ( s ) d_{\pi_\theta}(s) dπθ(s) 是基于策略 π θ \pi_\theta πθ 生成的马尔科夫链关于状态 的静态分布

无论采用上述哪一种优化 方法,最终对 θ \theta θ 求导的梯度都可以表示为:
∇ θ J ( θ ) = E π θ [ ∇ θ    l o g π θ ( s , a ) R ( s , a ) ] \nabla_\theta J(\theta) = E_{\pi_\theta}[\nabla_\theta\;log\pi_\theta(s,a)R(s,a)] θJ(θ)=Eπθ[θlogπθ(s,a)R(s,a)]
具体推导请往下看

2、Score Function

现在假设策略 π θ \pi_\theta πθ 是可导的,就来计算策略梯度 ∇ θ π θ ( s , a ) \nabla_\theta \pi_\theta(s,a) θπθ(s,a) 。这里先介绍一个叫 likelihood ratio 的小技巧:
∇ θ π θ ( s , a ) = π θ ( s , a ) ∇ θ π θ ( s , a ) π θ ( s , a ) = π θ ( s , a ) ⋅ ∇ θ l o g π θ ( s , a ) \nabla_\theta \pi_\theta(s,a) = \pi_\theta(s,a)\frac{\nabla_\theta \pi_\theta(s,a)}{\pi_\theta(s,a)} \\ = \pi_\theta(s,a) \cdot \nabla_\theta log\pi_\theta(s,a) θπθ(s,a)=πθ(s,a)πθ(s,a)θπθ(s,a)=πθ(s,a)θlogπθ(s,a)
这里的 ∇ θ l o g π θ ( s , a ) \nabla_\theta log\pi_\theta(s,a) θlogπθ(s,a) 就叫做 score function

下面介绍策略函数的形式,对于离散动作一般就是 Softmax Policy。关于 Softmax 函数,相信学过深度学习应该都比较了解,这里不在赘述。对于连续动作环境就是 Gaussian Policy。下面分别介绍

1)Softmax Policy

把策略用线性特征组合的方式表示为: ϕ ( s , a ) T θ \phi(s,a)^T\theta ϕ(s,a)Tθ 。此时有:
π θ ( s , a ) = e x p ϕ ( s , a ) T θ ∑ a ′ e x p ϕ ( s , a ) T θ \pi_\theta(s,a) = \frac{exp^{\phi(s,a)^T\theta}}{\sum_{a'}exp^{\phi(s,a)^T\theta}} πθ(s,a)=aexpϕ(s,a)Tθexpϕ(s,a)Tθ
此时的 score function 为:
∇ θ l o g π θ ( s , a ) = ∇ θ [ l o g    e x p ϕ ( s , a ) T θ − ∑ a ′ l o g    e x p ϕ ( s , a ) T θ ] = ∇ θ [ ϕ ( s , a ) T θ − ∑ a ′ ϕ ( s , a ) T θ ] = ϕ ( s , a ) − ∑ a ′ ϕ ( s , a ) \begin{aligned} \nabla_\theta log\pi_\theta(s,a) & = \nabla_\theta \left[log\;exp^{\phi(s,a)^T\theta}-\sum_{a'}log\;exp^{\phi(s,a)^T\theta}\right] \\ & = \nabla_\theta\left[\phi(s,a)^T\theta - \sum_{a'}\phi(s,a)^T\theta\right] \\ & = \phi(s,a) - \sum_{a'}\phi(s,a) \end{aligned} θlogπθ(s,a)=θ[logexpϕ(s,a)Tθalogexpϕ(s,a)Tθ]=θ[ϕ(s,a)Tθaϕ(s,a)Tθ]=ϕ(s,a)aϕ(s,a)

2)Gaussian Policy

在连续动作空间中,一般使用 Gaussian policy 。其中的均值是特征的线性组合: μ ( s ) = ϕ ( s ) T θ \mu(s) = \phi(s)^T\theta μ(s)=ϕ(s)Tθ 。方差可以固定为 σ 2 \sigma^2 σ2 也可以作为一个参数。那么对于连续动作空间有: a    ~    N ( μ ( s ) , σ 2 ) a\;~ \;N(\mu(s), \sigma^2) aN(μ(s),σ2)

此时的 score function 为:
∇ θ l o g π θ ( s , a ) = ∇ θ l o g [ 1 2 π σ e x p ( − ( a − μ ( s ) ) 2 2 σ 2 ) ] = ∇ θ [ l o g    1 2 π σ − l o g    e x p ( ( a − μ ( s ) ) 2 2 σ 2 ) ] = − ∇ θ ( ( a − ϕ ( s ) T θ ) 2 2 σ 2 ) = ( a − μ ( s ) ) ϕ ( s ) σ 2 \begin{aligned} \nabla_\theta log\pi_\theta(s,a) & = \nabla_\theta log \left[ \frac{1}{\sqrt{2\pi}\sigma} exp \left(-\frac{(a-\mu(s))^2}{2\sigma^2}\right) \right] \\ & = \nabla_\theta \left[ log\;\frac{1}{\sqrt{2\pi}\sigma} - log\; exp \left(\frac{(a-\mu(s))^2}{2\sigma^2}\right) \right] \\ & = - \nabla_\theta\left(\frac{(a-\phi(s)^T\theta)^2}{2\sigma^2}\right) \\ & = \frac{(a-\mu(s))\phi(s)}{\sigma^2} \end{aligned} θlogπθ(s,a)=θlog[2π σ1exp(2σ2(aμ(s))2)]=θ[log2π σ1logexp(2σ2(aμ(s))2)]=θ(2σ2(aϕ(s)Tθ)2)=σ2(aμ(s))ϕ(s)

3、Policy Gradient 推导

对于 Policy Gradient 的求导应该来说是比较复杂的,重点是理解对于一条轨迹如何表示,弄明白符号所代表的含义,推导过程也不是那么复杂。下面正式开始 Policy Gradient 的推导,首先推导对于一条 MDP 轨迹的 Policy Gradient,然后再推导有多条轨迹的情况。

1)一条MDP轨迹

开始的状态 s 有: s    ~    d ( s ) s\;~\;d(s) sd(s) 。对于这一步的奖励 为 r = R ( s , a ) r = R(s,a) r=R(s,a)

上文有提到其中 d π θ ( s ) d_{\pi_\theta}(s) dπθ(s) 是基于策略 π θ \pi_\theta πθ 生成的马尔科夫链关于状态 的静态分布

J ( θ ) = E π θ [ r ] = ∑ s ∈ S d ( s ) ∑ a ∈ A π θ ( s , a ) ⋅ r J(\theta) = E_{\pi_\theta}[r] = \sum_{s\in S}d(s)\sum_{a\in A}\pi_\theta(s,a)\cdot r J(θ)=Eπθ[r]=sSd(s)aAπθ(s,a)r

那么优化目标就是使奖励尽可能的大,然后使用 likelihood ratio 计算 Policy Gradient :
∇ J ( θ ) = ∑ s ∈ S d ( s ) ∑ a ∈ A π θ ( s , a )    ∇ θ l o g    π θ ( s , a ) ⋅ r = E π θ [ ∇ θ l o g    π θ ( s , a ) ⋅ r ] \begin{aligned} \nabla J(\theta) & = \sum_{s\in S}d(s)\sum_{a\in A}{\color{red}\pi_\theta(s,a)\; \nabla_\theta log\;\pi_{\theta}(s,a)}\cdot r \\ & =E_{\pi_\theta}[\nabla_\theta log\;\pi_{\theta}(s,a)\cdot r] \end{aligned} J(θ)=sSd(s)aAπθ(s,a)θlogπθ(s,a)r=Eπθ[θlogπθ(s,a)r]

2)多条DMP轨迹的Policy Gradient推导

下面介绍在多条 MDP 轨迹的情况,假设一个状态轨迹如下表示:
τ = ( s 0 , a 0 , r 1 , … , s T − 1 , a T − 1 , r T , s T )    ~    ( π θ , P ( s t + 1 ∣ s t , a t ) ) \tau = (s_0, a_0, r_1,\ldots,s_{T-1}, a_{T-1}, r_T, s_T)\;~\;(\pi_\theta,P(s_{t+1}|s_t, a_t)) τ=(s0,a0,r1,,sT1,aT1,rT,sT)(πθ,P(st+1st,at))

这里把按照策略 π θ \pi_\theta πθ 的状态轨迹表示为概率 P 的形式

一条轨迹下所获得的奖励之和表示为: R ( τ ) = ∑ t = 0 T R ( s t , a t ) R(\tau) = \sum_{t=0}^TR(s_t, a_t) R(τ)=t=0TR(st,at) 。那么轨迹的奖励期望就是优化目标。还可以把获得的奖励写成加和的形式:如果能表示出每条轨迹发生的概率 P ( τ ; θ ) P(\tau;\theta) P(τ;θ),那么每条轨迹的奖励期望就等于轨迹获得奖励乘以对应轨迹发生的概率
J ( θ ) = E π θ [ ∑ t = 0 T R ( s t , a t ) ] = ∑ τ P ( τ ; θ ) R ( τ ) J(\theta) = E_{\pi_\theta}\left[\sum_{t=0}^TR(s_t, a_t)\right] = \sum_\tau P(\tau;\theta)R(\tau) J(θ)=Eπθ[t=0TR(st,at)]=τP(τ;θ)R(τ)
此时的最优参数 θ ∗ \theta^* θ 可以表示为:
θ ∗ = a r g    m a x θ J ( θ ) = a r g    m a x ∑ τ P ( τ ; θ ) R ( τ ) \theta^* = arg\;max_\theta J(\theta) = arg\;max \sum_\tau P(\tau;\theta)R(\tau) θ=argmaxθJ(θ)=argmaxτP(τ;θ)R(τ)
下面就来求导 J ( θ ) J(\theta) J(θ)
∇ θ J ( θ ) = ∇ θ ∑ τ P ( τ ; θ ) R ( τ ) = ∑ τ P ( τ ; θ ) ∇ θ ( τ ; θ ) P ( τ ; θ ) R ( τ ) = ∑ τ P ( τ ; θ ) ∇ θ l o g    P ( τ ; θ ) ⋅ R ( τ ) \begin{aligned} \nabla_\theta J(\theta) & = \nabla_\theta \sum_\tau P(\tau;\theta)R(\tau) \\ & = \sum_\tau P(\tau;\theta)\frac{\nabla_\theta(\tau;\theta)}{P{(\tau;\theta)}} R(\tau) \\ & = \sum_\tau P(\tau;\theta) \nabla_\theta log\;P(\tau;\theta) \cdot R(\tau) \end{aligned} θJ(θ)=θτP(τ;θ)R(τ)=τP(τ;θ)P(τ;θ)θ(τ;θ)R(τ)=τP(τ;θ)θlogP(τ;θ)R(τ)
这里 ∇ θ J ( θ ) \nabla_\theta J(\theta) θJ(θ) 是基于轨迹来表示的,其实轨迹 τ \tau τ 的分布是不知道的。所以可以采用 MC 采样的方法来近似表示,假如采集到 m 条轨迹,那么就可以把这 m 条奖励和取平均,就得到对优化目标的近似求导结果:
∇ θ J ( θ ) ≈ 1 m ∑ i = 1 m R ( τ i )    ∇ θ l o g    P ( τ i ; θ ) \color{red}\nabla_\theta J(\theta) \approx \frac{1}{m}\sum_{i=1}^mR(\tau_i)\;\nabla_\theta log\;P(\tau_i;\theta) θJ(θ)m1i=1mR(τi)θlogP(τi;θ)
那一条轨迹发生的概率 P ( τ ; θ ) P(\tau;\theta) P(τ;θ) 如何表示呢?若一条轨迹图如下所示,可以看到就是是一系列的概率连乘,(注意,图中下标从 1 开始,而下面公式下标从 0 开始)
UxSJb9.png

那么 P ( τ ; θ ) P(\tau;\theta) P(τ;θ) 就可以表示为:
P ( τ ; θ ) = μ ( s 0 ) ∏ t = 0 T − 1 π θ ( a t ∣ s t ) ⋅ p ( s t + 1 ∣ s t , a t ) P(\tau;\theta) = \mu(s_0) \prod_{t=0}^{T-1}\pi_\theta(a_t|s_t)\cdot p(s_{t+1}|s_t,a_t) P(τ;θ)=μ(s0)t=0T1πθ(atst)p(st+1st,at)
现在就把 ∇ θ J ( θ ) \nabla_\theta J(\theta) θJ(θ) 中的将轨迹分解为状态和动作:
∇ θ l o g    P ( τ i ; θ ) = ∇ θ l o g [ P ( τ ; θ ) = μ ( s 0 ) ∏ t = 0 T − 1 π θ ( a t ∣ s t ) ⋅ p ( s t + 1 ∣ s t , a t ) ] = ∇ θ [ l o g    μ ( s 0 ) + ∑ t = 0 T − 1 l o g    π θ ( a t ∣ s t ) + ∑ t = 0 T − 1 l o g    p ( s t + 1 ∣ s t , a t ) ] = ∑ t = 0 T − 1 ∇ θ    l o g    π θ ( a t ∣ s t ) \begin{aligned} \nabla_\theta log\;P(\tau_i;\theta) & = \nabla_\theta log\left[P(\tau;\theta) = \mu(s_0) \prod_{t=0}^{T-1}\pi_\theta(a_t|s_t)\cdot p(s_{t+1}|s_t,a_t) \right] \\ & = \nabla_\theta\left[log\;\mu(s_0) + \sum_{t=0}^{T-1}log\;\pi_\theta(a_t|s_t) + \sum_{t=0}^{T-1}log\;p(s_{t+1}|s_t,a_t) \right] \\ & = \sum_{t=0}^{T-1}\nabla_\theta\;log\;\pi_\theta(a_t|s_t) \end{aligned} θlogP(τi;θ)=θlog[P(τ;θ)=μ(s0)t=0T1πθ(atst)p(st+1st,at)]=θ[logμ(s0)+t=0T1logπθ(atst)+t=0T1logp(st+1st,at)]=t=0T1θlogπθ(atst)
对于一连串的连乘形式,把 log 放进去就会变成连加的形式,在上面式子中,只有中间一项和 参数 θ \theta θ 有关,使得最终结果大大简化。这也是为何使用 likelihood ratio 的原因,这样就可以消去很多无关的变量。然后就得到了优化目标的最终求导结果:
∇ θ J ( θ ) ≈ 1 m ∑ i = 1 m R ( τ i )    ∑ t = 0 T − 1 ∇ θ    l o g    π θ ( a t i ∣ s t i ) \color{red}\nabla_\theta J(\theta) \approx \frac{1}{m}\sum_{i=1}^mR(\tau_i)\;\sum_{t=0}^{T-1}\nabla_\theta\;log\;\pi_\theta(a_t^i|s_t^i) θJ(θ)m1i=1mR(τi)t=0T1θlogπθ(atisti)

对于当前的目标函数梯度,是基于MC采样得到的,会有比较高的方差 ,下一篇文章将会介绍两种减小方差的方法,以及 Policy Gradient 基础的 REINFORCE 算法。

  • 12
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
强化学习中的策略梯度(policy gradient)是一种基于优化策略的方法,它直接对策略进行优化,而不是先估计值函数,再通过值函数来优化策略。策略梯度方法可以解决连续动作空间的问题,并且可以处理高维状态空间的问题。 策略梯度方法的主要思想是通过梯度上升来优化策略,即不断地调整策略参数,使得策略获得更高的奖励。这个过程可以通过计算策略在当前状态下采取各个动作的概率,然后根据奖励函数来更新策略参数。 策略梯度方法的优点是可以处理连续动作空间和高维状态空间的问题,并且可以处理非凸、非线性的问题。但是,策略梯度方法的缺点是收敛速度慢,容易陷入局部最优解。 以下是一些关于RL-Policy Gradient的资料: 1. Reinforcement Learning: An Introduction(强化学习:导论)书籍中关于Policy Gradient的章节:https://web.stanford.edu/class/psych209/Readings/SuttonBartoIPRLBook2ndEd.pdf 2. Policy Gradient Methods for Reinforcement Learning with Function Approximation论文:https://papers.nips.cc/paper/1713-policy-gradient-methods-for-reinforcement-learning-with-function-approximation.pdf 3. Deep Reinforcement Learning: Pong from Pixels论文:https://arxiv.org/pdf/1312.5602.pdf 4. Policy Gradient Methods for Robotics论文:https://arxiv.org/pdf/1709.06009.pdf 5. RL-Adventure-2:Policy Gradient Algorithms Pytorch实现的代码:https://github.com/higgsfield/RL-Adventure-2 6. Policy Gradient Algorithms笔记:https://lilianweng.github.io/lil-log/2018/04/08/policy-gradient-algorithms.html
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值