【强化学习】策略梯度-Policy Gradient

0 引言

之前一讲,通过值函数逼近,获得状态值函数或者动作-状态值函数的估计值,然后采用贪婪法获得最优策略。本讲中,直接用函数逼近策略,即
πθ(s,a)=P[a|s,θ]

这样做的优点是:

  • 更好的收敛特性
  • 在高维或者连续动作空间中更加有效
  • 可以学习到随机策略

当然,也有缺点:

  • 通常收敛到一个局部最优解而不是全局最优解
  • 策略评估通常不够高效且具有很大的方差

1 策略梯度

状态重名

策略目标函数
策略梯度法的目标是:给定一个带有参数θ的策略πθ(s,a),寻找最好的参数θ
三类目标函数:
在有始有终的环境中,目标函数为开始状态值函数的期望:
J1(θ)=Vπθ(s1)=Eπθ[v1]


在连续的环境中,利用状态分布求得所有状态值函数的期望:
Jav(θ)=sdπθ(s)Vπθ(s)

平均每步回报
JavR(θ)=sdπθ(s)aπθ(s,a)Ras

其中,dπθ(s)是一个稳定的状态分布。

策略优化
基于策略的强化学习就是一个最优化问题,目标是寻找一个参数θ最大化目标函数。
求解最优化问题,可以使用梯度方法,也可以使用其他方法。在这里,我们使用基于梯度的方法。

定义策略梯度:
ΔθJ(θ)=(J(θ)θ1,,J(θ)θn)T


参数更新:
Δθ=αθJ(θ)

通过有限差分的方式来计算策略梯度:
J(θ)θkJ(θ+ϵuk)J(θ)ϵ


其中,uk是一个单位向量。第k个元素为1,其他元素为0

得分函数Score Function
θπθ(s,a)=πθ(s,a)θπθ(s,a)πθ(s,a)=πθ(s,a)θlogπθ(s,a)


其中,θlogπθ(s,a)为得分函数。
Softmax策略
对于离散的动作空间,可以用Softmax策略来逼近真实的策略,它的输出为采取各个动作的概率。即
πθ(s,a)eϕ(s,a)Tθ

这样,得分函数为:
θlogπθ(s,a)=ϕ(s,a)Eπθ[ϕ(s,)]

Gaussian策略
当动作空间是连续的时候,采用高斯策略更为合理,输出采取各个动作的分布。即
aN(η(s),σ2)

这样,得分函数为:
θlogπθ(s,a)=(aη(s))ϕ(s)σ2

策略梯度定理

定理有了,怎么理解呢?
我们知道,有了策略网络就要进行误差的反向传递,以便进行参数的更新。可是对于PG来讲,只有一段发生过的经历,并不能计算误差。那怎么来更新参数呢?这时候奖励就出场了,在那段经历中,每个动作执行之后,都会出现一个即时奖励。那么就可以根据奖励的情况来更新参数。奖励大的,参数更新就使这个动作更大概率出现,而奖励小的,则会减小出现的概率。

策略梯度公式:
ΔθJ(θ)=Eπθ[θlogπθ(s,a)Qπθ(s,a)]


将求期望的部分可以分成两个子式:

  • 第一部分θlogπθ(s,a),这是一个方向向量,代表了logπθ(s,a)对于参数θ变化最快的方向,参数在这个方向上更新可以增大或者减小logπθ(s,a),也就是增大或者减小(s,a)的概率。

  • 第二部分Qπθ(s,a),状态价值函数,这是一个标量,在策略梯度中扮演着在θlogπθ(s,a)方向上变化幅度的角色。如果Qπθ(s,a)比较大,logπθ(s,a)的参数在这个方向上变化的幅度也比较大,那么(s,a)的概率也会比较大。

所以,对于梯度策略最直观的理解就是增大高回报动作-状态的概率,减小低回报动作-状态的概率。

基于MC的策略梯度
伪代码为:

怎么理解这段代码呢?
首先,随机初始化策略网络的参数。
然后,要准备好一段经历,以备训练。
接着,对经历中的每一步,根据返回的状态价值,进行参数更新。

有两个疑问,一是经历从哪里来?二是状态价值vt怎么计算?

经历的来源:就是利用初始化的策略网络πθ(s),根据初始状态s0,产生初始动作a0,然后执行动作a0,产生新的状态s1和即时奖励r1,最后将s0,a0,r1,s1保存到“记忆”中。如此反复直到遇到终结状态为止,此时便产生了一段经历Episode.

状态价值:v0=r1,vt=rt+1+γvt1

参考文献

[1] David Silver, reinforcement learning lecture 7

显示 Gitment 评论