【强化学习理论】基于策略的强化学习——策略梯度算法
基于策略的强化学习方法通过计算策略,即动作的分布 π ( a ∣ s ) \pi(a|s) π(a∣s)决定在状态 s s s选择动作 a a a。例如 π ( a ∣ s ) = [ 0.5 , 0.3 , 0.2 ] \pi(a|s)=[0.5, 0.3, 0.2] π(a∣s)=[0.5,0.3,0.2],表示选择动作 a 1 a_1 a1的概率为0.5,选择动作 a 2 a_2 a2的概率为0.3,选择动作 a 3 a_3 a3的概率为0.2。**策略梯度算法(policy gradient,PG)**是经典的基于策略的强化学习方法,本文对策略梯度算法进行介绍。
注:本文是在观看【王树森】深度强化学习(DRL)P3后的整理。
1. 如何计算策略 π ( a ∣ s ) \pi(a|s) π(a∣s)?
基于策略的强化学习方法需要计算策略。在深度强化学习中,使用神经网络近似动作分布,示意图如下图所示。此时神经网络称为策略网络,记作 π ( a ∣ s ; θ ) \pi(a|s;\theta) π(a∣s;θ), θ \theta θ表示策略网络的参数。
图源【王树森】深度强化学习(DRL)P3
良好的策略的目标是让所有状态的价值尽量高,则神经网络优化的目标函数
J
(
θ
)
\mathcal{J}(\theta)
J(θ)可定义为:
J
(
θ
)
=
E
s
∈
S
[
V
π
(
s
;
θ
)
]
\mathcal{J}(\theta) = \mathbb{E}_{s \in \mathcal{S}} \left[ V^{\pi}(s; \theta) \right]
J(θ)=Es∈S[Vπ(s;θ)]
其中,
S
\mathcal{S}
S表示强化学习环境的状态空间。假设环境的动作空间为离散型,
V
π
(
s
;
θ
)
V^{\pi}(s;\theta)
Vπ(s;θ)可作如下定义并根据期望的定义展开:
V
π
(
s
;
θ
)
=
E
a
∼
π
(
⋅
∣
s
;
θ
)
[
Q
π
(
s
,
a
)
]
=
∑
a
π
(
a
∣
s
;
θ
)
Q
π
(
s
,
a
)
\begin{aligned} V^{\pi}(s;\theta) & = \mathbb{E}_{a \sim \pi(\cdot|s;\theta)} \left[ Q^{\pi}(s,a) \right] \\ & = \sum_{a} \pi(a|s;\theta) Q^{\pi}(s,a) \end{aligned}
Vπ(s;θ)=Ea∼π(⋅∣s;θ)[Qπ(s,a)]=a∑π(a∣s;θ)Qπ(s,a)
此处涉及状态价值函数与动作价值函数的关系,可见【强化学习理论】状态价值函数与动作价值函数系列公式推导。
2. 如何优化策略网络的参数?
使用梯度上升的方式对策略网络的参数
θ
\theta
θ进行更新。对于训练策略网络的具体样本给定的状态
s
s
s,更新式子如下:
θ
←
θ
+
α
⋅
∂
V
π
(
s
;
θ
)
∂
θ
\theta \leftarrow \theta + \alpha \cdot \frac{\partial V^{\pi}(s;\theta)}{\partial \theta}
θ←θ+α⋅∂θ∂Vπ(s;θ)
也有一种写法是
θ
←
θ
+
α
⋅
∇
θ
V
π
(
s
;
θ
)
\theta \leftarrow \theta + \alpha \cdot \nabla_{\theta}V^{\pi}(s; \theta)
θ←θ+α⋅∇θVπ(s;θ)。其中,
α
\alpha
α是网络学习率。
∇
θ
V
π
(
s
;
θ
)
\nabla_{\theta}V^{\pi}(s; \theta)
∇θVπ(s;θ)即为策略梯度。此处的
∇
θ
V
π
(
s
;
θ
)
\nabla_{\theta}V^{\pi}(s; \theta)
∇θVπ(s;θ)其实是随机梯度,随机性来源于
s
s
s。
3. 如何计算策略梯度?
根据
V
π
(
s
;
θ
)
V^{\pi}(s;\theta)
Vπ(s;θ)的定义,策略梯度可做如下展开:
∂
V
π
(
s
;
θ
)
∂
θ
=
∂
∑
a
π
(
a
∣
s
;
θ
)
Q
π
(
s
,
a
)
∂
θ
=
∑
a
∂
π
(
a
∣
s
;
θ
)
Q
π
(
s
,
a
)
∂
θ
=
∑
a
Q
π
(
s
,
a
)
∂
π
(
a
∣
s
;
θ
)
∂
θ
(Form 1)
=
∑
a
Q
π
(
s
,
a
)
π
(
a
∣
s
;
θ
)
∂
ln
π
(
a
∣
s
;
θ
)
∂
θ
=
E
a
∼
π
(
⋅
∣
s
,
θ
)
[
Q
π
(
s
,
a
)
∂
ln
π
(
a
∣
s
;
θ
)
∂
θ
]
(Form 2)
\begin{aligned} \frac{\partial V^{\pi}(s;\theta)}{\partial \theta} &= \frac{\partial \sum_{a} \pi(a|s;\theta) Q^{\pi}(s,a)}{\partial \theta} &\\ &= \sum_a \frac{\partial \pi(a|s;\theta) Q^{\pi}(s,a)}{\partial \theta} &\\ &= \sum_a Q^{\pi}(s,a) \textcolor{blue}{\frac{\partial \pi(a|s;\theta)}{\partial \theta}} &\text{(Form 1)}\\ &= \sum_a Q^{\pi}(s,a) \textcolor{blue}{\pi(a|s;\theta) \frac{\partial \ln \pi(a|s;\theta)}{\partial \theta}} &\\ &= \mathbb{E}_{a\sim \pi(\cdot|s,\theta)} \left[ Q^{\pi}(s,a) \frac{\partial \ln \pi(a|s; \theta)}{\partial \theta} \right] &\text{(Form 2)} \end{aligned}
∂θ∂Vπ(s;θ)=∂θ∂∑aπ(a∣s;θ)Qπ(s,a)=a∑∂θ∂π(a∣s;θ)Qπ(s,a)=a∑Qπ(s,a)∂θ∂π(a∣s;θ)=a∑Qπ(s,a)π(a∣s;θ)∂θ∂lnπ(a∣s;θ)=Ea∼π(⋅∣s,θ)[Qπ(s,a)∂θ∂lnπ(a∣s;θ)](Form 1)(Form 2)
因为对不同动作 a a a求和与求偏导对象 θ \theta θ无关,因此可以将求和运算从求偏导中提取出来,第一行转化为第二行;
假设 Q π ( s , a ) Q^{\pi}(s,a) Qπ(s,a)与策略网络的参数 θ \theta θ无关(但严格来讲,这种假设不够严谨,因为 Q π ( s , a ) Q^{\pi}(s,a) Qπ(s,a)与策略 π ( a ∣ s ; θ ) \pi(a|s; \theta) π(a∣s;θ)有关),因此可以将其从求偏导中提取出来,第二行转化为第三行,得到求解策略梯度的第一种形式Form 1;
由于根据链式法则, π ( a ∣ s ; θ ) ∂ ln π ( a ∣ s ; θ ) ∂ θ = π ( a ∣ s ; θ ) 1 π ( a ∣ s ; θ ) ∂ π ( a ∣ s ; θ ) ∂ θ = ∂ π ( a ∣ s ; θ ) ∂ θ \pi(a|s;\theta) \frac{\partial \ln \pi(a|s;\theta)}{\partial \theta} = \pi(a|s;\theta) \frac{1}{\pi(a|s;\theta)} \frac{\partial \pi(a|s;\theta)}{\partial \theta} = \frac{\partial \pi(a|s;\theta)}{\partial \theta} π(a∣s;θ)∂θ∂lnπ(a∣s;θ)=π(a∣s;θ)π(a∣s;θ)1∂θ∂π(a∣s;θ)=∂θ∂π(a∣s;θ),第三行转化为第四行;
根据对离散型随机变量求期望的计算方式,第四行转化为第五行,得到求解策略梯度的第二种形式Form 2。
离散型动作空间情况下计算策略梯度
在动作空间是离散的情况下,可以使用Form 1式子计算策略梯度:计算所有动作的相应值并相加。即假设动作空间大小为3,令 f ( a ; θ ) = Q π ( s , a ) ∂ π ( a ∣ s ; θ ) ∂ θ f(a;\theta) = Q^{\pi}(s,a) \frac{\partial \pi(a|s;\theta)}{\partial \theta} f(a;θ)=Qπ(s,a)∂θ∂π(a∣s;θ),则 ∂ V π ( s ; θ ) ∂ θ = f ( a 1 ; θ ) + f ( a 2 ; θ ) + f ( a 3 ; θ ) \frac{\partial V^{\pi}(s;\theta)}{\partial \theta} = f(a_1; \theta) + f(a_2; \theta) + f(a_3; \theta) ∂θ∂Vπ(s;θ)=f(a1;θ)+f(a2;θ)+f(a3;θ)。
连续型动作空间情况下计算策略梯度
在动作空间是连续的情况下,无法列举出所有可能的动作,因此无法使用Form 1式子。此时可以使用Form 2式子,但是由于动作分布的概率密度函数 π ( a ∣ s ; θ ) \pi(a|s;\theta) π(a∣s;θ)比较复杂,难以计算关于 a a a的积分,因此使用Form 2式子的同时还会使用蒙特卡洛近似来近似Form 2式子的计算。
蒙特卡洛近似是指从分布中抽样多个随机样本以近似期望。
具体而言,从策略函数中采样动作 a ^ \hat{a} a^, a ^ ∼ π ( ⋅ ∣ s ; θ ) \hat{a} \sim \pi(\cdot|s;\theta) a^∼π(⋅∣s;θ),令 g ( a ^ ; θ ) = Q π ( s , a ^ ) ∂ ln π ( a ^ ∣ s ; θ ) ∂ θ g(\hat{a};\theta) = Q^{\pi}(s,\hat{a}) \frac{\partial \ln \pi(\hat{a}|s; \theta)}{\partial \theta} g(a^;θ)=Qπ(s,a^)∂θ∂lnπ(a^∣s;θ), g ( a ^ ; θ ) g(\hat{a};\theta) g(a^;θ)是策略梯度的无偏估计,可以用于近似策略梯度,则 ∂ V π ( s ; θ ) ∂ θ = E a ^ ∼ π ( ⋅ ∣ s , θ ) [ g ( a ^ ; θ ) ] \frac{\partial V^{\pi}(s;\theta)}{\partial \theta} = \mathbb{E}_{\hat{a} \sim \pi(\cdot|s,\theta)}[g(\hat{a};\theta)] ∂θ∂Vπ(s;θ)=Ea^∼π(⋅∣s,θ)[g(a^;θ)]。
这种计算方式也适用于离散型动作空间的情况。
4. 策略梯度算法流程
- 获得当前时刻状态 s t s_t st
- 从策略网络 π ( ⋅ ∣ s t ; θ ) \pi(\cdot|s_t;\theta) π(⋅∣st;θ)中随机采样得到动作 a t a_t at
- 计算 q t ≈ Q π ( s t , a t ) q_t \approx Q^{\pi}(s_t,a_t) qt≈Qπ(st,at)(使用某种估计方法)
- 计算策略梯度
- 计算网络参数的梯度 d θ , t = ∂ ln π ( a t ∣ s t ; θ ) ∂ θ \mathrm{d}_{\theta, t} = \frac{\partial \ln \pi(a_t|s_t;\theta)}{\partial \theta} dθ,t=∂θ∂lnπ(at∣st;θ)
- 计算策略梯度 g ( a t ; θ t ) = q t ⋅ d θ , t \mathrm{g}(a_t;\theta_t) = q_t \cdot \mathrm{d}_{\theta,t} g(at;θt)=qt⋅dθ,t
- 更新策略网络的参数 θ t + 1 ← θ t + α ⋅ g ( a t ; θ t ) \theta_{t+1} \leftarrow \theta_t + \alpha \cdot \mathrm{g}(a_t;\theta_t) θt+1←θt+α⋅g(at;θt)
5. 在策略梯度算法中如何计算状态动作价值?
这一节对应于上一节策略梯度算法流程中计算 Q π ( s t , a t ) Q^{\pi}(s_t,a_t) Qπ(st,at)的步骤。这一步计算有两种方法,一种是基于蒙特卡洛近似的方法,另一种是基于神经网络拟合的方法。
基于蒙特卡洛近似计算状态动作价值——REINFORCE
- 使用当前策略采样得到轨迹 s 1 , a 1 , r 1 , . . . , s T , a T , r T s_1, a_1, r_1, ..., s_T, a_T, r_T s1,a1,r1,...,sT,aT,rT
- 为轨迹中的每一个 ( s t , a t ) (s_t,a_t) (st,at)计算折扣回报 u t = ∑ k = t T γ k − t r k u_t = \sum_{k=t}^T \gamma^{k-t} r_k ut=∑k=tTγk−trk
- 由于 Q π ( s t , a t ) = E [ U t ∣ S t = s t , A t = a t ] Q^{\pi}(s_t, a_t) = \mathbb{E}[U_t|S_t=s_t,A_t=a_t] Qπ(st,at)=E[Ut∣St=st,At=at],可以使用 u t u_t ut近似 Q π ( s t , a t ) Q^{\pi}(s_t, a_t) Qπ(st,at),即 q t = u t q_t = u_t qt=ut
基于神经网络拟合计算状态动作价值——Actor-Critic
暂略。