TRPO(Trust Region Policy Optimization)解决了A-C框架中更新梯度步长大小的问题,采用一种相对保守的策略更新梯度,引入信任区域和KL散度约束,使得每次更新幅度受限制,主要是TRPO能找到一个好的步长 α \alpha α来更新参数 θ = θ + α ∇ θ J ( θ ) \theta = \theta + \alpha\nabla_\theta J(\theta) θ=θ+α∇θJ(θ),除此之外,TRPO还加入了重要性采样IS和广义优势估计GAE还保证提高了样本的利用率。此时TRPO已经不严格满足on-policy算法,是一种近似算法了。下面讲解我们推导TRPO的过程。
1.目标函数的推导——优势函数
TRPO的目标是最大化期望奖励,我们从累计期望奖励的定义出发
J
(
π
θ
)
=
E
s
0
[
V
π
θ
(
s
0
)
]
J(\pi_\theta)= E_{s_0}[V^{\pi_\theta}(s_0)]
J(πθ)=Es0[Vπθ(s0)]
由于初始状态与策略无关,将期望目标转化为在新策略
π
θ
′
\pi_{\theta'}
πθ′的轨迹
J
(
π
θ
)
=
E
π
θ
′
[
∑
t
=
0
γ
t
V
π
θ
(
s
t
)
−
∑
t
=
1
γ
t
V
π
θ
(
s
t
)
]
=
E
π
θ
′
[
∑
t
=
0
γ
t
V
π
θ
(
s
t
)
−
∑
t
=
0
γ
t
+
1
V
π
θ
(
s
t
+
1
)
]
=
−
E
π
θ
′
[
∑
t
=
0
γ
t
(
γ
V
π
θ
(
s
t
+
1
)
−
V
π
θ
(
s
t
)
)
]
J(\pi_\theta)=E_{\pi_{\theta'}}[\sum_{t=0}\gamma^t V^{\pi_\theta}(s_t)-\sum_{t=1}\gamma^tV^{\pi_\theta}(s_t)]=E_{\pi_{\theta'}}[\sum_{t=0}\gamma^t V^{\pi_\theta}(s_t)-\sum_{t=0}\gamma^{t+1}V^{\pi_{\theta}}(s_{t+1})]\\= - E_{\pi_{\theta'}}[\sum_{t=0}\gamma^t(\gamma V^{\pi_\theta}(s_{t+1})-V^{\pi_{\theta}}(s_t))]
J(πθ)=Eπθ′[t=0∑γtVπθ(st)−t=1∑γtVπθ(st)]=Eπθ′[t=0∑γtVπθ(st)−t=0∑γt+1Vπθ(st+1)]=−Eπθ′[t=0∑γt(γVπθ(st+1)−Vπθ(st))]
我们将策略目标相减:前者用原始定义,后者用状态价值函数定义
J
(
π
θ
′
)
−
J
(
π
θ
)
=
E
π
θ
′
[
∑
t
=
0
γ
t
r
(
s
t
,
a
t
)
]
+
E
π
θ
′
[
∑
t
=
0
γ
t
(
γ
V
π
θ
(
s
t
+
1
)
−
V
π
θ
(
s
t
)
)
]
=
E
π
θ
′
[
∑
t
=
0
γ
t
[
r
(
s
t
,
a
t
)
+
γ
V
π
θ
(
s
t
+
1
)
−
V
π
θ
(
s
t
)
)
]
]
J(\pi_{\theta'})-J(\pi_\theta)= E_{\pi_{\theta'}}[\sum_{t=0}\gamma ^tr(s_t,a_t)]+ E_{\pi_{\theta'}}[\sum_{t=0}\gamma^t(\gamma V^{\pi_\theta}(s_{t+1})-V^{\pi_{\theta}}(s_t))]\\= E_{\pi_{\theta'}}[\sum_{t=0}\gamma^t[r(s_t,a_t)+\gamma V^{\pi_\theta}(s_{t+1})-V^{\pi_{\theta}}(s_t))]]
J(πθ′)−J(πθ)=Eπθ′[t=0∑γtr(st,at)]+Eπθ′[t=0∑γt(γVπθ(st+1)−Vπθ(st))]=Eπθ′[t=0∑γt[r(st,at)+γVπθ(st+1)−Vπθ(st))]]
对于
r
(
s
t
,
a
t
)
+
γ
V
π
θ
(
s
t
+
1
)
−
V
π
θ
(
s
t
)
)
r(s_t,a_t)+\gamma V^{\pi_\theta}(s_{t+1})-V^{\pi_{\theta}}(s_t))
r(st,at)+γVπθ(st+1)−Vπθ(st)),我们在A2C已经见过一次了,就是时序残差定义下的优势函数,可记为
A
π
θ
(
s
t
,
a
t
)
A^{\pi_\theta}(s_t,a_t)
Aπθ(st,at)
J
(
π
θ
′
)
−
J
(
π
θ
)
=
E
π
θ
′
[
∑
t
=
0
γ
t
A
π
θ
(
s
t
,
a
t
)
]
J(\pi_{\theta'})-J(\pi_\theta)=E_{\pi_{\theta'}}[\sum_{t=0}\gamma^t{A^{\pi_\theta}(s_t,a_t)}]
J(πθ′)−J(πθ)=Eπθ′[t=0∑γtAπθ(st,at)]
2.展开新旧策略回报之差
我们将
E
π
θ
′
[
∑
t
=
0
γ
t
A
π
θ
(
s
t
,
a
t
)
]
E_{\pi_{\theta'}}[\sum_{t=0}\gamma^t{A^{\pi_\theta}(s_t,a_t)}]
Eπθ′[∑t=0γtAπθ(st,at)]中的期望进行展开,对于策略
π
θ
\pi_\theta
πθ下,计算每个时间步t时候状态
s
t
s_t
st的条件概率
P
(
s
t
=
s
∣
π
θ
)
P(s_t=s|\pi_\theta)
P(st=s∣πθ),然后对所有可能状态和动作求和:
E
π
θ
′
[
∑
t
=
0
γ
t
A
π
θ
(
s
t
,
a
t
)
]
=
∑
s
∑
a
∑
t
=
0
γ
t
P
(
s
t
=
s
∣
π
θ
′
)
π
θ
′
(
a
∣
s
)
A
π
θ
(
s
t
,
a
t
)
=
∑
s
∑
t
=
0
γ
t
P
(
s
t
=
s
∣
π
θ
′
)
∑
a
π
θ
′
(
a
∣
s
)
A
π
θ
(
s
t
,
a
t
)
=
∑
s
ρ
π
θ
′
(
s
)
∑
a
π
θ
′
(
a
∣
s
)
A
π
θ
(
s
t
,
a
t
)
E_{\pi_{\theta'}}[\sum_{t=0}\gamma^t{A^{\pi_\theta}(s_t,a_t)}]=\sum_s\sum_a\sum_{t=0}\gamma^tP(s_t=s|\pi_{\theta'})\pi_{\theta'}(a|s){A^{\pi_\theta}(s_t,a_t)}\\=\sum_s\sum_{t=0}\gamma^tP(s_t=s|\pi_{\theta'})\sum_a\pi_{\theta'}(a|s){A^{\pi_\theta}(s_t,a_t)} \\=\sum_s\rho_{\pi_{\theta'}}(s)\sum_a\pi_{\theta'}(a|s){A^{\pi_\theta}(s_t,a_t)}
Eπθ′[t=0∑γtAπθ(st,at)]=s∑a∑t=0∑γtP(st=s∣πθ′)πθ′(a∣s)Aπθ(st,at)=s∑t=0∑γtP(st=s∣πθ′)a∑πθ′(a∣s)Aπθ(st,at)=s∑ρπθ′(s)a∑πθ′(a∣s)Aπθ(st,at)
令
ρ
π
θ
′
(
s
)
=
∑
t
=
0
γ
t
P
(
s
t
=
s
∣
π
θ
′
)
\rho_{\pi_{\theta'}}(s) = \sum_{t=0}\gamma^tP(s_t=s|\pi_{\theta'})
ρπθ′(s)=∑t=0γtP(st=s∣πθ′),此时公式后部分如果能保证为正,就能说明新策略一定比旧策略好
3.近似优化
ρ
π
θ
′
(
s
)
\rho_{\pi_{\theta'}}(s)
ρπθ′(s)造成了整个式子难以计算,我们考虑将其近似为旧策略,此时用
L
π
(
π
θ
′
)
L_\pi(\pi_{\theta'})
Lπ(πθ′)表示与旧策略相近的新策略产生的回报:
L
π
(
π
θ
′
)
=
J
(
π
θ
)
+
∑
s
ρ
π
θ
′
(
s
)
∑
a
π
θ
′
(
a
∣
s
)
A
π
θ
(
s
t
,
a
t
)
L_\pi(\pi_{\theta'})=J(\pi_{\theta})+\sum_s\rho_{\pi_{\theta'}}(s)\sum_a\pi_{\theta'}(a|s){A^{\pi_\theta}(s_t,a_t)}
Lπ(πθ′)=J(πθ)+s∑ρπθ′(s)a∑πθ′(a∣s)Aπθ(st,at)
- 第一次估计:我们忽略策略间状态空间分布的改变
L π ( π θ ′ ) = J ( π θ ) + ∑ s ρ π θ ( s ) ∑ a π θ ′ ( a ∣ s ) A π θ ( s t , a t ) L_\pi(\pi_{\theta'})=J(\pi_{\theta})+\sum_s\rho_{\pi_{\theta}}(s)\sum_a\pi_{\theta'}(a|s){A^{\pi_\theta}(s_t,a_t)} Lπ(πθ′)=J(πθ)+s∑ρπθ(s)a∑πθ′(a∣s)Aπθ(st,at)
- 第二次:我们利用重要性采样对动作分布进行处理
L π ( π θ ′ ) = J ( π θ ) + ∑ s ρ π θ ( s ) ∑ a π θ ′ ( a ∣ s ) π θ ( a ∣ s ) A π θ ( s t , a t ) L_\pi(\pi_{\theta'})=J(\pi_{\theta})+\sum_s\rho_{\pi_{\theta}}(s)\sum_a\frac{\pi_{\theta'}(a|s)}{\pi_{\theta}(a|s)}{A^{\pi_\theta}(s_t,a_t)} Lπ(πθ′)=J(πθ)+s∑ρπθ(s)a∑πθ(a∣s)πθ′(a∣s)Aπθ(st,at)
重要性采样(Important Sample,IS)
重要性采样是一种用于估计在一个概率分布下的期望值的方法,尤其在强化学习中经常用于评估不同策略下的期望回报。
考虑一个期望值的计算:
E π [ f ( x ) ] = ∑ x P π ( x ) ⋅ f ( x ) E_\pi[f(x)] =\sum_x P_\pi(x) \cdot f(x) Eπ[f(x)]=∑xPπ(x)⋅f(x)
其中, P π ( x ) P_\pi(x) Pπ(x) 是在策略 π 下状态 x 出现的概率。
如果我们希望用另一个策略 π′ 下的样本来估计这个期望值,可以使用重要性采样。重要性采样的基本思想是用策略 π 下的采样样本乘以一个权重来估计在策略 π*′ 下的期望值。
具体地,重要性采样估计期望值的公式为:
E π ′ [ f ( x ) ] ≈ 1 N ∑ i = 1 N π ′ ( x i ) π ( x i ) ⋅ f ( x i ) E_{\pi^{\prime}}[f(x)] \approx \frac{1}{N} \sum_{i=1}^N \frac{\pi^{\prime}\left(x_i\right)}{\pi\left(x_i\right)} \cdot f\left(x_i\right) Eπ′[f(x)]≈N1∑i=1Nπ(xi)π′(xi)⋅f(xi)
在强化学习中,重要性采样常用于评估不同策略下的价值函数或策略梯度。在策略迭代算法中,通过重要性采样可以估计在新策略下的期望回报,从而进行策略的改进。
4.带约束问题求解
我们做了两次近似,但我们要保证策略确实很相近,我们明确需要一种方法,估计两个策略很相近:
TRPO使用KL散度衡量整体的优化公式:约束KL散度即可将其限制在一定距离内
D
K
L
(
π
′
∣
∣
π
)
=
∑
s
∑
a
π
′
(
a
∣
s
)
log
(
π
′
(
a
∣
s
)
π
(
a
∣
s
)
)
D_{\mathrm{KL}}\left(\pi^{\prime}|| \pi\right)=\sum_s \sum_a \pi^{\prime}(a \mid s) \log \left(\frac{\pi^{\prime}(a \mid s)}{\pi(a \mid s)}\right)
DKL(π′∣∣π)=s∑a∑π′(a∣s)log(π(a∣s)π′(a∣s))
策略是概率分布,在欧氏空间中我们能用L2距离,L1距离等衡量距离。但是在概率空间中,我们衡量两个策略相近的一种常见方法是使用Kullback-Leibler(KL)散度。KL散度是一种用于衡量两个概率分布之间差异的度量,包括在策略空间中用于度量两个策略的相似性。具体原理,可以从Natural Policy Gradient中学习。
此时带约束的优化问题表示如下
m
a
x
θ
L
π
(
π
θ
′
)
s
.
t
.
D
K
L
(
π
′
∣
∣
π
)
=
∑
s
∑
a
π
′
(
a
∣
s
)
log
(
π
′
(
a
∣
s
)
π
(
a
∣
s
)
)
≤
δ
max_{\theta}L_\pi(\pi_{\theta'})\\ s.t.D_{\mathrm{KL}}\left(\pi^{\prime}|| \pi\right)=\sum_s \sum_a \pi^{\prime}(a \mid s) \log \left(\frac{\pi^{\prime}(a \mid s)}{\pi(a \mid s)}\right)≤\delta
maxθLπ(πθ′)s.t.DKL(π′∣∣π)=s∑a∑π′(a∣s)log(π(a∣s)π′(a∣s))≤δ
由于此问题是一个不等式约束优化,我们考虑对其转化为约束函数求最值——Lagrangigan乘数法
拉格朗日乘数法:讨论约束不等式$g(x)≤ 0 的原始可行性,假设 的原始可行性,假设 的原始可行性,假设x^*$为约束条件最优解
- g(x) = 0:边界解,此时约束条件有效,驻点存在于约束条件边界,存在 ∇ f = − λ ∇ g \nabla f=-\lambda\nabla g ∇f=−λ∇g(定常方程式), λ ≥ 0 \lambda≥0 λ≥0(对偶可行性)
- g(x) < 0:内部解,约束条件无效,因此满足 ∇ f = 0 , λ = 0 \nabla f=0,\lambda=0 ∇f=0,λ=0
两种情况均满足:称为KKT条件
直接求解上式的带约束优化较为麻烦,我们先近似
- 第三次近似:我们利用泰勒展开近似 L π ( π θ ′ ) L_\pi(\pi_{\theta'}) Lπ(πθ′)和 D K L ( π ′ ∣ ∣ π ) D_{\mathrm{KL}}\left(\pi^{\prime}|| \pi\right) DKL(π′∣∣π)分别使用一阶近似和二阶近似,用 θ k \theta_k θk代替 θ \theta θ表示我们迭代计算已经进行k次了
L π ( π θ ′ ) ≈ g T ( θ ′ − θ k ) g = ∇ θ ′ L π ( π θ ′ ) = ∇ θ ′ [ J ( π θ ) + ∑ s ρ π θ ( s ) ∑ a π θ ′ ( a ∣ s ) π θ ( a ∣ s ) A π θ ( s t , a t ) ] D K L ( π ′ ∣ ∣ π ) ≈ 1 2 ( θ ′ − θ k ) T H ( θ ′ − θ k ) H = [ ˝ D K L ( π ′ ] ∣ ∣ π ) L_\pi(\pi_{\theta'})\approx g^T(\theta'-\theta_k) \\ g=\nabla_{\theta'} L_\pi(\pi_{\theta'})=\nabla_{\theta'}[J(\pi_{\theta})+\sum_s\rho_{\pi_{\theta}}(s)\sum_a\frac{\pi_{\theta'}(a|s)}{\pi_{\theta}(a|s)}{A^{\pi_\theta}(s_t,a_t)}] \\ D_{\mathrm{KL}}\left(\pi^{\prime}|| \pi\right)\approx\frac12(\theta'-\theta_k)^TH(\theta'-\theta_k) \\ H = \H[D_{\mathrm{KL}}\left(\pi^{\prime}]|| \pi\right) Lπ(πθ′)≈gT(θ′−θk)g=∇θ′Lπ(πθ′)=∇θ′[J(πθ)+s∑ρπθ(s)a∑πθ(a∣s)πθ′(a∣s)Aπθ(st,at)]DKL(π′∣∣π)≈21(θ′−θk)TH(θ′−θk)H=[˝DKL(π′]∣∣π)
此时优化目标为:
θ
k
+
1
=
a
r
g
m
a
x
θ
′
g
T
(
θ
′
−
θ
k
)
s
.
t
.
1
2
(
θ
′
−
θ
k
)
T
H
(
θ
′
−
θ
k
)
≤
δ
\theta_{k+1}=argmax_{\theta'}\space g^T(\theta'-\theta_k) \\s.t.\frac12(\theta'-\theta_k)^TH(\theta'-\theta_k)≤\delta
θk+1=argmaxθ′ gT(θ′−θk)s.t.21(θ′−θk)TH(θ′−θk)≤δ
该问题的KKT解为:
θ
k
+
1
=
θ
k
+
2
δ
g
T
H
−
1
g
H
−
1
g
\theta_{k+1}=\theta_k+\sqrt{\frac{2 \delta}{g^T H^{-1} g}} H^{-1} g
θk+1=θk+gTH−1g2δH−1g
5.共轭梯度与线性搜索
我们发现优化后的KKT解存在逆矩阵,逆矩阵的存储和计算需要大量计算空间和时间,TRPO考虑采样共轭梯度法,直接计算
x
=
H
−
1
g
x=H^{-1}g
x=H−1g,所求
x
x
x就是参数更新方向。假设带约束优化时参数更新最大步长为
β
\beta
β,此时KL散度可取最大值,公式如下:
1
2
(
β
x
)
T
H
(
β
x
)
=
δ
\frac{1}{2}(\beta x)^T H(\beta x)=\delta
21(βx)TH(βx)=δ
得出
β
=
2
δ
x
T
H
x
\beta=\sqrt{\frac{2 \delta}{x^T H x}}
β=xTHx2δ,可得参数更新方式:
θ
k
+
1
=
θ
k
+
2
δ
x
T
H
x
x
\theta_{k+1}=\theta_k+\sqrt{\frac{2 \delta}{x^T H x}} x
θk+1=θk+xTHx2δx
在具体的共轭梯度计算中,我们只存储
H
x
Hx
Hx向量,不存储H矩阵,避免大矩阵的出现。
TRPO第三次近似时,利用泰勒展开的一阶和二阶进行近似,KL散度对第一次和第二次的近似做了限制,但是第三次还需要一个限制,当前状态未必满足KL散度限制,我们考虑在每次迭代的最后一次进行线性搜索,以确保找到满足条件,不断缩小步长。
θ
k
+
1
=
θ
k
+
α
i
2
δ
x
T
H
x
x
\theta_{k+1}=\theta_k+\alpha^i \sqrt{\frac{2 \delta}{x^T H x}} x
θk+1=θk+αixTHx2δx
其中$\alpha
取
0
1
,寻找一个
i
值,
取 0 ~ 1,寻找一个 i 值,
取0 1,寻找一个i值,i \in{1,2, \ldots, K}$,这是TRPO最终的更新目标
6.广义优势估计
TRPO(Trust Region Policy Optimization)算法引入广义优势估计(GAE)的主要目的是为了改进对优势函数的估计,以更稳定地进行策略更新。
上文我们对
θ
k
\theta_k
θk进行了详细的分析,最终得出了计算公式,不过——
A
π
θ
(
s
t
,
a
t
)
A^{\pi_\theta}(s_t,a_t)
Aπθ(st,at)怎么求呢,我们给出一种计算方式,广义优势估计,令
δ
t
=
r
t
+
γ
V
(
s
t
+
1
)
−
V
(
s
t
)
\delta_t=r_t+\gamma V(s_{t+1})-V(s_t)
δt=rt+γV(st+1)−V(st)
A
t
(
1
)
=
δ
t
=
−
V
(
s
t
)
+
r
t
+
γ
V
(
s
t
+
1
)
A
t
(
2
)
=
δ
t
+
γ
δ
t
+
1
=
−
V
(
s
t
)
+
r
t
+
γ
r
t
+
1
+
γ
2
V
(
s
t
+
2
)
A
t
(
3
)
=
δ
t
+
γ
δ
t
+
1
+
γ
2
δ
t
+
2
=
−
V
(
s
t
)
+
r
t
+
γ
r
t
+
1
+
γ
2
r
t
+
2
+
γ
3
V
(
s
t
+
3
)
⋮
⋮
A
t
(
k
)
=
∑
l
=
0
k
−
1
γ
l
δ
t
+
l
=
−
V
(
s
t
)
+
r
t
+
γ
r
t
+
1
+
…
+
γ
k
−
1
r
t
+
k
−
1
+
γ
k
V
(
s
t
+
k
)
\begin{array}{lc} A_t^{(1)}=\delta_t & =-V\left(s_t\right)+r_t+\gamma V\left(s_{t+1}\right) \\ A_t^{(2)}=\delta_t+\gamma \delta_{t+1} & =-V\left(s_t\right)+r_t+\gamma r_{t+1}+\gamma^2 V\left(s_{t+2}\right) \\ A_t^{(3)}=\delta_t+\gamma \delta_{t+1}+\gamma^2 \delta_{t+2} & =-V\left(s_t\right)+r_t+\gamma r_{t+1}+\gamma^2 r_{t+2}+\gamma^3 V\left(s_{t+3}\right) \\ \vdots & \vdots \\ A_t^{(k)}=\sum_{l=0}^{k-1} \gamma^l \delta_{t+l} & =-V\left(s_t\right)+r_t+\gamma r_{t+1}+\ldots+\gamma^{k-1} r_{t+k-1}+\gamma^k V\left(s_{t+k}\right) \end{array}
At(1)=δtAt(2)=δt+γδt+1At(3)=δt+γδt+1+γ2δt+2⋮At(k)=∑l=0k−1γlδt+l=−V(st)+rt+γV(st+1)=−V(st)+rt+γrt+1+γ2V(st+2)=−V(st)+rt+γrt+1+γ2rt+2+γ3V(st+3)⋮=−V(st)+rt+γrt+1+…+γk−1rt+k−1+γkV(st+k)
然后,GAE 将这些不同步数的优势估计进行指数加权平均:
我们定义参数 λ ∈ [ 0 , 1 ] \lambda\in[0,1] λ∈[0,1],当 λ = 0 \lambda=0 λ=0得出的即单步时序差分的结果, λ = 1 \lambda=1 λ=1表示每一步差分得到优势的完全平均值
GAE 主要在两个方面对 TRPO 产生了影响:
- 减少方差: GAE 考虑了未来多个时间步的奖励,相比于传统的时序差分目标,它在估计动作优势时减少了方差。这有助于提高对优势的准确估计,使策略更新更为稳定。方差的减少对于策略梯度方法的训练非常重要,因为高方差可能导致训练的不稳定性。
- 更准确的策略更新: TRPO 使用 KL 散度作为约束来控制每次策略更新的幅度,而使用 GAE 估计的优势可以更准确地反映动作的长期影响。这有助于避免一些不稳定的策略更新,提高了算法的收敛性和稳定性。
参考资料:
动手学强化学习