TRPO强化学习算法主要分为3个部分,分别介绍其理论、细节、实现
本文主要介绍TRPO的特点、思路、和优化式子的推导
TRPO系列(TRPO是真的复杂,全部理解花费了我半个月的时间嘞,希望也能帮助大家理解一下):
11.1、信赖域策略优化算法TRPO强化学习-从理论到实践
11.2、信赖域策略优化算法TRPO强化学习-约束优化求解
11.3、信赖域策略优化算法TRPO强化学习-运用实践
只需要代码请直接到11.3、信赖域策略优化算法TRPO强化学习-运用实践
其他算法:
07、基于LunarLander登陆器的DQN强化学习案例(含PYTHON工程)
08、基于LunarLander登陆器的DDQN强化学习(含PYTHON工程)
09、基于LunarLander登陆器的Dueling DQN强化学习(含PYTHON工程)
10、基于LunarLander登陆器的Dueling DDQN强化学习(含PYTHON工程)
11、基于LunarLander登陆器的A2C强化学习(含PYTHON工程)
一般梯度下降法的缺点:
TRPO的优点:
TRPO的缺点:
TRPO的改进:近端策略优化算法(PPO)
Return:回报U,可以理解为获得高奖励的可能,越大代表越可能获得高奖励。实际使用的是折扣回报,因为对于很远的奖励我们还需要考虑时间成本。对于一个随机的环境,在t时刻我们无法获得Ut的具体取值,因为我们不知道未来的奖励。
U t = R t + γ ? R t + 1 + γ 2 ? R t + 2 + γ 3 ? R t + 3 + ? U_t=R_t+\gamma\cdot R_{t+1}+\gamma^2\cdot R_{t+2}+\gamma^3\cdot R_{t+3}+\cdots Ut?=Rt?+γ?Rt+1?+γ2?Rt+2?+γ3?Rt+3?+?
η \eta η:策略pi的性能评估,也就是折扣回报Ut在t=0的期望,直观的解释是用当前策略网络pi去玩游戏的表现:
η ( π ) = E s 0 , a 0 , … [ ∑ t = 0 ∞ γ t r ( s t ) ] \eta(\pi)=\mathbb{E}s_0,a_0,\ldots\left[\sum_{t=0}^{\infty}\gamma^tr(s_t)\right] η(π)=Es0?,a0?,…[t=0∑∞?γtr(st?)]
Q(s,a):动作价值函数,其输入为当前状态和要执行的动作,输出为该动作能带来多大的价值,因此,一种贪心的方法是选择能够使Q(s,a)最大动作执行。
Q π ( s t , a t ) = E s t + 1 , a t + 1 , … [ ∑ l = 0 ∞ γ l r ( s t + l ) ] Q_\pi(s_t,a_t)=\mathbb{E}s_{t+1},a_{t+1},\ldots\left[\sum_{l=0}^\infty\gamma^lr(s_{t+l})\right] Qπ?(st?,at?)=Est+1?,at+1?,…[l=0∑∞?γlr(st+l?)]
Q(s,a)的维度等于动作空间的维度。打个简单的比方,假设我现在有两个动作,向北去捡芝麻,向南去捡西瓜。从最终获得的奖励来看,西瓜是大于芝麻的,但是如果芝麻就在我桌上,但是西瓜在20km以外,那可能我还是选择芝麻得了。那么动作价值函数可能就是(1,0.1)。1是捡芝麻的动作价值,0.1是捡西瓜的动作价值,虽说西瓜好吃,但是太远了,所以其动作价值打分特别低。
Q(s,a)和Ut关系:Q(s,a)是Ut的期望,期望可以理解为求积分,实际上Q是对Ut把所有t之后的时刻(t+1、t+2等等)当作变量求积分得到的。因此Q(s,a)可以直观反应当前状态s下执行各个动作的好坏。
Q π ( s t , a t ) = E [ U t ∣ s t , a t ] Q_\pi(s_t,{a_t})=\mathbb{E}[U_t\mid s_t,{a_t}] Qπ?(st?,at?)=E[Ut?∣st?,at?]
V(s):状态价值函数,是Q函数的期望。因为期望的积分动作消去了动作A,因此状态价值函数V可以用来直观的反应一个状态的好坏。其实际上是Q(s,a)对不同a的加权平均。
例如,自家高低三路被破,依据这个状态我们就知道现在的状态打分不太行。状态打分不行的原因是每个动作都不会带来太高的打分(都要输了)。
V π ( s t ) = E A t [ Q π ( s t , A t ) ∣ s t ] V_{\pi}(s_{t})=\mathbb{E}_{{A_{t}}}[Q_{\pi}(s_{t},{A_{t}})\mid s_{t}] Vπ?(st?)=EAt??[Qπ?(st?,At?)∣st?]
A:优势函数,其数值等于动作价值函数减去状态价值函数,相当于动作价值Q(s,a)减去了其baseline:
A π ( s , a ) = Q π ( s , a ) ? V π ( s ) A_\pi(s,a)=Q_\pi(s,a)-V_\pi(s) Aπ?(s,a)=Qπ?(s,a)?Vπ?(s)
之前提及,
η
(
π
)
\eta(\pi)
η(π)是TRPO算法中衡量策略网络
π
\pi
π优劣的主要参数,假设
π
~
\tilde{\pi}
π~是网络
π
\pi
π更新后的新策略,那么我们有朴素的愿望,那就是越更新越好,就是将
η
(
π
~
)
\eta(\tilde{\pi})
η(π~)写为加法的形式,如:
η
(
π
~
)
=
η
(
π
)
+
(
…
)
\eta(\tilde{\pi})=\eta(\pi)+(\ldots)
η(π~)=η(π)+(…)
理论证明,这是确实可行的,
η
(
π
~
)
\eta(\tilde{\pi})
η(π~)可以写为如下的形式(推导见【TRPO系列讲解】(五)TRPO_理论推导篇的8min):
η
(
π
~
)
=
η
(
π
)
+
E
s
0
,
a
0
,
…
~
π
~
[
∑
t
=
0
∞
γ
t
A
π
(
s
t
,
a
t
)
]
\eta(\tilde{\pi})=\eta(\pi)+\mathbb{E}s_{0},a_{0},\ldots\sim\tilde{\pi}\left[\sum_{t=0}^{\infty}\gamma^{t}A_{\pi}(s_{t},a_{t})\right]
η(π~)=η(π)+Es0?,a0?,…~π~[t=0∑∞?γtAπ?(st?,at?)]
因此,简单来讲,只要每次更新的
E
s
0
,
a
0
,
…
~
π
~
[
∑
t
=
0
∞
γ
t
A
π
(
s
t
,
a
t
)
]
\mathbb{E}s_{0},a_{0},\ldots\sim\tilde{\pi}\left[\sum_{t=0}^{\infty}\gamma^{t}A_{\pi}(s_{t},a_{t})\right]
Es0?,a0?,…~π~[∑t=0∞?γtAπ?(st?,at?)]大于0,那么每次更新一定会提升策略网络的性能;如果每次更新得到的
E
s
0
,
a
0
,
…
~
π
~
[
∑
t
=
0
∞
γ
t
A
π
(
s
t
,
a
t
)
]
=
0
\mathbb{E}s_{0},a_{0},\ldots\sim\tilde{\pi}\left[\sum_{t=0}^{\infty}\gamma^{t}A_{\pi}(s_{t},a_{t})\right]=0
Es0?,a0?,…~π~[∑t=0∞?γtAπ?(st?,at?)]=0,那么可以认为该策略网络趋于收敛了。
对于离散的情况,可以将期望进行展开:
η
(
π
~
)
=
η
(
π
)
+
∑
t
=
0
∞
∑
s
P
(
s
t
=
s
∣
π
~
)
∑
a
π
~
(
a
t
=
a
∣
s
t
)
γ
t
A
π
(
s
t
,
a
t
)
\eta(\tilde{\pi})=\eta(\pi)+\sum_{t=0}^\infty\sum_sP(s_t=s\mid\tilde{\pi})\sum_a\tilde{\pi}(a_t=a\mid s_t)\gamma^tA_\pi(s_t,a_t)
η(π~)=η(π)+t=0∑∞?s∑?P(st?=s∣π~)a∑?π~(at?=a∣st?)γtAπ?(st?,at?)
简单交换一下求和的顺序:
η
(
π
~
)
=
η
(
π
)
+
∑
s
∑
t
=
0
∞
γ
t
P
(
s
t
=
s
∣
π
~
)
∑
a
π
~
(
a
t
=
a
∣
s
t
)
A
π
(
s
t
,
a
t
)
\eta(\tilde{\pi})=\eta(\pi)+\sum_s\sum_{t=0}^\infty\gamma^tP(s_t=s\mid\tilde{\pi})\sum_a\tilde{\pi}(a_t=a\mid s_t)A_\pi(s_t,a_t)
η(π~)=η(π)+s∑?t=0∑∞?γtP(st?=s∣π~)a∑?π~(at?=a∣st?)Aπ?(st?,at?)
定义
∑
t
=
0
∞
γ
t
P
(
s
t
=
s
∣
π
~
)
\sum_{t=0}^\infty\gamma^tP(s_t=s\mid\tilde{\pi})
∑t=0∞?γtP(st?=s∣π~)为折扣的访问频率(单纯为了简化式子的表达):
ρ
π
(
s
)
=
∑
t
=
0
∞
γ
t
P
(
s
t
=
s
∣
π
)
\rho_\pi(s)=\sum_{t=0}^\infty\gamma^tP(s_t=s\mid\pi)
ρπ?(s)=t=0∑∞?γtP(st?=s∣π)
由此
η
(
π
~
)
\eta(\tilde{\pi})
η(π~)可以简写为:
η
(
π
~
)
=
η
(
π
)
+
∑
s
ρ
π
~
(
s
)
∑
a
π
~
(
a
∣
s
)
A
π
(
s
,
a
)
\eta(\tilde{\pi})=\eta(\pi)+\sum_s\rho_{\tilde{\pi}}(s)\sum_a\tilde{\pi}(a\mid s)A_\pi(s,a)
η(π~)=η(π)+s∑?ρπ~?(s)a∑?π~(a∣s)Aπ?(s,a)
上面这个函数非常简洁明了,但仍然有一些繁杂之处。我们在衡量新策略 π ~ \tilde{\pi} π~的性能,观测其等式右边,需要得到两个涉及到新策略 π ~ \tilde{\pi} π~的参数,分别是 ρ π ~ ( s ) \rho_{\tilde{\pi}}(s) ρπ~?(s)和 π ~ ( a ∣ s ) \tilde{\pi}(a\mid s) π~(a∣s)。对于 π ~ ( a ∣ s ) \tilde{\pi}(a\mid s) π~(a∣s),我们只需要对网络进行更新就可以得到,是非常容易的。然而,新策略的折扣的访问频率 ρ π ~ ( s ) \rho_{\tilde{\pi}}(s) ρπ~?(s)需要我们在得到 π ~ ( a ∣ s ) \tilde{\pi}(a\mid s) π~(a∣s)后再玩一局游戏才能得到(需要重新和环境交互),相当于需要有一次交互不更新策略网络只为了得到 ρ π ~ ( s ) \rho_{\tilde{\pi}}(s) ρπ~?(s)。
为了解决这个问题,对
ρ
π
~
(
s
)
\rho_{\tilde{\pi}}(s)
ρπ~?(s)函数进行近似,使用旧策略的
ρ
π
(
s
)
\rho_{{\pi}}(s)
ρπ?(s)来代替
ρ
π
~
(
s
)
\rho_{\tilde{\pi}}(s)
ρπ~?(s),由此可以通过一次交互同时得到
ρ
π
(
s
)
\rho_{{\pi}}(s)
ρπ?(s)和更新后的策略
π
~
\tilde{\pi}
π~:
L
π
(
π
~
)
=
η
(
π
)
+
∑
s
ρ
π
(
s
)
∑
a
π
~
(
a
∣
s
)
A
π
(
s
,
a
)
L_\pi(\tilde{\pi})=\eta(\pi)+\sum_s\rho_\pi(s)\sum_a\tilde{\pi}(a\mid s)A_\pi(s,a)
Lπ?(π~)=η(π)+s∑?ρπ?(s)a∑?π~(a∣s)Aπ?(s,a)
该函数也是用来衡量新网络的表现优劣。为什么能进行替代呢?详细的数学推导过程见【TRPO系列讲解】(五)TRPO_理论推导篇的18min。
这种替代自然也是有条件的,那就是新旧策略网络的 ρ ( s ) \rho_(s) ρ(?s)不能差太多,也就是新旧策略网络不能差的太多,新旧策略网络输出的实际上概率分布,而衡量两个概率分布之间差异的方法是KL散度。
由此,可以初步写出TRPO算法的优化式子了(当然,在原文中,使用了惩罚项,通过近似才得到了下面给出的式子的,详细的数学推导过程见【TRPO系列讲解】(五)TRPO_理论推导篇的19min):
1、最大化策略pi的性能评估,近似前是
η
(
π
~
)
\eta(\tilde{\pi})
η(π~),近似后是
L
π
(
π
~
)
L_\pi(\tilde{\pi})
Lπ?(π~)
2、新旧策略网络不能差的太多(保证近似可靠的条件),最大的区别要小于一定的常数
m a x θ L θ o l d ( θ ) subject?to? D K L m a x ( θ o l d , θ ) ≤ δ \begin{aligned}&max_{\theta}L_{\theta_{old}}\left(\theta\right)\\&\text{subject to }D_{KL}^{max}\left(\theta_{old},\theta\right)\leq\delta\end{aligned} ?maxθ?Lθold??(θ)subject?to?DKLmax?(θold?,θ)≤δ?
然而,原文还进一步进行了近似,使用KL散度的期望代替最大的KL散度(不知道为啥),代替后直接蒙特卡洛近似就能之前求出来,因此表达式可以写为:
m
a
x
θ
L
θ
o
l
d
(
θ
)
subject?to?
D
ˉ
K
L
ρ
θ
o
l
d
(
θ
o
l
d
,
θ
)
≤
δ
\begin{aligned}&max_{\theta}L_{\theta_{old}}\left(\theta\right)\\&\text{subject to }\bar{D}_{KL}^{\rho_{\theta old}}\left(\theta_{old},\theta\right)\leq\delta\end{aligned}
?maxθ?Lθold??(θ)subject?to?DˉKLρθold??(θold?,θ)≤δ?
我们
m
a
x
θ
L
θ
o
l
d
(
θ
)
max_{\theta}L_{\theta_{old}}\left(\theta\right)
maxθ?Lθold??(θ)的主要目的是得到新的策略网络,因此在此式子之中,旧策略网络
π
\pi
π的参数
θ
o
l
d
\theta_{old}
θold?相当于是已知量,因此我们实际需要最大化的部分是下式的最右边的那一项:
L
π
(
π
~
)
=
η
(
π
)
+
∑
s
ρ
π
(
s
)
∑
a
π
~
(
a
∣
s
)
A
π
(
s
,
a
)
L_\pi(\tilde{\pi})=\eta(\pi)+\sum_s\rho_\pi(s)\sum_a\tilde{\pi}(a\mid s)A_\pi(s,a)
Lπ?(π~)=η(π)+s∑?ρπ?(s)a∑?π~(a∣s)Aπ?(s,a)
也就是:
∑
s
ρ
π
(
s
)
∑
a
π
~
(
a
∣
s
)
A
π
(
s
,
a
)
\sum_s\rho_\pi\left(s\right)\sum_a\tilde{\pi}(a\mid s)A_\pi\left(s,a\right)
s∑?ρπ?(s)a∑?π~(a∣s)Aπ?(s,a)
上面这个式子实际上就是替代优势函数(surrogate advantage)
L
(
θ
k
,
θ
)
\mathcal{L}(\theta_{k},\theta)
L(θk?,θ)的原型。为了计算上面的式子,我们需要使用蒙特卡洛方法,因此先将其写成期望的形势:
L
(
θ
k
,
θ
)
=
∑
s
ρ
π
(
s
)
∑
a
π
~
(
a
∣
s
)
A
π
(
s
,
a
)
=
E
s
~
ρ
π
,
a
~
π
~
[
A
π
(
s
,
a
)
]
\mathcal{L}(\theta_{k},\theta)=\sum_s\rho_\pi\left(s\right)\sum_a\tilde{\pi}(a\mid s)A_\pi\left(s,a\right)=\mathop{\mathrm{E}}_{s\sim\rho_\pi,a\sim\tilde{\pi}}\left[A_\pi\left(s,a\right)\right]
L(θk?,θ)=s∑?ρπ?(s)a∑?π~(a∣s)Aπ?(s,a)=Es~ρπ?,a~π~?[Aπ?(s,a)]
但是,问题来了,注意观察期望分布的服从函数 s ~ ρ π , a ~ π ~ s\sim\rho_\pi,a\sim\tilde{\pi} s~ρπ?,a~π~,可见状态的获取和动作的获取分别依赖于旧的策略 π \pi π和新策略 π ~ {\tilde \pi } π~,这就给采样带来了很大的困难。具体表现为,动作a服从的分布来自于新网络 π ~ {\tilde \pi } π~,每更新一次网络,就需要服从更加新的网络的a来进行计算,因此每次采样的数据只能用于一次网络更新,效率非常低(一次采样数据无法使用batch多次训练)。
重要性采样的基本公式如下所示(可以更换期望服从的分布):
E
x
~
p
(
x
)
[
f
(
x
)
]
=
∫
p
(
x
)
f
(
x
)
d
x
=
∫
q
(
x
)
q
(
x
)
p
(
x
)
f
(
x
)
d
x
=
∫
q
(
x
)
p
(
x
)
q
(
x
)
f
(
x
)
d
x
=
E
x
~
q
(
x
)
[
p
(
x
)
q
(
x
)
f
(
x
)
]
\begin{aligned} E_{x\sim p(x)}[f(x)]& =\int p(x)f(x)dx \\ &=\int\frac{q(x)}{q(x)}p(x)f(x)dx \\ &=\int q(x)\frac{p(x)}{q(x)}f(x)dx \\ &=E_{x\sim q(x)}\left[\frac{p(x)}{q(x)}f(x)\right] \end{aligned}
Ex~p(x)?[f(x)]?=∫p(x)f(x)dx=∫q(x)q(x)?p(x)f(x)dx=∫q(x)q(x)p(x)?f(x)dx=Ex~q(x)?[q(x)p(x)?f(x)]?
由此可得:
E
s
~
ρ
π
,
a
~
π
~
[
A
π
(
s
,
a
)
]
=
E
s
~
ρ
π
,
a
~
π
[
π
~
(
a
∣
s
)
π
(
a
∣
s
)
A
π
(
s
,
a
)
]
\mathop{\mathrm{E}}_{s\sim\rho_\pi,a\sim\tilde{\pi}}\left[A_\pi\left(s,a\right)\right] = {E_{s\sim\rho_\pi,a\sim{\pi}}}\left[ {\frac{{{\tilde\pi }(a|s)}}{{{\pi _{{{{}}}}}(a|s)}}{A_{\pi}}(s,a)} \right]
Es~ρπ?,a~π~?[Aπ?(s,a)]=Es~ρπ?,a~π?[π?(a∣s)π~(a∣s)?Aπ?(s,a)]
由此,动作和状态都依赖与旧策略
π
\pi
π,我们可以愉快的使用同一组数据多次对网络进行更新啦。
因此,最终得到的优化式子就是(使用了KL散度的期望代替最大的KL散度):
max ? θ E s ~ ρ θ o l d , a ~ θ o l d [ π θ ( a ∣ s ) π θ o l d ( a ∣ s ) A θ o l d ( s , a ) ] s u b j e c t ?? t o E s ~ ρ θ o l d [ D K L ( π θ o l d ( ? ∣ s ) ∥ π θ ( ? ∣ s ) ) ] ≤ δ \begin{array}{l} {\max _\theta }E{_{s\sim{\rho _{{\theta _{old}}}},a\sim\theta_{old} }}\left[ {\frac{{{\pi _\theta }(a\mid s)}}{{{\pi _{{\theta _{old}}}}(a\mid s)}}{A_{{\theta _{old}}(s,a)}}} \right]\\ subject\;to\quad {E_{s\sim{\rho _{{\theta _{old}}}}}}\left[ {{D_{KL}}({\pi _{{\theta _{old}}}}( \cdot \mid s)\parallel {\pi _\theta }( \cdot \mid s))} \right] \le \delta \end{array} maxθ?Es~ρθold??,a~θold??[πθold??(a∣s)πθ?(a∣s)?Aθold?(s,a)?]subjecttoEs~ρθold???[DKL?(πθold??(?∣s)∥πθ?(?∣s))]≤δ?