本文档记录了一些国内外大学关于 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
)
d
s
=
∫
S
d
π
θ
(
s
)
∫
A
π
(
a
|
s
)
R
(
s
,
a
)
d
a
d
s
其中
d
π
(
θ
)
为策略
π
(
θ
)
平稳分布。 -
参数更新:
θ
π
′
=
θ
π
+
α
d
J
(
θ
)
d
θ
|
θ
=
θ
π
-
-
与理论上可以达到最优策略的值函数估计相比,policy gradient 常常得到的是
局部极小值
。
Policy Gradient Methods
Finite Difference Methods (FD)
-
特点
- black-box
- 简单
- 易受噪音干扰
- 效率较低
- 即使策略不可微分也适用
-
主要思想:对目标函数参数
θ
各个维度分别求偏导-
u
k
:第
k
维为 1 的单位向量 -
ϵ
:步长 -
更新策略:
Δ
θ
k
=
ϵ
u
k
Δ
J
k
=
∂
J
(
θ
)
θ
k
≈
J
(
θ
+
ϵ
u
k
)
−
J
(
θ
)
ϵ
g
F
D
=
(
Δ
Θ
⊤
Δ
Θ
)
−
1
Δ
Θ
⊤
Δ
J
-
Likelihood Ratio Methods
-
特点
- white-box
- 加入探索(随机因素)的策略
- 充分利用策略的相关知识
- 假设策略梯度已知
-
主要思想:基于已知的策略梯度进行计算
τ
是什么???一条采样轨迹???-
策略的目标函数(评价策略):
J
(
θ
)
=
∫
?
p
θ
(
τ
|
π
)
R
(
τ
)
d
τ
-
目标函数的梯度:
∇
θ
J
(
θ
)
=
∇
θ
∫
?
p
θ
(
τ
|
π
)
R
(
τ
)
d
τ
=
∫
?
∇
θ
p
θ
(
τ
|
π
)
R
(
τ
)
d
τ
其中:
∇
θ
p
θ
(
τ
|
π
)
=
p
θ
(
τ
|
π
)
∇
θ
log
p
θ
(
τ
|
π
)
代入,有:
∇
θ
J
(
θ
)
=
∫
?
p
θ
(
τ
|
π
)
∇
θ
log
p
θ
(
τ
|
π
)
R
(
τ
)
d
τ
=
?
[
∇
θ
log
p
θ
(
τ
|
π
)
R
(
τ
)
]
≈
1
K
∑
k
=
1
K
∇
θ
log
p
θ
(
τ
k
|
π
)
R
(
τ
k
)
得到上式,可以发现只要通过采样就能够计算出目标函数的梯度了。对于采样得到的轨迹
τ
的概率
p
θ
(
τ
)
,有:
p
θ
(
τ
)
=
μ
(
s
1
)
∏
t
=
1
T
P
(
s
t
+
1
|
s
t
,
a
t
)
π
θ
(
a
t
|
s
t
)
对上式取对数,由于
μ
(
s
1
)
和
P
(
s
t
+
1
|
s
t
,
a
t
)
是确定的,可以得到:
log
p
θ
(
τ
)
=
∑
t
=
1
T
log
π
θ
(
a
t
|
s
t
)
+
const
求导可得:
∇
θ
log
p
θ
(
τ
)
=
∑
t
=
1
T
∇
θ
log
π
θ
(
a
t
|
s
t
)
-
-
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
]
=
∑
S
d
(
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
)
,其任何目标函数
J
-
J
=
J
1
-
J
=
J
a
v
R
??? -
J
=
1
1
−
γ
J
a
v
V
???
对应的策略梯度为:
∇
θ
J
(
θ
)
=
?
π
θ
[
∇
θ
log
π
θ
(
a
|
s
)
Q
π
θ
(
s
,
a
)
]
-
Monte-Carlo Policy Gradient
-
v
t
:对
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
π
θ
(
a
t
|
s
t
)
v
t
存在问题
- 不稳定,方差过大
Actor-Critic Policy Gradient
-
特点
为了解决 MCPG 中方差过大的问题,引入 critic 对状态-动作对值函数进行近似估计
Q
w
(
s
,
a
)
≈
Q
π
θ
w
(
s
,
a
)
-
参数集合
-
critic 评估:更新状态-动作值函数参数
w
-
actor (所选的)效果提升:在 critic 建议的方向上更新策略参数
θ
-
critic 评估:更新状态-动作值函数参数
基于状态-动作对 critic 的 actor-critic 算法
-
主要思想:借助时序差分的思想,状态-动作对值函数为特征向量的线性组合(与 softmax policy 类似)
Q
w
(
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
+
γ
Q
w
(
s
′
,
a
′
)
−
Q
w
(
s
,
a
)
θ
=
θ
+
α
∇
θ
log
π
θ
(
s
,
a
)
Q
w
(
s
,
a
)
w
=
w
+
α
δ
π
(
s
,
a
)
Compatible Function Approximation
Action-Critic 算法虽然能够解决 MCPG 方差过大的问题,但对策略的估计依然是有偏的,需要借助于
准确的
policy gradient 选择合适的
动作值函数
来解决这一问题。-
Compatible Function Approximation Theorem
-
约束条件 1:值函数的近似与策略
兼容
(???梯度相等叫兼容)
∇
w
Q
w
(
s
,
a
)
=
∇
θ
log
π
θ
(
a
|
s
)
-
约束条件 2:借助于参数
w
能够最小化近似值函数与策略对应真实的值函数之间的均方误差
ϵ
=
?
π
θ
[
(
Q
π
θ
(
s
,
a
)
−
Q
w
(
s
,
a
)
)
2
]
满足以上两个约束条件时,通过对
ϵ
求导在极值点可得 Action-Critic 的策略梯度为:
∇
θ
≈
?
π
θ
[
∇
θ
log
π
θ
(
a
|
s
)
Q
w
(
s
,
a
)
]
-
Advantage Function Critic
Action-Critic 中另一种解决方差过大的方法是引入 baseline function,该函数不改变原目标函数梯度,即:
?
π
θ
[
∇
θ
log
π
θ
(
s
,
a
)
B
(
s
)
]
=
∑
s
∈
S
d
π
θ
(
s
)
∑
a
∇
θ
π
θ
(
s
,
a
)
B
(
s
)
=
∑
s
∈
S
d
π
θ
(
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
)
=
Q
w
(
s
,
a
)
−
V
v
(
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
π
θ
的无偏
采样
v
t
Δ
θ
=
α
(
v
t
−
V
v
(
s
t
)
)
∇
θ
log
π
θ
(
a
t
|
s
t
)
-
TD(0),即 One-Step MDPs:依赖时序差分的中下一时刻的状态
s
t
+
1
Δ
θ
=
α
(
r
+
γ
V
v
(
s
t
+
1
)
−
V
v
(
s
t
)
)
∇
θ
log
π
θ
(
a
t
|
s
t
)
-
《Reinforcement Learning: An Introduction》
中指出 forward-view 和 backward-view TD(
λ
) 本质是相同的-
forward-view TD(
λ
):Multi-Steps MDPs,
λ
∈
[
0
,
1
]
,
v
λ
t
=
(
1
−
λ
)
∑
∞
n
=
1
λ
n
−
1
v
n
t
Δ
θ
=
α
(
v
λ
t
−
V
v
(
s
t
)
)
∇
θ
log
π
θ
(
a
t
|
s
t
)
-
backward-view TD(
λ
)
Δ
θ
=
α
δ
e
t
其中:
-
Eligibility traces:
e
t
+
1
=
λ
e
t
+
∇
θ
log
π
θ
(
a
|
s
)
-
δ
=
r
+
γ
V
v
(
s
t
+
1
)
−
V
v
(
s
t
)
-
Eligibility traces:
与 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,可以设近似状态-动作值函数
Q
w
(
s
,
a
)
,有:
∇
w
Q
w
(
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
+
α
t
w
t
总结
本文包含了各种 Policy Gradient 算法策略梯度更新的公式,整理如下:
-
REINFORCE:
?
π
θ
[
∇
θ
log
π
θ
(
a
|
s
)
v
t
-
Q Actor-Critic:
?
π
θ
[
∇
θ
log
π
θ
(
a
|
s
)
Q
w
(
s
,
a
)
-
Advantage Actor-Critic:
?
π
θ
[
∇
θ
log
π
θ
(
a
|
s
)
A
w
(
s
,
a
)
-
TD Actor-Critic:
?
π
θ
[
∇
θ
log
π
θ
(
a
|
s
)
δ
-
TD(
λ
) Actor-Critic:
?
π
θ
[
∇
θ
log
π
θ
(
a
|
s
)
δ
e
-
Natural Actor-Critic:
G
−
1
(
θ
)
∇
θ
J
(
θ
)
-
-
-