视频链接:https://www.youtube.com/watch?v=fcSYiyvPjm4&list=PLp0tvPwd1T7AD822A9tJ-jfQnMtSKh_Rz&index=3&ab_channel=ShusenWang
TRPO算法重复着两个步骤:
- 近似:我们构建一个 L ( θ ∣ θ o l d ) L(\theta|\theta_{old}) L(θ∣θold)函数,在信赖域内近似于价值函数 J ( θ ) J(\theta) J(θ)。
- 最大化:在信赖域内,找到一组新的参数,使得 L ( θ ∣ θ o l d ) L(\theta|\theta_{old}) L(θ∣θold)最大化。
近似:
V π ( s ) = ∑ a π ( a ∣ s ; θ ) ∗ Q π ( s , a ) = ∑ a π ( a ∣ s ; θ o l d ) π ( a ∣ s ; θ ) π ( a ∣ s ; θ o l d ) ∗ Q π ( s , a ) = E A ~ π ( a ∣ s ; θ o l d ) [ π ( a ∣ s ; θ ) π ( a ∣ s ; θ o l d ) ∗ Q π ( s , a ) ] V_{\pi}(s) = \sum_a \pi(a|s;\theta) * Q_{\pi}(s,a) \\ = \sum_a \pi(a|s;\theta_{old})\frac{\pi(a|s;\theta)}{\pi(a|s;\theta_{old})} * Q_{\pi}(s,a) \\ = E_{A~\pi(a|s;\theta_{old})}[\frac{\pi(a|s;\theta)}{\pi(a|s;\theta_{old})} * Q_{\pi}(s,a)] Vπ(s)=a∑π(a∣s;θ)∗Qπ(s,a)=a∑π(a∣s;θold)π(a∣s;θold)π(a∣s;θ)∗Qπ(s,a)=EA~π(a∣s;θold)[π(a∣s;θold)π(a∣s;θ)∗Qπ(s,a)]
J ( θ ) = E S [ V π ( S ) ] = E S , A [ π ( A ∣ S ; θ ) π ( A ∣ S ; θ o l d ) ∗ Q π ( S , A ) ] J(\theta) = E_S[V_{\pi}(S)] \\ = E_{S,A}[\frac{\pi(A|S;\theta)}{\pi(A|S;\theta_{old})} * Q_{\pi}(S,A)] J(θ)=ES[Vπ(S)]=ES,A[π(A∣S;θold)π(A∣S;θ)∗Qπ(S,A)]
这是TRPO的最重要的公式。
在实际运用中,我们做蒙特卡洛近似,如果对于旧策略,我们收集到的数据如下:
s
1
,
a
1
,
r
1
,
s
2
,
a
2
,
r
2
,
.
.
.
,
s
n
,
a
n
,
r
n
s_1,a_1,r_1,s_2,a_2,r_2,...,s_n,a_n,r_n
s1,a1,r1,s2,a2,r2,...,sn,an,rn
公式改变如下:
L
(
θ
∣
θ
o
l
d
)
=
1
n
∑
i
=
1
n
π
(
a
i
∣
s
i
;
θ
)
π
(
a
i
∣
s
i
;
θ
o
l
d
)
∗
Q
π
(
s
i
,
a
i
)
L(\theta|\theta_{old}) = \frac{1}{n}\sum_{i=1}^{n}\frac{\pi(a_i|s_i;\theta)}{\pi(a_i|s_i;\theta_{old})} * Q_{\pi}(s_i,a_i)
L(θ∣θold)=n1i=1∑nπ(ai∣si;θold)π(ai∣si;θ)∗Qπ(si,ai)
这里L就是对J的近似,但这里还无法对L做最大化,原因在于动作价值函数Q我们并不知道是什么,所以我们也要对它做近似。
对于Q是动作价值的期望,我们对它做蒙特卡洛近似,根据折扣函数,可得:
u
i
=
r
i
+
γ
r
i
+
1
+
γ
2
r
i
+
2
.
.
.
+
γ
n
−
i
r
n
u_i = r_i + \gamma r_{i+1} + \gamma^2r_{i+2}... + \gamma^{n-i} r_n
ui=ri+γri+1+γ2ri+2...+γn−irn
我们可以用这种计算方式来代替Q。我们可以用这种计算方式来代替Q。这里我们也可以把Q换成A,也就是优势函数:
A
=
Q
−
V
=
γ
V
t
+
1
+
R
t
−
V
t
A = Q- V = \gamma V_{t+1} + R_{t} - V_t
A=Q−V=γVt+1+Rt−Vt
最大化
有了上面的近似以后,我们对其在信赖域内作最大化:通过调整策略网络参数,使得新的策略网络的奖励期望越大越好。数学公式表达为:
θ
n
e
w
←
a
r
g
m
a
x
θ
L
(
θ
∣
θ
o
l
d
)
s
.
t
.
θ
∈
N
(
θ
o
l
d
)
\theta_{new} \leftarrow argmax_{\theta}L(\theta|\theta_{old}) \\ s.t. \theta \in N{(\theta_{old})}
θnew←argmaxθL(θ∣θold)s.t.θ∈N(θold)
有很多方式表达两组参数的距离,这里介绍两种:
-
二范数距离,即两者的欧式距离,平方和后开方:
∣ ∣ θ − θ o l d ∣ ∣ < Δ ||\theta - \theta_{old}|| < \Delta ∣∣θ−θold∣∣<Δ -
KL散度:这不是用来衡量两组参数的,而是用来衡量网络输出的概率分布的,概率分布的区别越大,KL散度越大,区别越小越趋近于0,也叫相对熵。
离散形式
K L ( P ∣ ∣ Q ) = ∑ P ( x ) l o g P ( x ) Q ( x ) KL(P||Q) = \sum P(x)log \frac{P(x)}{Q(x)} KL(P∣∣Q)=∑P(x)logQ(x)P(x)
连续形式:
K L ( P ∣ ∣ Q ) = ∫ P ( x ) l o g P ( x ) Q ( x ) d x KL(P||Q) = \int P(x)log \frac{P(x)}{Q(x)}dx KL(P∣∣Q)=∫P(x)logQ(x)P(x)dx
那么这里的约束条件就是:
1
n
∑
i
=
1
n
K
L
[
π
(
.
∣
s
i
;
θ
o
l
d
)
∣
∣
π
(
.
∣
s
i
;
θ
)
]
<
Δ
\frac{1}{n} \sum_{i=1}^{n} KL[\pi(.|s_i;\theta_{old})||\pi(.|s_i;\theta)] < \Delta
n1i=1∑nKL[π(.∣si;θold)∣∣π(.∣si;θ)]<Δ
至此,游戏完成了一轮episode,我们进行了一次参数更新,往往更新进行很多次才能得到一个比较好的策略网络。
TRPO的优点是曲线稳定不会剧烈波动,对学习率设置不会太敏感。而且观察到更少的奖励就能达到跟策略梯度算法相同的表现。