首先定义强化学习的目标: m a x i m i z e J ( π θ ) = E τ ∼ π θ [ R ( τ ) ] maximize J(\pi_\theta)=E_{\tau \sim \pi_\theta}[R(\tau)] maximizeJ(πθ)=Eτ∼πθ[R(τ)]也就是找到一个策略可以最大化累计奖励。其中是 π θ \pi_\theta πθ用 θ \theta θ参数化的策略。
那么策略梯度的目标就是寻找一个最好的 θ \theta θ去达到目标。其更新方式就是: θ k + 1 = θ k + α ∇ J ( π θ ) ∣ θ k \theta_{k+1}=\theta_k+\alpha \nabla J(\pi_\theta)|_{\theta_k} θk+1=θk+α∇J(πθ)∣θk。
那么
J
(
π
θ
)
J(\pi_\theta)
J(πθ)的导数形式是如何呢?下面就来推导一下
∇
J
(
π
θ
)
=
∇
E
τ
∼
π
θ
[
R
(
τ
)
]
=
∫
τ
P
(
τ
∣
θ
)
R
(
τ
)
=
∫
τ
∇
P
(
τ
∣
θ
)
R
(
τ
)
\nabla J(\pi_\theta)=\nabla E_{\tau \sim \pi_\theta}[R(\tau)] = \int_\tau P(\tau|\theta)R(\tau) \\ = \int_\tau \nabla P(\tau|\theta)R(\tau)
∇J(πθ)=∇Eτ∼πθ[R(τ)]=∫τP(τ∣θ)R(τ)=∫τ∇P(τ∣θ)R(τ)
其中
P
(
τ
∣
θ
)
=
ρ
0
(
s
0
)
∏
t
=
0
T
P
(
r
t
+
1
,
s
t
+
1
∣
s
t
,
a
t
)
π
θ
(
a
t
∣
s
t
)
P(\tau|\theta)=\rho_0(s_0) \prod_{t=0}^{T}P(r_{t+1},s_{t+1}|s_t,a_t)\pi_\theta(a_t|s_t)
P(τ∣θ)=ρ0(s0)∏t=0TP(rt+1,st+1∣st,at)πθ(at∣st),因为里面包含连乘,所以将其转换一下形式,变成如下形式:
l
o
g
P
(
τ
∣
θ
)
=
l
o
g
ρ
0
(
s
0
)
+
∑
t
=
0
T
[
l
o
g
P
(
r
t
+
1
,
s
t
+
1
∣
s
t
,
a
t
)
+
l
o
g
π
θ
(
a
t
∣
s
t
)
]
logP(\tau|\theta)=log\rho_0(s_0)+ \sum_{t=0}^{T}[logP(r_{t+1},s_{t+1}|s_t,a_t) + log\pi_\theta(a_t|s_t)]
logP(τ∣θ)=logρ0(s0)+∑t=0T[logP(rt+1,st+1∣st,at)+logπθ(at∣st)]
那么对
θ
\theta
θ求导可得如下形式
∇
θ
l
o
g
P
(
τ
∣
θ
)
=
∑
t
=
0
T
∇
θ
l
o
g
π
θ
(
a
t
∣
s
t
)
\nabla_\theta logP(\tau|\theta)= \sum_{t=0}^{T}\nabla_\theta log\pi_\theta(a_t|s_t)
∇θlogP(τ∣θ)=∑t=0T∇θlogπθ(at∣st)
然后
∇
θ
P
(
τ
∣
θ
)
和
∇
θ
l
o
g
P
(
τ
∣
θ
)
\nabla_\theta P(\tau|\theta)和\nabla_\theta logP(\tau|\theta)
∇θP(τ∣θ)和∇θlogP(τ∣θ)可以通过这样一个变化联系起来:
∇
θ
P
(
τ
∣
θ
)
=
P
(
τ
∣
θ
)
∇
θ
l
o
g
P
(
τ
∣
θ
)
\nabla_\theta P(\tau|\theta)=P(\tau|\theta)\nabla_\theta logP(\tau|\theta)
∇θP(τ∣θ)=P(τ∣θ)∇θlogP(τ∣θ)。
所以,将其带回到上面的
∇
J
(
π
θ
)
\nabla J(\pi_\theta)
∇J(πθ)中可得:
∇
θ
J
(
π
θ
)
=
∫
τ
∇
θ
P
(
τ
∣
θ
)
R
(
τ
)
=
∫
τ
P
(
τ
∣
θ
)
∇
θ
l
o
g
P
(
τ
∣
θ
)
R
(
τ
)
=
E
τ
∼
θ
[
∇
θ
l
o
g
P
(
τ
∣
θ
)
R
(
τ
)
]
=
E
τ
∼
θ
[
∑
t
=
0
T
∇
θ
l
o
g
π
θ
(
a
t
∣
s
t
)
R
(
τ
)
]
\nabla_\theta J(\pi_\theta) = \int_\tau \nabla_\theta P(\tau|\theta)R(\tau) \\ = \int_\tau P(\tau|\theta)\nabla_\theta logP(\tau|\theta)R(\tau) \\ =E_{\tau \sim \theta}[\nabla_\theta logP(\tau|\theta)R(\tau)] \\ =E_{\tau \sim \theta}[\sum_{t=0}^{T}\nabla_\theta log\pi_\theta(a_t|s_t)R(\tau)]
∇θJ(πθ)=∫τ∇θP(τ∣θ)R(τ)=∫τP(τ∣θ)∇θlogP(τ∣θ)R(τ)=Eτ∼θ[∇θlogP(τ∣θ)R(τ)]=Eτ∼θ[t=0∑T∇θlogπθ(at∣st)R(τ)]
与是我们就得到了最简单的一个策略梯度的形式。因为这里是期望,所以我们可以通过采样来估计这个期望,假设我们收集到了D组轨迹数据,那么这个
∇
θ
J
(
π
θ
)
\nabla_\theta J(\pi_\theta)
∇θJ(πθ)可以通过如下形式计算:
∇
θ
J
(
π
θ
)
=
1
∣
D
∣
∑
τ
∼
D
∑
t
=
0
T
∇
θ
l
o
g
π
θ
(
a
t
∣
s
t
)
R
(
τ
)
\nabla_\theta J(\pi_\theta) = \frac{1}{|D|}\sum_{\tau \sim D}\sum_{t=0}^{T} \nabla_\theta log\pi_\theta(a_t|s_t)R(\tau)
∇θJ(πθ)=∣D∣1∑τ∼D∑t=0T∇θlogπθ(at∣st)R(τ).
那么这个最简单的策略梯度有什么缺点呢?我们通过公式可以看出,其对于每个动作(不管好坏)更新的幅度(比例)都是一样的,因为后面都是乘以一个
R
(
τ
)
R(\tau)
R(τ),而这个值无法分别反映每个动作的价值。
所以,在这里,一个很自然的想法就是对于每个动作,后面都乘以其相应执行后得到的奖励即可。所以上面的形式就转为如下:
∇
θ
J
(
π
θ
)
=
1
∣
D
∣
∑
τ
∼
D
∑
t
=
0
T
∇
θ
l
o
g
π
θ
(
a
t
∣
s
t
)
∑
t
′
=
t
T
R
(
s
t
′
,
a
t
′
,
s
t
′
+
1
)
\nabla_\theta J(\pi_\theta) = \frac{1}{|D|}\sum_{\tau \sim D}\sum_{t=0}^{T} \nabla_\theta log\pi_\theta(a_t|s_t) \sum_{t'=t}^{T}R(s_{t'},a_{t'},s_{t'+1})
∇θJ(πθ)=∣D∣1∑τ∼D∑t=0T∇θlogπθ(at∣st)∑t′=tTR(st′,at′,st′+1).
这种形式也称为Reward-to-go policyGradient。因为每个动作后面乘以的是从当前动作执行后后续的所有奖励累计。
但是,虽然这种形式比最开始的形式估计的要好点,但是还是没有到好的动作更新的多点,差的动作更新的少点。 因为 ∑ t ′ = t T R ( s t ′ , a t ′ , s t ′ + 1 ) \sum_{t'=t}^{T}R(s_{t'},a_{t'},s_{t'+1}) ∑t′=tTR(st′,at′,st′+1)是由t时刻开始后面所有动作的奖励组成,所以,如果当前的动作好,但是累计奖励小(后面的动作差),那么这个动作更新的幅度并不会很大,反之,如果当前的动作很差,但是累计奖励大(后面的动作好),那么这个动作更新的幅度反而会大。
那么我们如何再改进这个形式呢?首先,先引出了一个EGLP引理,这个引理说的是导数的期望是0,即:
E
x
∼
P
θ
[
∇
θ
l
o
g
P
θ
(
x
)
]
=
0
E_{x \sim P_\theta}[\nabla_\theta logP_\theta(x)] = 0
Ex∼Pθ[∇θlogPθ(x)]=0
下面我们证明一下这个引理:
∵
∫
x
P
θ
(
x
)
=
1
∴
∇
θ
∫
x
P
θ
(
x
)
=
0
∴
0
=
∇
θ
∫
x
P
θ
(
x
)
=
∫
x
∇
θ
P
θ
(
x
)
=
∫
x
P
θ
(
x
)
∇
θ
l
o
g
P
θ
(
x
)
=
E
x
∼
P
θ
[
∇
θ
l
o
g
P
θ
(
x
)
]
\because \int_x P_\theta(x)=1\\ \therefore \nabla_\theta \int_xP_\theta(x) = 0 \\ \therefore 0=\nabla_\theta \int_xP_\theta(x)=\int_x \nabla_\theta P_\theta(x)=\int_x P_\theta(x) \nabla_\theta logP_\theta(x) \\ =E_{x \sim P_\theta}[\nabla_\theta logP_\theta(x)]
∵∫xPθ(x)=1∴∇θ∫xPθ(x)=0∴0=∇θ∫xPθ(x)=∫x∇θPθ(x)=∫xPθ(x)∇θlogPθ(x)=Ex∼Pθ[∇θlogPθ(x)]
那么根据这个引理,我们可以知道对任意的函数
f
(
y
)
f(y)
f(y),
E
x
∼
P
θ
[
∇
θ
l
o
g
P
θ
(
x
)
f
(
y
)
]
=
0
E_{x \sim P_\theta}[\nabla_\theta logP_\theta(x) f(y)]=0
Ex∼Pθ[∇θlogPθ(x)f(y)]=0。
那么,我们就可以在上面的
∇
θ
J
(
π
θ
)
\nabla_\theta J(\pi_\theta)
∇θJ(πθ)中加入可以解决上述问题的一些函数。比如状态价值函数
V
π
(
s
t
)
V_\pi(s_t)
Vπ(st)。
这样一个仅与状态有关的函数
f
(
x
)
f(x)
f(x),我们称它为baseline。
所以上面的形式就转为如下:
∇
θ
J
(
π
θ
)
=
E
τ
∼
θ
[
∑
t
=
0
T
∇
θ
l
o
g
π
θ
(
a
t
∣
s
t
)
(
∑
t
′
=
t
T
R
(
s
t
′
,
a
t
′
,
s
t
′
+
1
)
−
f
(
s
t
)
)
]
\nabla_\theta J(\pi_\theta) =E_{\tau \sim \theta}[\sum_{t=0}^{T}\nabla_\theta log\pi_\theta(a_t|s_t)(\sum_{t'=t}^{T}R(s_{t'},a_{t'},s_{t'+1})-f(s_t))]
∇θJ(πθ)=Eτ∼θ[∑t=0T∇θlogπθ(at∣st)(∑t′=tTR(st′,at′,st′+1)−f(st))].
在这里,baseline最常用的是状态价值函数
V
π
(
s
t
)
V_\pi(s_t)
Vπ(st)。当baseline为状态价值函数的时候,可以减小策略梯度估计的方差,从而获得更快、更稳定的策略学习。从直觉上来说,这里选择了这个状态价值函数以后,后面的
∑
t
′
=
t
T
R
(
s
t
′
,
a
t
′
,
s
t
′
+
1
)
−
f
(
x
)
\sum_{t'=t}^{T}R(s_{t'},a_{t'},s_{t'+1})-f(x)
∑t′=tTR(st′,at′,st′+1)−f(x)相当于是这个动作与平均动作的好坏。
所以,策略梯度可以写成下面这样的一般形式:
∇
θ
J
(
π
θ
)
=
E
τ
∼
θ
[
∑
t
=
0
T
∇
θ
l
o
g
π
θ
(
a
t
∣
s
t
)
Φ
t
]
\nabla_\theta J(\pi_\theta) =E_{\tau \sim \theta}[\sum_{t=0}^{T}\nabla_\theta log\pi_\theta(a_t|s_t) \Phi_t]
∇θJ(πθ)=Eτ∼θ[t=0∑T∇θlogπθ(at∣st)Φt]
其中
Φ
t
\Phi_t
Φt可以是
R
(
τ
)
R(\tau)
R(τ),或者是
∑
t
′
=
t
T
R
(
s
t
′
,
a
t
′
,
s
t
′
+
1
)
\sum_{t'=t}^{T}R(s_{t'},a_{t'},s_{t'+1})
∑t′=tTR(st′,at′,st′+1),或者
∑
t
′
=
t
T
R
(
s
t
′
,
a
t
′
,
s
t
′
+
1
)
−
f
(
s
t
)
\sum_{t'=t}^{T}R(s_{t'},a_{t'},s_{t'+1})-f(s_t)
∑t′=tTR(st′,at′,st′+1)−f(st),或者
Q
π
θ
(
s
t
,
a
t
)
Q_{\pi_\theta}(s_t,a_t)
Qπθ(st,at)又或者是
A
π
θ
(
s
t
,
a
t
)
=
Q
π
θ
(
s
t
,
a
t
)
−
V
π
θ
(
s
t
,
a
t
)
A_{\pi_\theta}(s_t,a_t)=Q_{\pi_\theta}(s_t,a_t)-V_{\pi_\theta}(s_t,a_t)
Aπθ(st,at)=Qπθ(st,at)−Vπθ(st,at)
虽然每个选择都会具有不同的方差,但是最终的期望值都是一样的。
在这里要说明的是,
A
π
θ
(
s
t
,
a
t
)
A_{\pi_\theta}(s_t,a_t)
Aπθ(st,at)也称为优势函数,描述的是当前执行的动作相比于其它动作的平均好坏(是对于当前策略而言).
详细信息(推导)可以参考:SpinningUp