我们前面几章介绍的方法中,无论是动态规划(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) π(a∣s)=P(at=a∣st=s)
我们Policy Based方法的基本思路,就是用一种方式去近似表示 π ( a ∣ s ) \pi\left(a\left|s\right.\right) π(a∣s),这一思路与我们在值函数逼近方法中介绍的思路其实是一致的,我们在这里也使用带参数逼近法,如下:
- π ( 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) π(a∣s)≈πθ(a∣s)=P(a∣s;θ)
与值函数逼近方法一样,用深度神经网络来拟合也是现在最普遍的方法,而这里的 θ \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)πθ(a1∣s1)P(s2∣s1,a1)πθ(a2∣s2)P(s3∣s2,a2)⋯=P(s1)∏t=1Tπθ(at∣st)P(st+1∣st,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+1∣st,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πθ(at∣st)P(st+1∣st,at)]=logP(s1)+∑t=1Tlogπθ(at∣st)+∑t=1TlogP(st+1∣st,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=1∇∑TlogP(st+1∣st,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=1T∇logπθ(at∣st)
那么,根据上面的式子,就可以得到 ∇ 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=1T∇logπθ(at∣st)]
上式就可以使用经验平均法对其进行估算,假设我们构建一个样本库 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(θ)≈∣D∣1∑τ∈DR(τ)∑t=1T∇logπθ(at∣st)
之后,我们再做一个转换处理,对于每个 τ \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πθ(at∣st)
这样,就可以将GA(梯度上升)改为GD(梯度下降),然后使用SGD方法对参数 θ \theta θ进行更新,并最终实现最大化收益的期望值。
几个小技巧
在上面经典的策略梯度算法在实现时,可能会遇到一些问题,需要使用到以下一些小技巧。其中包括:
- 添加基线,以避免收益都是正的,无法实现对不好策略的剔除:
- 改变每个策略收益的计算方式,以体现其真正对收益的影响:
以上两幅图都是节选自李宏毅老师的课件中,在这里表示对李宏毅老师的感谢,同时推荐大家都去B站看一下“李宏毅深度强化学习(国语)课程”,一定受益匪浅。