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工程)
11.1、信赖域策略优化算法TRPO强化学习-理论分析中详细介绍了TRPO的理论以及如何将TRPO强化学习问题转化为数学的优化式子的求解问题,要求解的式子为:
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))]≤δ?
这实际上是一个优化问题,我们可以使用迭代法进行求解。
定义优化式子为(单纯为了减少书写):
max
?
θ
L
θ
o
l
d
(
θ
)
=
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 }{L_{{\theta _{old}}}}(\theta ) ={\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θ?Lθold??(θ)=maxθ?Es~ρθold??,a~θold??[πθold??(a∣s)πθ?(a∣s)?Aθold?(s,a)?]subjecttoEs~ρθold???[DKL?(πθold??(?∣s)∥πθ?(?∣s))]≤δ?
此处需要使用泰勒展开对优化式子进行近似,泰勒公式的基本形式如下(Rn为无穷小项):
f ( x ) = f ( x 0 ) + f ′ ( x 0 ) 1 ! ( x ? x 0 ) + f ′ ′ ( x 0 ) 2 ! ( x ? x 0 ) 2 + ? + f ( n ) ( x 0 ) n ! ( x ? x 0 ) n + R n R n ( x ) = o [ ( x ? x 0 ) n ] \begin{aligned}f(x)=f(x_0)+\frac{f'(x_0)}{1!}(x-x_0)+\frac{f''(x_0)}{2!}(x-x_0)^2+\cdots+\frac{f^{(n)}(x_0)}{n!}(x-x_0)^n+R_n\\R_n(x)=o[(x-x_0)^n]\end{aligned} f(x)=f(x0?)+1!f′(x0?)?(x?x0?)+2!f′′(x0?)?(x?x0?)2+?+n!f(n)(x0?)?(x?x0?)n+Rn?Rn?(x)=o[(x?x0?)n]?
首先对优化式子的第一个式子
L
θ
o
l
d
(
θ
)
{L_{{\theta _{old}}}}(\theta )
Lθold??(θ)在
θ
o
l
d
\theta_{old}
θold?进行一阶的泰勒展开(由于此处是最大化问题,第一项为常数可以忽略掉):
L
θ
o
l
d
(
θ
)
→
?
θ
L
θ
o
l
d
(
θ
)
∣
θ
=
θ
o
l
d
(
θ
?
θ
o
l
d
)
L_{\theta_{old}}(\theta)\to\nabla_{\theta}L_{\theta_{old}}(\theta)|_{\theta=\theta_{old}}(\theta-\theta_{old})
Lθold??(θ)→?θ?Lθold??(θ)∣θ=θold??(θ?θold?)
对于第二行的不等式约束,我们对其使用二阶泰勒展开(证明参考自然梯度Natural Policy):
D
K
L
ρ
o
l
d
 ̄
(
π
o
l
d
,
π
n
e
w
)
→
1
2
(
θ
?
θ
o
l
d
)
T
A
(
θ
o
l
d
)
(
θ
?
θ
o
l
d
)
H
=
A
(
θ
o
l
d
)
=
?
θ
2
D
K
L
ρ
o
l
d
 ̄
(
π
o
l
d
,
π
n
e
w
)
\begin{aligned}\overline{D_{KL}^{\rho_{old}}}(\pi_{old},\pi_{new})\to\frac12(\theta-\theta_{old})^TA(\theta_{old})(\theta-\theta_{old})\\\\H=A(\theta_{old})=\nabla_\theta^2\overline{D_{KL}^{\rho_{old}}}(\pi_{old},\pi_{new})\end{aligned}
DKLρold???(πold?,πnew?)→21?(θ?θold?)TA(θold?)(θ?θold?)H=A(θold?)=?θ2?DKLρold???(πold?,πnew?)?
由此,整个问题被再次近似(此处的
A
(
θ
o
l
d
)
A(\theta_{old})
A(θold?)和
H
H
H是等价的,都代表在
θ
=
θ
o
l
d
\theta=\theta_{old}
θ=θold?的二阶泰勒展开的导数,证明见自然梯度Natural Policy):
m
a
x
θ
[
?
θ
L
θ
o
l
d
(
θ
)
∣
θ
=
θ
o
l
d
?
(
θ
?
θ
o
l
d
)
]
subject?to
1
2
(
θ
?
θ
o
l
d
)
T
A
(
θ
o
l
d
)
(
θ
?
θ
o
l
d
)
≤
δ
\begin{aligned} &max_{\theta}\left[\nabla_{\theta}L_{\theta_{old}}(\theta)|_{\theta=\theta_{old}}\cdot(\theta-\theta_{old})\right] \\ &\text{subject to}\quad\frac12(\theta-\theta_{old})^TA(\theta_{old})(\theta-\theta_{old})\leq\delta \end{aligned}
?maxθ?[?θ?Lθold??(θ)∣θ=θold???(θ?θold?)]subject?to21?(θ?θold?)TA(θold?)(θ?θold?)≤δ?
为了方便书写,我们把求导的项用新变量代替:
g
T
=
?
θ
L
θ
o
l
d
(
θ
)
∣
θ
=
θ
o
l
d
{g^T} = {\nabla _\theta }{L_{{\theta _{old}}}}(\theta ){|_{\theta = {\theta _{old}}}}
gT=?θ?Lθold??(θ)∣θ=θold??
此外,对max函数取负号,将其转化为求min(一般优化求解都是求min):
min
?
θ
′
?
g
T
(
θ
′
?
θ
)
s
.
t
.
1
2
(
θ
′
?
θ
)
T
H
(
θ
′
?
θ
)
?
δ
<
0
\begin{aligned}\min_{\theta^{\prime}}-g^T(\theta^{\prime}-\theta)\\s.t.\frac{1}{2}(\theta^{\prime}-\theta)^TH(\theta^{\prime}-\theta)-\delta<0\end{aligned}
θ′min??gT(θ′?θ)s.t.21?(θ′?θ)TH(θ′?θ)?δ<0?
对于约束的最小化求解问题,此处使用拉格朗日乘子法(高数学过),将其进行转换,转换的详细理论参考:拉格朗日乘子法(二):不等式约束与KKT条件。转换后的方程变为:
方程:
L
(
θ
,
λ
)
=
?
g
T
(
θ
′
?
θ
)
+
λ
(
1
2
(
θ
′
?
θ
)
T
H
(
θ
′
?
θ
)
?
δ
)
{\mathcal L}(\theta,\lambda)=-g^{T}(\theta^{\prime}-\theta)+\lambda(\frac{1}{2}(\theta^{\prime}-\theta)^{T}H(\theta^{\prime}-\theta)-\delta)
L(θ,λ)=?gT(θ′?θ)+λ(21?(θ′?θ)TH(θ′?θ)?δ)
KKT约束:
{
?
L
?
θ
=
?
g
T
+
λ
(
θ
′
?
θ
)
H
=
0
λ
≥
0
λ
(
1
2
(
θ
′
?
θ
)
T
H
(
θ
′
?
θ
)
?
δ
)
=
0
1
2
(
θ
′
?
θ
)
T
H
(
θ
′
?
θ
)
?
δ
≤
0.
\left\{ \begin{array}{l} \frac{{\partial {\cal L}}}{{\partial \theta }} = - {g^T} + \lambda ({\theta ^\prime } - \theta )H = 0\\ \lambda \ge 0\\ \lambda \left( {\frac{1}{2}{{({\theta ^\prime } - \theta )}^T}H({\theta ^\prime } - \theta ) - \delta } \right) = 0\\ \frac{1}{2}{({\theta ^\prime } - \theta )^T}H({\theta ^\prime } - \theta ) - \delta \le 0. \end{array} \right.
?
?
???θ?L?=?gT+λ(θ′?θ)H=0λ≥0λ(21?(θ′?θ)TH(θ′?θ)?δ)=021?(θ′?θ)TH(θ′?θ)?δ≤0.?
对上述的约束条件进行求解,即可得到TRPO的更新表达式:
θ
′
=
2
δ
g
T
H
?
1
g
H
?
1
g
+
θ
\theta^{\prime}=\sqrt{\frac{2\delta}{g^{T}H^{-1}g}}H^{-1}g+\theta
θ′=gTH?1g2δ??H?1g+θ
H
?
1
g
{{H^{ - 1}}g}
H?1g非常难求,又需要求逆矩阵还需要和g相乘,在此使用共轭梯度法进行求解。共轭梯度法实际上是求解最小化二次函数的,如:
?
(
x
)
=
1
2
x
T
A
x
?
x
T
b
\phi(x)=\frac{1}{2}x^{T}Ax-x^{T}b
?(x)=21?xTAx?xTb
其中
b
,
x
∈
R
n
,
A
∈
R
n
×
n
b,x\in\mathbb{R}^n,A\in\mathbb{R}^{n\times n}
b,x∈Rn,A∈Rn×n且假设矩阵
A
A
A是对称正定的(SPD)。该函数的最小值
x
?
x^{*}
x?可以根据一阶最优条件得到,即导数为零
?
?
(
x
?
)
=
A
x
?
?
b
=
0
\nabla\phi(x^*)=Ax^*-b=0
??(x?)=Ax??b=0
这也意味着最小化
?
(
x
)
\phi(x)
?(x)等价于求解线性方程
A
x
=
b
Ax=b
Ax=b。此外,在TRPO算法中,由于二次函数的Hessian矩阵是半正定的,该解具有唯一性。
注意,这边求解的x实际上就是 H ? 1 g {{H^{ - 1}}g} H?1g(b=g,A=H)。共轭梯度法求解的详细过程参考我的另一个博客:最速下降法、梯度下降法、共轭梯度法—理论分析与实践
不知道兄弟们发现没有,在TRPO的策略网络的更新中,我们居然没有定义学习率唉。这是因为在训练过程中,学习率是已经给定了,以TRPO的更新式子为例:
θ
′
=
2
δ
g
T
H
?
1
g
H
?
1
g
+
θ
\theta^{\prime}=\sqrt{\frac{2\delta}{g^{T}H^{-1}g}}H^{-1}g+\theta
θ′=gTH?1g2δ??H?1g+θ
实际上TRPO使用的思路和自然梯度法类似,自然梯度法的更新式子如下:
?
~
θ
L
(
θ
)
=
F
?
?
1
?
θ
L
(
θ
)
θ
=
θ
?
α
?
~
θ
L
(
θ
)
\begin{aligned}\tilde{\nabla}_\theta\mathcal{L}(\theta)&=\operatorname{F}^{-1}\nabla_\theta\mathcal{L}(\theta)\\\\\theta&=\theta-\alpha\tilde{\nabla}_\theta\mathcal{L}(\theta)\end{aligned}
?~θ?L(θ)θ?=F?1?θ?L(θ)=θ?α?~θ?L(θ)?
因此,在TRPO算法中,其学习率lr为:
α
=
2
δ
g
T
H
?
1
g
\alpha=\sqrt{\frac{2\delta}{g^TH^{-1}g}}
α=gTH?1g2δ??
但是,我们此处使用了太多的近似,理论的方程并不一定是最好的,那我们我们该如何做呢?我们可以选择小于
α
\alpha
α的学习率多次尝试(如
0.
9
1
α
0.9^1\alpha
0.91α、
0.
9
2
α
0.9^2\alpha
0.92α、
0.
9
3
α
0.9^3\alpha
0.93α、
0.
9
4
α
0.9^4\alpha
0.94α…),直到找到一个能够提升替代优势
L
θ
o
l
d
(
θ
)
{L_{{\theta _{old}}}}(\theta )
Lθold??(θ)的学习率。
当然,此处的回溯衰减因子和最大的回溯次数都是超参数,在上面的例子中,回溯衰减因子为0.9,如果定义最大的回溯次数是5,那么我们最多尝试到 0. 9 5 α 0.9^5\alpha 0.95α,如果还是无法带来替代优势的提升,就跳过这一次更新了。
这个尝试的过程,被称为Line Search。
参考:Trust Region Policy Optimization