策略梯度方法介绍——行动者-评论家方法
- 引言
- 回顾:带基线的REINFORCE方法
- 行动者-评论家方法
- 优势函数
- 优势函数与时序差分偏差的关系
- 整理
引言
上一节介绍了带基线的REINFORCE方法,从累积的rewards结果观察,虽然添加基线函数 b ^ ( S t , w ) \hat b(S_t,w) b^(St,w)后收敛速度明显加快,但累积结果波动同样很高。针对该问题,介绍一个与基线函数方法相类似的方法——行动者-评论家方法(Actor-Critic,AC)
回顾:带基线的REINFORCE方法
带基线的REINFORCE方法产生的目的是为了减小REINFORCE算法带来的梯度方差,并且在减小方差的同时,不影响
∇
J
(
θ
)
\nabla \mathcal J(\theta)
∇J(θ)的梯度。具体做法是从回报结果中减掉一个只关于状态
S
t
S_t
St的函数
b
(
S
t
)
b(S_t)
b(St)。数学符号表示如下:
∇
J
(
θ
)
=
E
S
t
∼
ρ
π
θ
;
A
t
∼
π
θ
[
∇
log
π
(
A
t
∣
S
t
;
θ
)
(
G
t
−
b
(
S
t
)
)
]
\nabla \mathcal J(\theta) = \mathbb E_{S_t \sim \rho^{\pi_{\theta}};A_t \sim \pi_{\theta}}[\nabla \log \pi(A_t \mid S_t;\theta)(G_t - b(S_t))]
∇J(θ)=ESt∼ρπθ;At∼πθ[∇logπ(At∣St;θ)(Gt−b(St))]
并且,为了优化基线函数
b
(
S
t
)
b(S_t)
b(St)的效果,使用参数
w
w
w对基线函数进行优化:
b
(
S
t
)
→
b
^
(
S
t
,
w
)
b(S_t) \to \hat b(S_t,w)
b(St)→b^(St,w)
最终参数
θ
\theta
θ的更新过程表示如下:
θ
t
+
1
=
θ
t
+
α
∇
log
π
(
A
t
∣
S
t
;
θ
)
(
G
t
−
b
^
(
S
t
,
w
)
)
\theta_{t+1} = \theta_t + \alpha \nabla \log \pi(A_t \mid S_t;\theta)(G_t - \hat b(S_t,w))
θt+1=θt+α∇logπ(At∣St;θ)(Gt−b^(St,w))
行动者-评论家方法
通过观察带基线的REINFORCE方法中
θ
\theta
θ的迭代过程,我们发现:每一次更新参数
θ
\theta
θ的最小迭代单位至少要遍历一次情节;或者说 至少要计算出回报
G
t
G_t
Gt,才能够更新一次
θ
\theta
θ。
这是毋庸置疑的——我们在时序差分方法介绍中归纳蒙特卡洛方法中介绍过,最小迭代单位就是 一个情节,通过该情节进行增量更新操作。
进一步思考:在策略梯度方法中,我们是否也可以使用时序差分(Temporal-Difference,TD)的方式,即执行一次状态转移后,及时地进行策略改进?
自然是可以的。
行动者-评论家方法就是一种利用了自举(Boostrapping)方法,它将基于策略(policy-based)的方法与基于价值函数(value-based)的方法相结合,在迭代过程中交替学习 价值函数
q
π
θ
(
S
t
,
A
t
)
q_{\pi_{\theta}}(S_t,A_t)
qπθ(St,At)和策略函数
π
(
A
t
∣
S
t
;
θ
)
\pi(A_t \mid S_t;\theta)
π(At∣St;θ),从而实现实时、在线学习。
行动者-评论家方法的执行过程表示如下:
- 根据当前策略当前状态条件 S t S_t St下选择一个动作 A t A_t At;
- 评论家根据当前的状态-动作对
(
S
t
,
A
t
)
(S_t,A_t)
(St,At),针对当前策略进行打分:优势函数
A
π
θ
(
S
t
,
A
t
)
A_{\pi_{\theta}}(S_t,A_t)
Aπθ(St,At);
优势函数下面会介绍 - 通过优势函数 A π θ ( S t , A t ) A_{\pi_{\theta}}(S_t,A_t) Aπθ(St,At),更新策略 π \pi π(更新策略函数中的参数 θ \theta θ);
- 同时,利用优势函数中的奖赏信息,更新优势函数内部的参数 w w w;
- 更新完毕后,根据当前策略在下一状态选择动作 A t + 1 A_{t+1} At+1,重复上述过程;
它的更新方式和带基线REINFORCE参数更新方式相同,都是‘嵌套反向传播过程’
下面具体解释一下什么是优势函数。
优势函数
根据带基线的REINFORCE中基线函数
b
(
s
)
b(s)
b(s)的作用,同样定义一个优势函数(Advantage Function)
A
π
θ
(
S
t
,
A
t
)
A_{\pi_{\theta}}(S_t,A_t)
Aπθ(St,At)表示如下:
A
π
θ
(
S
t
,
A
t
)
=
q
π
θ
(
S
t
,
A
t
)
−
V
π
θ
(
S
t
)
A_{\pi_{\theta}}(S_t,A_t) = q_{\pi_{\theta}}(S_t,A_t) - V_{\pi_{\theta}}(S_t)
Aπθ(St,At)=qπθ(St,At)−Vπθ(St)
其中:
- V π θ ( S t ) V_{\pi_{\theta}}(S_t) Vπθ(St)表示基于策略函数 π ( A t ∣ S t ; θ ) \pi(A_t \mid S_t;\theta) π(At∣St;θ),状态 S t S_t St的 状态价值函数;
- q π θ ( S t , A t ) q_{\pi_{\theta}}(S_t,A_t) qπθ(St,At)自然是基于策略函数 π ( A t ∣ S t ; θ ) \pi(A_t \mid S_t;\theta) π(At∣St;θ),状态 S t S_t St条件下某一动作 A t A_t At的 状态-动作价值函数;
两者之间存在如下关系:
V
π
θ
(
S
t
)
=
∫
a
π
(
a
∣
S
t
;
θ
)
q
π
θ
(
S
t
,
a
)
V_{\pi_{\theta}}(S_t) = \int_{a} \pi(a \mid S_t;\theta)q_{\pi_{\theta}}(S_t,a)
Vπθ(St)=∫aπ(a∣St;θ)qπθ(St,a)
一个是期望价值,一个是实际价值——我们可以将
A
π
θ
(
S
t
,
A
t
)
A_{\pi_{\theta}}(S_t,A_t)
Aπθ(St,At)理解为:
在状态
S
t
S_t
St条件下,选择动作
A
t
A_t
At时所得到的回报 与 状态
S
t
S_t
St条件下,所有动作得到平均回报 之间的差异;
换句话说
→
A
π
θ
(
S
t
,
A
t
)
\to A_{\pi_{\theta}}(S_t,A_t)
→Aπθ(St,At)表示
q
π
θ
(
S
t
,
A
t
)
q_{\pi_{\theta}}(S_t,A_t)
qπθ(St,At)相比
V
π
θ
(
S
t
)
V_{\pi_{\theta}}(S_t)
Vπθ(St)的 优势。
至此,策略梯度
∇
J
(
θ
)
\nabla \mathcal J(\theta)
∇J(θ)可以表示为如下形式:
∇
J
(
θ
)
=
E
S
t
∼
ρ
π
θ
;
A
t
∼
π
θ
[
∇
log
π
(
A
t
∣
S
t
;
θ
)
A
π
θ
(
S
t
,
A
t
)
]
\nabla \mathcal J(\theta) = \mathbb E_{S_t \sim \rho^{\pi_{\theta}};A_t \sim \pi_{\theta}}[\nabla \log \pi(A_t \mid S_t;\theta)A_{\pi_{\theta}}(S_t,A_t)]
∇J(θ)=ESt∼ρπθ;At∼πθ[∇logπ(At∣St;θ)Aπθ(St,At)]
我们发现这种操作同样不用担心存在
∇
J
(
θ
)
\nabla \mathcal J(\theta)
∇J(θ)的偏差问题:由于
V
π
θ
(
S
t
)
V_{\pi_{\theta}}(S_t)
Vπθ(St)同样是不包含动作变量
A
t
A_t
At的函数,因此,和带基线的REINFORCE推导过程类似:
将
q
π
(
s
,
a
)
q_\pi(s,a)
qπ(s,a)替换为
q
π
θ
(
S
t
,
A
t
)
q_{\pi_{\theta}}(S_t,A_t)
qπθ(St,At);
b
(
s
)
b(s)
b(s)替换为
V
π
θ
(
S
t
)
V_{\pi_{\theta}}(S_t)
Vπθ(St)。
E
S
t
∼
ρ
π
θ
;
A
t
∼
π
θ
[
∇
log
π
(
A
t
∣
S
t
;
θ
)
A
π
θ
(
S
t
,
A
t
)
]
=
E
S
t
∼
ρ
π
θ
;
A
t
∼
π
θ
[
∇
log
π
(
A
t
∣
S
t
;
θ
)
(
q
π
θ
(
S
t
,
A
t
)
−
V
π
θ
(
S
t
)
)
]
=
E
S
t
∼
ρ
π
θ
;
A
t
∼
π
θ
[
∇
log
π
(
A
t
∣
S
t
;
θ
)
q
π
θ
(
S
t
,
A
t
)
]
=
∇
J
(
θ
)
\begin{split} & \mathbb E_{S_t \sim \rho^{\pi_{\theta}};A_t \sim \pi_{\theta}}[\nabla \log \pi(A_t \mid S_t;\theta)A_{\pi_{\theta}}(S_t,A_t)] \\ & = \mathbb E_{S_t \sim \rho^{\pi_{\theta}};A_t \sim \pi_{\theta}}[\nabla \log \pi(A_t \mid S_t;\theta)(q_{\pi_{\theta}}(S_t,A_t) - V_{\pi_{\theta}}(S_t))] \\ & = \mathbb E_{S_t \sim \rho^{\pi_{\theta}};A_t \sim \pi_{\theta}}[\nabla \log \pi(A_t \mid S_t;\theta)q_{\pi_{\theta}}(S_t,A_t)] \\ & = \nabla \mathcal J(\theta) \end{split}
ESt∼ρπθ;At∼πθ[∇logπ(At∣St;θ)Aπθ(St,At)]=ESt∼ρπθ;At∼πθ[∇logπ(At∣St;θ)(qπθ(St,At)−Vπθ(St))]=ESt∼ρπθ;At∼πθ[∇logπ(At∣St;θ)qπθ(St,At)]=∇J(θ)
至此,能够确定 E S t ∼ ρ π θ ; A t ∼ π θ [ ∇ log π ( A t ∣ S t ; θ ) A π θ ( S t , A t ) ] \mathbb E_{S_t \sim \rho^{\pi_{\theta}};A_t \sim \pi_{\theta}}[\nabla \log \pi(A_t \mid S_t;\theta)A_{\pi_{\theta}}(S_t,A_t)] ESt∼ρπθ;At∼πθ[∇logπ(At∣St;θ)Aπθ(St,At)]仍然是对策略梯度 ∇ J ( θ ) \nabla \mathcal J(\theta) ∇J(θ)的无偏估计。
但 A π θ ( S t , A t ) A_{\pi_{\theta}}(S_t,A_t) Aπθ(St,At)中包含两个新的函数:
- V π θ ( S t ) V_{\pi_{\theta}}(S_t) Vπθ(St);
- q π θ ( S t , A t ) q_{\pi_{\theta}}(S_t,A_t) qπθ(St,At);
为什么说它们两个是新函数:原因很简单,因为此时已经 不是表格式强化学习 了(表格式强化学习介绍 → \to → 传送门),由于动作是连续的,我们不能通过 Q − T a b l e Q-Table Q−Table直接获取上述两个价值函数。只能通过设置新参数 w q , w v w^q,w^v wq,wv分别进行近似估计:
- v ^ ( S t , w v ) ≈ V π θ ( S t ) \hat v(S_t,w^v) \approx V_{\pi_{\theta}}(S_t) v^(St,wv)≈Vπθ(St);
- q ^ ( S t , A t , w q ) ≈ q π θ ( S t , A t ) \hat q(S_t,A_t,w^q) \approx q_{\pi_{\theta}}(S_t,A_t) q^(St,At,wq)≈qπθ(St,At);
此时,包括策略函数的参数 θ \theta θ,我们需要求三个参数的梯度了——能否存在一种方式,来减少参数的数量,从而减少梯度的运算?
下面介绍一下 时序差分偏差,观察该操作是否能够减少参数的数量。
优势函数与时序差分偏差的关系
观察,是否可以将优势函数与时序差分偏差之间构建联系:
什么是时序差分偏差?
以
S
t
→
S
t
+
1
S_t \to S_{t+1}
St→St+1状态转移过程为例:
定义时序差分偏差
δ
π
θ
\delta_{\pi_{\theta}}
δπθ表示如下:
仅指‘一步时序差分’的偏差。
δ
π
θ
=
R
t
+
1
+
γ
V
π
θ
(
S
t
+
1
)
−
V
π
θ
(
S
t
)
\delta_{\pi_{\theta}} = R_{t+1} + \gamma V_{\pi_{\theta}}(S_{t+1}) - V_{\pi_{\theta}}(S_{t})
δπθ=Rt+1+γVπθ(St+1)−Vπθ(St)
可以将其理解成:状态转移后的期望回报信息 与 状态转移前的期望回报信息 两者之间的差值。
将优势函数展开,表达如下:
A
π
θ
(
S
t
,
A
t
)
=
q
π
θ
(
S
t
,
A
t
)
−
V
π
θ
(
S
t
)
=
E
π
θ
[
R
t
+
1
+
γ
V
π
θ
(
S
t
+
1
)
∣
S
t
,
A
t
]
−
E
π
θ
[
V
π
θ
(
S
t
)
∣
S
t
]
\begin{aligned} A_{\pi_{\theta}}(S_t,A_t) & = q_{\pi_{\theta}}(S_t,A_t) - V_{\pi_{\theta}}(S_t) \\ & = \mathbb E_{\pi_{\theta}}[R_{t+1} + \gamma V_{\pi_{\theta}}(S_{t+1}) \mid S_t,A_t] - \mathbb E_{\pi_{\theta}}[V_{\pi_{\theta}}(S_{t}) \mid S_t] \end{aligned}
Aπθ(St,At)=qπθ(St,At)−Vπθ(St)=Eπθ[Rt+1+γVπθ(St+1)∣St,At]−Eπθ[Vπθ(St)∣St]
两个期望都是基于同一个策略函数
π
(
A
t
∣
S
t
;
θ
)
\pi(A_t \mid S_t;\theta)
π(At∣St;θ),因此将两个期望合并:
后一项条件中不含a,但后一项的‘状态价值函数’同样也不含a——a对于状态价值函数就是‘无关条件’。
E
π
θ
[
R
t
+
1
+
γ
V
π
θ
(
S
t
+
1
)
−
V
π
θ
(
S
t
)
∣
S
t
,
A
t
]
\mathbb E_{\pi_{\theta}}[R_{t+1} + \gamma V_{\pi_{\theta}}(S_{t+1}) - V_{\pi_{\theta}}(S_{t}) \mid S_t,A_t]
Eπθ[Rt+1+γVπθ(St+1)−Vπθ(St)∣St,At]
继续观察,前面的项就是时序差分偏差
δ
π
θ
\delta_{\pi_{\theta}}
δπθ,直接进行替换:
A
π
θ
(
S
t
,
A
t
)
=
E
π
θ
[
δ
π
θ
∣
S
t
,
A
t
]
A_{\pi_{\theta}}(S_t,A_t) = \mathbb E_{\pi_{\theta}}[\delta_{\pi_{\theta}} \mid S_t,A_t]
Aπθ(St,At)=Eπθ[δπθ∣St,At]
因此,我们发现优势函数
A
π
θ
(
S
t
,
A
t
)
A_{\pi_{\theta}}(S_t,A_t)
Aπθ(St,At)就是时序差分偏差的期望。这可以说明:优势函数可以理解为时序差分偏差的无偏估计。
因此,在对策略梯度
∇
J
(
θ
)
\nabla \mathcal J(\theta)
∇J(θ)的表示中,将时序差分偏差
δ
π
θ
\delta_{\pi_{\theta}}
δπθ替换优势函数
A
π
θ
(
S
t
,
A
t
)
A_{\pi_{\theta}}(S_t,A_t)
Aπθ(St,At):
∇
J
(
θ
)
=
E
S
t
∼
ρ
π
θ
;
A
t
∼
π
θ
[
∇
log
π
(
A
t
∣
S
t
;
θ
)
δ
π
θ
]
\nabla \mathcal J(\theta) = \mathbb E_{S_t \sim \rho^{\pi_{\theta}};A_t \sim \pi_{\theta}}[\nabla \log \pi(A_t \mid S_t;\theta)\delta_{\pi_{\theta}}]
∇J(θ)=ESt∼ρπθ;At∼πθ[∇logπ(At∣St;θ)δπθ]
而时序差分偏差
δ
π
θ
\delta_{\pi_{\theta}}
δπθ也可以用近似函数表示为:
δ
π
θ
=
R
t
+
1
+
γ
×
v
^
(
S
t
,
w
v
)
−
v
^
(
S
t
,
w
v
)
\delta_{\pi_{\theta}} = R_{t+1} + \gamma \times \hat v(S_t,w^v) - \hat v(S_t,w^v)
δπθ=Rt+1+γ×v^(St,wv)−v^(St,wv)
至此,我们就可以将近似估计
q
π
θ
(
S
t
,
A
t
)
q_{\pi_{\theta}}(S_t,A_t)
qπθ(St,At)的参数
w
q
w^q
wq消掉了。
整理
从算法的执行过程角度观察,行动者-评论家方法与带基线REINFORCE方法非常相似,核心区别就是 δ \delta δ的构成不一样:
- 带基线REINFORCE: δ = G t − b ^ ( S t , w ) \delta = G_t - \hat b(S_t,w) δ=Gt−b^(St,w)。我们发现: G t G_t Gt和 b ( S t , w ) b(S_t,w) b(St,w)之间无明显联系,该操作只是为了产生的基线与回报之间相匹配;
- 行动者-评论家: δ = R t + 1 + γ × v ^ ( S t , w v ) − v ^ ( S t , w v ) \delta = R_{t+1} + \gamma \times \hat v(S_t,w^v) - \hat v(S_t,w^v) δ=Rt+1+γ×v^(St,wv)−v^(St,wv)。我们发现,被减的前项与后项之间关联性很强,并且该式子中包含消减参数的作用。并且该方法的最小迭代单位由一个情节 → \to → 一次状态转移。极大增强了参数 θ \theta θ的更新频率。
下一节将介绍策略梯度方法的最后一个部分——确定性策略梯度定理,为后续基于确定性策略梯度的深度强化学习做铺垫。
相关参考:
【强化学习】策略梯度方法-REINFORCE with Baseline & Actor-Critic
深度强化学习原理、算法pytorch实战 —— 刘全,黄志刚编著
