- 引言
- 回顾:带基线的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实战 —— 刘全,黄志刚编著