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

  • Post author:
  • Post category:其他


前面几篇文章

价值函数近似



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]







J










1


















(


θ


)




=









V












π










θ



































(



s










1


















)




=









E












π










θ



































[



v










1


















]







对于那些没有明确初始状态的连续环境,可以优化平均价值:





J

a

v

V

(

θ

)

=

s

d

π

θ

(

s

)

V

π

θ

(

s

)

J_{avV}(\theta) = \sum_sd_{\pi_{\theta}}(s)V_{\pi_\theta}(s)







J











a


v


V



















(


θ


)




=
















s





























d












π











θ




































(


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)







J











a


v


R



















(


θ


)




=
















s





























d












π










θ



































(


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












π










θ



































[














θ




















l


o


g



π










θ


















(


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


)

























θ


















l


o


g



π










θ


















(


s


,




a


)







这里的



θ

l

o

g

π

θ

(

s

,

a

)

\nabla_\theta log\pi_\theta(s,a)


















θ


















l


o


g



π










θ


















(


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


)




=

































a









































e


x



p











ϕ


(


s


,


a



)










T









θ






















e


x



p











ϕ


(


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}




























θ


















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


)
























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)






a









N


(


μ


(


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}




























θ


















l


o


g



π










θ


















(


s


,




a


)















































=
















θ


















l


o


g






[






















2


π
























σ














1




















e


x


p






(

















2



σ










2





















(


a









μ


(


s


)



)










2




























)





]














=
















θ






















[



l


o


g























2


π
























σ














1



























l


o


g




e


x


p






(














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)






s









d


(


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


]




=

















s





S





























d


(


s


)













a





A






























π










θ


















(


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


(


θ


)



































=













s





S





























d


(


s


)













a





A































π










θ


















(


s


,




a


)
















θ


















l


o


g





π











θ



















(


s


,




a


)










r












=





E












π










θ



































[














θ


















l


o


g





π











θ



















(


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))






τ




=








(



s










0


















,





a










0


















,





r










1


















,









,





s











T





1



















,





a











T





1



















,





r










T


















,





s










T


















)









(



π










θ


















,




P


(



s











t


+


1























s










t


















,





a










t


















))





这里把按照策略



π

θ

\pi_\theta







π










θ





















的状态轨迹表示为概率 P 的形式

一条轨迹下所获得的奖励之和表示为:



R

(

τ

)

=

t

=

0

T

R

(

s

t

,

a

t

)

R(\tau) = \sum_{t=0}^TR(s_t, a_t)






R


(


τ


)




=





















t


=


0









T




















R


(



s










t


















,





a










t


















)





。那么

轨迹的奖励期望

就是优化目标。还可以把获得的奖励写成加和的形式:如果能表示出每条轨迹发生的概率



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


=


0


















T



















R


(



s










t


















,





a










t


















)



]






=
















τ




























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)







θ






















=








a


r


g




ma



x










θ


















J


(


θ


)




=








a


r


g




ma


x












τ




























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


(


τ


;




θ


)














θ


















l


o


g




P


(


τ


;




θ


)









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


(


θ


)
























m














1































i


=


1


















m



















R


(



τ










i


















)
















θ


















l


o


g




P


(



τ










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


(


τ


;




θ


)




=








μ


(



s










0


















)













t


=


0



















T





1





















π










θ


















(



a










t






















s










t


















)













p


(



s











t


+


1























s










t


















,





a










t


















)







现在就把



θ

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}




























θ


















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


















)
























对于一连串的连乘形式,把

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


(


θ


)
























m














1































i


=


1


















m



















R


(



τ










i


















)















t


=


0



















T





1
































θ




















l


o


g





π










θ


















(



a










t








i






















s










t








i


















)





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

REINFORCE

算法。



版权声明:本文为november_chopin原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。