
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(θ)∂θk≈J(θ+ϵ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策略
当动作空间是连续的时候,采用高斯策略更为合理,输出采取各个动作的分布。即
a∼N(η(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+γvt−1
参考文献
[1] David Silver, reinforcement learning lecture 7