本文档记录了一些国内外大学关于 policy gradient 相关内容的介绍及个人总结
* http://home.deib.polimi.it/restelli/MyWebSite/pdf/rl7.pdf
* http://www0.cs.ucl.ac.uk/staff/D.Silver/web/Teaching_files/pg.pdf
* http://lamda.nju.edu.cn/yuy/GetFile.aspx?File=adl-rl/ADL-RL.pdf
* http://mi.eng.cam.ac.uk/~mg436/LectureSlides/MLSALT7/L5.pdf
* https://www.scss.tcd.ie/~luzs/t/cs7032/td-notes.pdf
* http://incompleteideas.net/book/bookdraft2017nov5.pdf
方法 | 值函数 | 策略 |
---|---|---|
Value-based | 对值函数进行估计 | 隐含的 |
Policy-based | 无值函数 | 对策略进行估计 |
Actor-critic | 对值函数进行估计 | 对策略进行估计 |
policy gradient 是自然语言处理领域应用较多的一种强化学习方法,它的优化目标为给定策略 πθ(a|s) ,找出最合适的 θ 。
评价策略 πθ :
其中 dπ(θ) 为策略 π(θ) 平稳分布。
参数更新:
与理论上可以达到最优策略的值函数估计相比,policy gradient 常常得到的是局部极小值
。
特点
主要思想:对目标函数参数 θ 各个维度分别求偏导
更新策略:
特点
主要思想:基于已知的策略梯度进行计算
τ 是什么???一条采样轨迹???
策略的目标函数(评价策略):
目标函数的梯度:
其中:
代入,有:
得到上式,可以发现只要通过采样就能够计算出目标函数的梯度了。对于采样得到的轨迹 τ 的概率 pθ(τ) ,有:
对上式取对数,由于 μ(s1) 和 P(st+1|st,at) 是确定的,可以得到:
求导可得:
Characteristics Eligibility:在之前采样轨迹的梯度的基础上形式化定义如下:
Softmax Policy
对状态-动作对定义了特征向量 ϕ(s,a) ,对应的策略为 πθ(s,a)∝eϕ(s,a)⊤θ ,有:
高斯策略
用于连续动作空间
,定义了状态的特征向量 ϕ(s) ,方差可以是固定值也可以是参数化的,如固定为 σ2 ,则动作满足所定义的高斯分布 a∼(μ(s),σ) ,有:
Policy Gradients Theorem
One-Step MDPs
回到最初定义如何评价策略 πθ 的地方,将其从连续动作、连续状态空间替换为离散的,并加入约束条件:
在这样的 One-Step MDPs 中,策略的目标函数为:
与之前求导方式类似,能够得到 One-Steps MDPs 目标函数的梯度:
Multi-Steps MDPs
将 One-Step MDPs 中立即反馈的奖赏更改为长期的值函数 Qπ(s,a)
Policy Gradients Theorem
对于任何可微分
策略 πθ(a,s) ,其任何目标函数 J
对应的策略梯度为:
采样
def REINFORCE():
theta.init_random()
for all episodes {s[1],a[1],r[2],...,s[T-1],a[T-1],r[T]~pi}:
for t in range(1,T):
theta.update(alpha,pi,a[t],s[t],v[t])
return theta
根据如下公式对参数进行更新:
特点
为了解决 MCPG 中方差过大的问题,引入 critic 对状态-动作对值函数进行近似估计
参数集合
算法:
个人感觉比较像值函数估计中的异策略算法 Q-Learning,发现国内版本(ref:俞扬)和国外的版本不太一样,而且感觉国外版本的有点问题,所以这里参考俞扬老师的版本
def QAC():
theta.init()
state.init()
for all step: # 什么时候停止???
action = pi_epsilon.sample(state)
state_dot, reward = action.do()
action_dot = pi.sample(state_dot)
delta.update(w,reward,state_dot,action_dot,state,action)
theta.update(w,state,action) # 此步更新的是 pi,不是 pi_epsilon
w.update(alpha,delta,state,action)
state = state_dot
action = action_dot
δ 、 θ 和 w 的更新函数分别如下:
Action-Critic 算法虽然能够解决 MCPG 方差过大的问题,但对策略的估计依然是有偏的,需要借助于准确的
policy gradient 选择合适的动作值函数
来解决这一问题。
Compatible Function Approximation Theorem
约束条件 1:值函数的近似与策略兼容
(???梯度相等叫兼容)
约束条件 2:借助于参数 w 能够最小化近似值函数与策略对应真实的值函数之间的均方误差
满足以上两个约束条件时,通过对 ϵ 求导在极值点可得 Action-Critic 的策略梯度为:
Action-Critic 中另一种解决方差过大的方法是引入 baseline function,该函数不改变原目标函数梯度,即:
可以将状态值函数 Vπθ(s) 作为 baseline function,则策略梯度改写为:
其中 Aπθ(s,a)=Qπθ(s,a)−Vπθ(s) 称为 Advantage Function,此时如果希望能够得到准确的策略梯度,不仅需要对状态-动作对值函数 Qπθ(s,a) 进行指导,同时需要引入对状态值函数的指导参数 v ,可以得到 Advantage Function 的近似估计:
类似于之前仅依赖于 Q 的模型一样借助时序差分学习
的思想对两个值函数进行更新,对应的误差为:
该误差的期望为:
可以看出在时序差分学习中误差的期望即为 Advantage Function,所以也可以将策略梯度写为 ∇θJ(θ)=?πθ[∇θlogπθ(a|s)δπθ] ,由于 δπθ 仅与状态值函数 Vπθ 相关,所以实际上只要对通过 v 进行指导即可。
原文中认为可以直接将时序差分学习误差作为策略梯度
Monte-Carlo 采样:利用对 Qπθ 的无偏采样
vt
TD(0),即 One-Step MDPs:依赖时序差分的中下一时刻的状态 st+1
《Reinforcement Learning: An Introduction》中指出 forward-view 和 backward-view TD( λ ) 本质是相同的
forward-view TD( λ ):Multi-Steps MDPs, λ∈[0,1] , vλt=(1−λ)∑∞n=1λn−1vnt
backward-view TD( λ )
其中:
与 forward-view 相比,backward-view 不需要用到完整的轨迹信息,所以感觉在序列生成任务上比较适用。
Natural Policy Gradient 通过一个微小的固定量改变策略,找到最接近 vanilla gradient 的梯度方向(文中特指了梯度上升方向)。
其中 G(θ) 为 Fisher 信息矩阵:
基于 Compatible Function Approximation,可以设近似状态-动作值函数 Qw(s,a) ,有:
策略梯度的目标函数可表示为:
对应的 Natural Policy Gradient 即为 w ,这样参数更新就简化为了仅依赖于指导参数:
本文包含了各种 Policy Gradient 算法策略梯度更新的公式,整理如下: