基础算法篇(五),Policy Based方法解决强化学习问题

我们前面几章介绍的方法中,无论是动态规划(DP)、蒙特卡洛(MC)、时序差分(TD)、或者值函数逼近方法(DQN、Double DQN、Dueling DQN、Prioritized Replay DQN)等,都是先计算出状态价值或状态-行为值,然后再用贪婪法等选择“行为”,这些方法统称为Value Based的方法。
那么,有没有办法直接去求出行为呢?下面,我们就带大家进入Policy Based方法的大家庭。

基本思路

首先,让我们先回顾一下强化学习的基本过程:
在这里插入图片描述
强化学习基本概念小结中我们讲过,可以将一次完整的强化学习过程描述为一个MDP(马尔科夫决策过程),其中每一步都由 ( s i , a i , s i + 1 ) \left(s_i,a_i,s_{i+1}\right) (si,ai,si+1)组成,那整个过程就可以用 τ = ( s 1 , a 1 , s 2 , a 2 , s 3 , ⋯   , s T , a T , s T + 1 ) \tau=\left(s_1,a_1,s_2,a_2,s_3,\cdots,s_T,a_T,s_{T+1}\right) τ=(s1,a1,s2,a2,s3,,sT,aT,sT+1) 来表示,这个 τ \tau τ称为轨迹序列。
其中,Agent根据环境状态 s s s,选择动作 a a a的条件概率,可表示为:

  • π ( a ∣ s ) = P ( a t = a ∣ s t = s ) \pi\left(a\left|s\right.\right)=P\left(a_t=a\left|s_t=s\right.\right) π(as)=P(at=ast=s)

我们Policy Based方法的基本思路,就是用一种方式去近似表示 π ( a ∣ s ) \pi\left(a\left|s\right.\right) π(as),这一思路与我们在值函数逼近方法中介绍的思路其实是一致的,我们在这里也使用带参数逼近法,如下:

  • π ( a ∣ s ) ≈ π θ ( a ∣ s ) = P ( a ∣ s ; θ ) \pi\left(a\left|s\right.\right)\approx\pi_\theta\left(a\left|s\right.\right)=P\left(a\left|s\right.;\theta\right) π(as)πθ(as)=P(as;θ)

与值函数逼近方法一样,用深度神经网络来拟合也是现在最普遍的方法,而这里的 θ \theta θ代表的就是网络的权重。

策略梯度推导

强化学习的目标,就是最大化收益。由于在强化学习中每一步都会产生一个环境奖励 r t r_t rt,那么,一次强化学习的总收益就可以写为:

  • R ( τ ) = ∑ t = 1 T r t R\left(\tau\right)=\sum_{t=1}^Tr_t R(τ)=t=1Trt

但是,由于一次强化学习的收益实质上是一个随机值,对于随机值我们是无法进行优化的,但我们可以去优化收益的期望值,即:

  • J ( θ ) = ∑ τ P ( τ ; θ ) R ( τ ) = E τ ∼ P ( τ ; θ ) [ R ( τ ) ] J\left(\theta\right)=\sum_\tau P\left(\tau;\theta\right)R\left(\tau\right)=E_{\tau\sim P\left(\tau;\theta\right)}\left[R\left(\tau\right)\right] J(θ)=τP(τ;θ)R(τ)=EτP(τ;θ)[R(τ)]

其中 P ( τ ; θ ) P\left(\tau;\theta\right) P(τ;θ)为轨迹序列 τ \tau τ出现的概率。可表示为如下形式:

  • P ( τ ; θ ) = P ( s 1 , a 1 , s 2 , a 2 , s 3 , ⋯   , s T , a T , s T + 1 ; θ ) = P ( s 1 ) π θ ( a 1 ∣ s 1 ) P ( s 2 ∣ s 1 , a 1 ) π θ ( a 2 ∣ s 2 ) P ( s 3 ∣ s 2 , a 2 ) ⋯ = P ( s 1 ) ∏ t = 1 T π θ ( a t ∣ s t ) P ( s t + 1 ∣ s t , a t ) P\left(\tau;\theta\right)=P\left(s_1,a_1,s_2,a_2,s_3,\cdots,s_T,a_T,s_{T+1};\theta\right)\\=P\left(s_1\right)\pi_\theta\left(a_1\left|s_1\right.\right)P\left(s_2\left|s_1\right.,a_1\right)\pi_\theta\left(a_2\left|s_2\right.\right)P\left(s_3\left|s_2\right.,a_2\right)\cdots\\=P\left(s_1\right)\prod_{t=1}^T\pi_\theta\left(a_t\left|s_t\right.\right)P\left(s_{t+1}\left|s_t\right.,a_t\right) P(τ;θ)=P(s1,a1,s2,a2,s3,,sT,aT,sT+1;θ)=P(s1)πθ(a1s1)P(s2s1,a1)πθ(a2s2)P(s3s2,a2)=P(s1)t=1Tπθ(atst)P(st+1st,at)

其中 P ( s 1 ) P\left(s_1\right) P(s1) P ( s t + 1 ∣ s t , a t ) P\left(s_{t+1}\left|s_t\right.,a_t\right) P(st+1st,at)由环境决定。对于带参数的收益期望值,我们可以根据如下公式优化参数 θ \theta θ,以使收益的期望值最终收敛到最大:

  • θ ← θ + α ∇ J ( θ ) \theta\leftarrow\theta+\alpha\nabla J\left(\theta\right) θθ+αJ(θ)

其中 α \alpha α是参数, ∇ J ( θ ) \nabla J\left(\theta\right) J(θ)是对 J ( θ ) J\left(\theta\right) J(θ)求偏导,这个公式也称为梯度上升。那么,这个梯度如何来求呢?我们可以回忆一下蒙特卡洛法,即“通过随机抽样的方法,以抽样的数字特征估算随机变量的数字特征”,因此,我们对 ∇ J ( θ ) \nabla J\left(\theta\right) J(θ)做如下变换:

  • ∇ J ( θ ) = ∑ τ R ( τ ) ∇ P ( τ ; θ )                    = ∑ τ R ( τ ) P ( τ ; θ ) ∇ P ( τ ; θ ) P ( τ ; θ )                    = ∑ τ P ( τ ; θ ) R ( τ ) ∇ log ⁡ P ( τ ; θ )                    = E τ ∼ P ( τ ; θ ) [ R ( τ ) ∇ log ⁡ P ( τ ; θ ) ] \nabla J\left(\theta\right)=\sum_\tau R\left(\tau\right)\nabla P\left(\tau;\theta\right)\\\;\;\;\;\;\;\;\;\;=\sum_\tau R\left(\tau\right)P\left(\tau;\theta\right)\frac{\nabla P\left(\tau;\theta\right)}{P\left(\tau;\theta\right)}\\\;\;\;\;\;\;\;\;\;=\sum_\tau P\left(\tau;\theta\right)R\left(\tau\right)\nabla\log P\left(\tau;\theta\right)\\\;\;\;\;\;\;\;\;\;=E_{\tau\sim P\left(\tau;\theta\right)}\left[R\left(\tau\right)\nabla\log P\left(\tau;\theta\right)\right] J(θ)=τR(τ)P(τ;θ)=τR(τ)P(τ;θ)P(τ;θ)P(τ;θ)=τP(τ;θ)R(τ)logP(τ;θ)=EτP(τ;θ)[R(τ)logP(τ;θ)]

对于 log ⁡ P ( τ ; θ ) \log P\left(\tau;\theta\right) logP(τ;θ),我们可以将前面的 P ( τ ; θ ) P\left(\tau;\theta\right) P(τ;θ)代入,得到下式:

  • log ⁡ [ P ( τ ; θ ) ] = log ⁡ [ P ( s 1 ) ∏ t = 1 T π θ ( a t ∣ s t ) P ( s t + 1 ∣ s t , a t ) ] = log ⁡ P ( s 1 ) + ∑ t = 1 T log ⁡ π θ ( a t ∣ s t ) + ∑ t = 1 T log ⁡ P ( s t + 1 ∣ s t , a t ) \log\left[P\left(\tau;\theta\right)\right]=\log\left[P\left(s_1\right)\prod_{t=1}^T\pi_\theta\left(a_t\left|s_t\right.\right)P\left(s_{t+1}\left|s_t\right.,a_t\right)\right]\\=\log P\left(s_1\right)+\sum_{t=1}^T\log\pi_\theta\left(a_t\left|s_t\right.\right)+\sum_{t=1}^T\log P\left(s_{t+1}\left|s_t\right.,a_t\right) log[P(τ;θ)]=log[P(s1)t=1Tπθ(atst)P(st+1st,at)]=logP(s1)+t=1Tlogπθ(atst)+t=1TlogP(st+1st,at)

然后,再对 log ⁡ P ( τ ; θ ) \log P\left(\tau;\theta\right) logP(τ;θ)求偏导,上式中的第一项 ∇ log ⁡ P ( s 1 ) = 0 \nabla\log P\left(s_1\right)=0 logP(s1)=0,且第三项 ∇ ∑ t = 1 T log ⁡ P ( s t + 1 ∣ s t , a t ) = 0 \overset T{\underset{t=1}{\nabla\sum}}\log P\left(s_{t+1}\left|s_t\right.,a_t\right)=0 t=1TlogP(st+1st,at)=0,可得到:

  • ∇ log ⁡ P ( τ ; θ ) = ∑ t = 1 T ∇ log ⁡ π θ ( a t ∣ s t ) \nabla\log P\left(\tau;\theta\right)=\sum_{t=1}^T\nabla\log\pi_\theta\left(a_t\left|s_t\right.\right) logP(τ;θ)=t=1Tlogπθ(atst)

那么,根据上面的式子,就可以得到 ∇ J ( θ ) \nabla J\left(\theta\right) J(θ)为:

  • ∇ J ( θ ) = E τ ∼ P ( τ ; θ ) [ R ( τ ) ∇ log ⁡ P ( τ ; θ ) ]                  = E τ ∼ P ( τ ; θ ) [ R ( τ ) ∑ t = 1 T ∇ log ⁡ π θ ( a t ∣ s t ) ] \nabla J\left(\theta\right)=E_{\tau\sim P\left(\tau;\theta\right)}\left[R\left(\tau\right)\nabla\log P\left(\tau;\theta\right)\right]\\\;\;\;\;\;\;\;\;=E_{\tau\sim P\left(\tau;\theta\right)}\left[R\left(\tau\right)\sum_{t=1}^T\nabla\log\pi_\theta\left(a_t\left|s_t\right.\right)\right] J(θ)=EτP(τ;θ)[R(τ)logP(τ;θ)]=EτP(τ;θ)[R(τ)t=1Tlogπθ(atst)]

上式就可以使用经验平均法对其进行估算,假设我们构建一个样本库 D D D,其中保存了 N = ∣ D ∣ N=\left|D\right| N=D个样本,那么我们的 ∇ J ( θ ) \nabla J\left(\theta\right) J(θ)就可以使用下式进行近似:

  • ∇ J ( θ ) ≈ 1 ∣ D ∣ ∑ τ ∈ D R ( τ ) ∑ t = 1 T ∇ log ⁡ π θ ( a t ∣ s t ) \nabla J\left(\theta\right)\approx\frac1{\left|D\right|}\sum_{\tau\in D}R\left(\tau\right)\sum_{t=1}^T\nabla\log\pi_\theta\left(a_t\left|s_t\right.\right) J(θ)D1τDR(τ)t=1Tlogπθ(atst)

之后,我们再做一个转换处理,对于每个 τ \tau τ的损失函数,我们加一个负号,变为:

  • − R ( τ ) ∑ t = 1 T log ⁡ π θ ( a t ∣ s t ) -R\left(\tau\right)\sum_{t=1}^T\log\pi_\theta\left(a_t\left|s_t\right.\right) R(τ)t=1Tlogπθ(atst)

这样,就可以将GA(梯度上升)改为GD(梯度下降),然后使用SGD方法对参数 θ \theta θ进行更新,并最终实现最大化收益的期望值。

几个小技巧

在上面经典的策略梯度算法在实现时,可能会遇到一些问题,需要使用到以下一些小技巧。其中包括:

  1. 添加基线,以避免收益都是正的,无法实现对不好策略的剔除:

在这里插入图片描述

  1. 改变每个策略收益的计算方式,以体现其真正对收益的影响:

在这里插入图片描述
以上两幅图都是节选自李宏毅老师的课件中,在这里表示对李宏毅老师的感谢,同时推荐大家都去B站看一下“李宏毅深度强化学习(国语)课程”,一定受益匪浅。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值