本文档记录了一些国内外大学关于 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 | 对值函数进行估计 | 对策略进行估计 |
简介
- 值函数估计,如 Q-Learning、Sarsa 等,可以学到一个近似确定的策略,但是收敛速度会比较慢。
policy gradient 是自然语言处理领域应用较多的一种强化学习方法,它的优化目标为给定策略 πθ(a|s) ,找出最合适的 θ 。
评价策略 πθ :
J(θ)=∫Sμ(s)Vπ(θ)(s)ds=∫Sdπθ(s)∫Aπ(a|s)R(s,a)dads其中 dπ(θ) 为策略 π(θ) 平稳分布。
参数更新:
θπ′=θπ+αdJ(θ)dθ|θ=θπ
与理论上可以达到最优策略的值函数估计相比,policy gradient 常常得到的是
局部极小值
。
Policy Gradient Methods
Finite Difference Methods (FD)
特点
- black-box
- 简单
- 易受噪音干扰
- 效率较低
- 即使策略不可微分也适用
主要思想:对目标函数参数 θ 各个维度分别求偏导
- uk :第 k 维为 1 的单位向量
ϵ :步长更新策略:
Δθk=ϵukΔJk=∂J(θ)θk≈J(θ+ϵuk)−J(θ)ϵgFD=(ΔΘ⊤ΔΘ)−1ΔΘ⊤ΔJ
Likelihood Ratio Methods
特点
- white-box
- 加入探索(随机因素)的策略
- 充分利用策略的相关知识
- 假设策略梯度已知
主要思想:基于已知的策略梯度进行计算
τ 是什么???一条采样轨迹???
策略的目标函数(评价策略):
J(θ)=∫?pθ(τ|π)R(τ)dτ目标函数的梯度:
∇θJ(θ)=∇θ∫?pθ(τ|π)R(τ)dτ=∫?∇θpθ(τ|π)R(τ)dτ其中:
∇θpθ(τ|π)=pθ(τ|π)∇θlogpθ(τ|π)代入,有:
∇θJ(θ)=∫?pθ(τ|π)∇θlogpθ(τ|π)R(τ)dτ=?[∇θlogpθ(τ|π)R(τ)]≈1K∑k=1K∇θlogpθ(τk|π)R(τk)得到上式,可以发现只要通过采样就能够计算出目标函数的梯度了。对于采样得到的轨迹 τ 的概率 pθ(τ) ,有:
pθ(τ)=μ(s1)∏t=1TP(st+1|st,at)πθ(at|st)对上式取对数,由于 μ(s1) 和 P(st+1|st,at) 是确定的,可以得到:
logpθ(τ)=∑t=1Tlogπθ(at|st)+const求导可得:
∇θlogpθ(τ)=∑t=1T∇θlogπθ(at|st)
Characteristics Eligibility:在之前采样轨迹的梯度的基础上形式化定义如下:
∇θlogπθ(a|s)Softmax Policy
对状态-动作对定义了特征向量 ϕ(s,a) ,对应的策略为 πθ(s,a)∝eϕ(s,a)⊤θ ,有:
∇θlogπθ(a|s)=ϕ(s,a)−?πθ[ϕ(s,⋅)]高斯策略
用于
连续动作空间
,定义了状态的特征向量 ϕ(s) ,方差可以是固定值也可以是参数化的,如固定为 σ2 ,则动作满足所定义的高斯分布 a∼(μ(s),σ) ,有:∇θlogπθ(a|s)=(a−μ(s))ϕ(s)σ2
Policy Gradients Theorem
One-Step MDPs
回到最初定义如何评价策略 πθ 的地方,将其从连续动作、连续状态空间替换为离散的,并加入约束条件:
- s∼d(⋅) :初始状态即为稳态
- 在一个 time-step 之后结束,奖励为: r=R(s,a)
在这样的 One-Step MDPs 中,策略的目标函数为:
J(θ)=?πθ[r]=∑Sd(s)∑Aπθ(a|s)R(s,a)与之前求导方式类似,能够得到 One-Steps MDPs 目标函数的梯度:
∇θJ(θ)=?[∇θlogπθ(a|s)r]Multi-Steps MDPs
将 One-Step MDPs 中立即反馈的奖赏更改为长期的值函数 Qπ(s,a)
Policy Gradients Theorem
对于任何
可微分
策略 πθ(a,s) ,其任何目标函数 JJ=J1 - J=JavR ???
- J=11−γJavV ???
对应的策略梯度为:
∇θJ(θ)=?πθ[∇θlogπθ(a|s)Qπθ(s,a)]
Monte-Carlo Policy Gradient
-
vt
:对
Qπθ
的无偏
采样
算法
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
根据如下公式对参数进行更新:
θ←θ+α∇θlogπθ(at|st)vt存在问题
- 不稳定,方差过大
Actor-Critic Policy Gradient
特点
为了解决 MCPG 中方差过大的问题,引入 critic 对状态-动作对值函数进行近似估计
Qw(s,a)≈Qπθw(s,a)参数集合
- critic 评估:更新状态-动作值函数参数 w
- actor (所选的)效果提升:在 critic 建议的方向上更新策略参数
θ
基于状态-动作对 critic 的 actor-critic 算法
- 主要思想:借助时序差分的思想,状态-动作对值函数为特征向量的线性组合(与 softmax policy 类似) Qw(s,a)=ϕ(s,a)⊤w
算法:
个人感觉比较像值函数估计中的异策略算法 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 的更新函数分别如下:
δ=r+γQw(s′,a′)−Qw(s,a) θ=θ+α∇θlogπθ(s,a)Qw(s,a)w=w+αδπ(s,a)
Compatible Function Approximation
Action-Critic 算法虽然能够解决 MCPG 方差过大的问题,但对策略的估计依然是有偏的,需要借助于
准确的
policy gradient 选择合适的动作值函数
来解决这一问题。Compatible Function Approximation Theorem
约束条件 1:值函数的近似与策略
兼容
(???梯度相等叫兼容)∇wQw(s,a)=∇θlogπθ(a|s)约束条件 2:借助于参数 w 能够最小化近似值函数与策略对应真实的值函数之间的均方误差
ϵ=?πθ[(Qπθ(s,a)−Qw(s,a))2]
满足以上两个约束条件时,通过对 ϵ 求导在极值点可得 Action-Critic 的策略梯度为:
∇θ≈?πθ[∇θlogπθ(a|s)Qw(s,a)]
Advantage Function Critic
Action-Critic 中另一种解决方差过大的方法是引入 baseline function,该函数不改变原目标函数梯度,即:
?πθ[∇θlogπθ(s,a)B(s)]=∑s∈Sdπθ(s)∑a∇θπθ(s,a)B(s)=∑s∈Sdπθ(s)B(s)∑a∇θπθ(s,a)=0可以将状态值函数 Vπθ(s) 作为 baseline function,则策略梯度改写为:
∇θJ(θ)=?πθ[∇θlogπθ(a|s)(Qπθ(s,a)−Vπθ(s))]其中 Aπθ(s,a)=Qπθ(s,a)−Vπθ(s) 称为 Advantage Function,此时如果希望能够得到准确的策略梯度,不仅需要对状态-动作对值函数 Qπθ(s,a) 进行指导,同时需要引入对状态值函数的指导参数 v ,可以得到 Advantage Function 的近似估计:
A(s,a)=Qw(s,a)−Vv(s) 类似于之前仅依赖于 Q 的模型一样借助
时序差分学习
的思想对两个值函数进行更新,对应的误差为:δπθ=r+γVπθ(s′)−Vπθ(s) 该误差的期望为:
?πθ[δπθ|s,a]=?πθ[r+γVπθ(s′)]−Vπθ(s)=Qπθ(s,a)−Vπθ(s)可以看出在时序差分学习中误差的期望即为 Advantage Function,所以也可以将策略梯度写为 ∇θJ(θ)=?πθ[∇θlogπθ(a|s)δπθ] ,由于 δπθ 仅与状态值函数 Vπθ 相关,所以实际上只要对通过 v 进行指导即可。
原文中认为可以直接将时序差分学习误差作为策略梯度
不同时间范围内各种 Critic 方法的参数更新
Monte-Carlo 采样:利用对
Qπθ 的无偏采样
vtΔθ=α(vt−Vv(st))∇θlogπθ(at|st)TD(0),即 One-Step MDPs:依赖时序差分的中下一时刻的状态 st+1
Δθ=α(r+γVv(st+1)−Vv(st))∇θlogπθ(at|st)《Reinforcement Learning: An Introduction》中指出 forward-view 和 backward-view TD( λ ) 本质是相同的
forward-view TD( λ ):Multi-Steps MDPs, λ∈[0,1] , vλt=(1−λ)∑∞n=1λn−1vnt
Δθ=α(vλt−Vv(st))∇θlogπθ(at|st)backward-view TD( λ )
Δθ=αδet其中:
- Eligibility traces: et+1=λet+∇θlogπθ(a|s)
- δ=r+γVv(st+1)−Vv(st)
与 forward-view 相比,backward-view 不需要用到完整的轨迹信息,所以感觉在序列生成任务上比较适用。
Natural Policy Gradient
Natural Policy Gradient 通过一个微小的固定量改变策略,找到最接近 vanilla gradient 的梯度方向(文中特指了梯度上升方向)。
∇̃ θJ(θ)=G−1(θ)∇θJ(θ)其中 G(θ) 为 Fisher 信息矩阵:
G(θ)=?πθ[∇θlogπθ(a|s)∇θlogπθ(a|s)⊤]基于 Compatible Function Approximation,可以设近似状态-动作值函数 Qw(s,a) ,有:
∇wQw(s,a)=∇θlogπθ(a|s)策略梯度的目标函数可表示为:
∇θJ(θ)=?πθ[∇θlogπθ(a|s)Qπθ(s,a)]=?[∇θlogπθ(a|s)∇θlogπθ(a|s)⊤w]=G(θ)w对应的 Natural Policy Gradient 即为 w ,这样参数更新就简化为了仅依赖于指导参数:
θt+1=θt+αtwt 总结
本文包含了各种 Policy Gradient 算法策略梯度更新的公式,整理如下:
- REINFORCE: ?πθ[∇θlogπθ(a|s)vt
- Q Actor-Critic: ?πθ[∇θlogπθ(a|s)Qw(s,a)
- Advantage Actor-Critic: ?πθ[∇θlogπθ(a|s)Aw(s,a)
- TD Actor-Critic: ?πθ[∇θlogπθ(a|s)δ
- TD( λ ) Actor-Critic: ?πθ[∇θlogπθ(a|s)δe
- Natural Actor-Critic: G−1(θ)∇θJ(θ)