作为一个新手,写这个强化学习-基础知识专栏是想和大家分享一下自己学习强化学习的学习历程,希望对大家能有所帮助。这个系列后面会不断更新,希望自己在2021年能保证平均每日一更的更新速度,主要是介绍强化学习的基础知识,后面也会更新强化学习的论文阅读专栏。本来是想每一篇多更新一点内容的,后面发现大家上CSDN主要是来提问的,就把很多拆分开来了(而且这样每天任务量也小一点哈哈哈哈偷懒大法)。但是我还是希望知识点能成系统,所以我在目录里面都好按章节系统地写的,而且在github上写成了书籍的形式,如果大家觉得有帮助,希望从头看的话欢迎关注我的github啊,谢谢大家!另外我还会分享深度学习-基础知识专栏以及深度学习-论文阅读专栏,很早以前就和小伙伴们花了很多精力写的,如果有对深度学习感兴趣的小伙伴也欢迎大家关注啊。大家一起互相学习啊!可能会有很多错漏,希望大家批评指正!不要高估一年的努力,也不要低估十年的积累,与君共勉!
GAE
GAE全称是generalized advantage estimator,几乎所有最先进的policy gradient算法实现里面都使用了该技术。
我们已经知道在策略梯度法中,如果直接使用 On-Policy 的方法交互采样,并用 每一时刻的回报作为梯度中的长期回报估计
∑
t
′
=
t
T
γ
t
′
−
t
r
t
′
,
\sum_{t^{\prime}=t}^{T} \gamma^{t^{\prime}-t} \boldsymbol{r}_{t^{\prime}},
∑t′=tTγt′−trt′, 会使算法产生较大的波动,换句话说,梯度的方差会比较大。如果采用 Actor-Critic 的方法,通过模型估计状态的价值,那么模型优化的方差会减小,但是由于函数拟合的问题,这个方法会产生一定偏差。因此问题的关键就在于如何平衡偏差和方差带来的影响。
Actor Critic 的价值梯度可以表示为
∇
θ
J
(
θ
)
=
E
s
,
a
∼
τ
[
∑
t
=
0
∞
A
π
,
γ
(
s
t
,
a
t
)
∇
θ
log
π
θ
(
a
t
∣
s
t
)
]
\nabla_{\theta} J(\theta)=E_{\boldsymbol{s}, a \sim \boldsymbol{\tau}}\left[\sum_{t=0}^{\infty} A^{\pi, \gamma}\left(\boldsymbol{s}_{t}, \boldsymbol{a}_{t}\right) \nabla_{\theta} \log \pi_{\theta}\left(\boldsymbol{a}_{t} \mid \boldsymbol{s}_{t}\right)\right]
∇θJ(θ)=Es,a∼τ[t=0∑∞Aπ,γ(st,at)∇θlogπθ(at∣st)]
其中
A
π
,
γ
(
s
t
,
a
t
)
=
Q
π
,
γ
(
s
t
,
a
t
)
−
V
π
,
γ
(
s
t
)
Q
π
,
γ
(
s
t
,
a
t
)
=
E
s
t
+
1
,
a
t
+
1
∼
τ
[
∑
l
=
0
∞
γ
l
r
t
+
l
]
V
π
,
γ
(
s
t
)
=
E
s
t
+
1
,
a
t
∼
τ
[
∑
l
=
0
∞
γ
l
r
t
+
l
]
\begin{aligned} A^{\pi, \gamma}\left(s_{t}, a_{t}\right) &=Q^{\pi, \gamma}\left(s_{t}, a_{t}\right)-V^{\pi, \gamma}\left(s_{t}\right) \\ Q^{\pi, \gamma}\left(s_{t}, a_{t}\right) &=E_{s_{t+1}, a_{t+1} \sim \tau}\left[\sum_{l=0}^{\infty} \gamma^{l} r_{t+l}\right] \\ V^{\pi, \gamma}\left(s_{t}\right) &=E_{s_{t+1}, a_{t} \sim \tau}\left[\sum_{l=0}^{\infty} \gamma^{l} r_{t+l}\right] \end{aligned}
Aπ,γ(st,at)Qπ,γ(st,at)Vπ,γ(st)=Qπ,γ(st,at)−Vπ,γ(st)=Est+1,at+1∼τ[l=0∑∞γlrt+l]=Est+1,at∼τ[l=0∑∞γlrt+l]
总的来说,
A
π
,
γ
(
s
t
,
a
t
)
A^{\pi, \gamma}\left(s_{t}, a_{t}\right)
Aπ,γ(st,at) 已经可以做到在保持无偏差的情况下,尽可能地降低方差值。如果我们能通过学习得到一个完美的优势函数,模型就可以得到很好的表现。但实际中直接学习优势函数比较困难,我们往往需要组合其他函数得到优势函数,同时还需要考虑偏差和方差对模型的影响,为此我们给出了一个定义:
γ
\gamma
γ -just。当一个函数
A
^
t
\hat{A}_{t}
A^t 满足
γ
\gamma
γ -just 条件时,它就满足下面的公式:
E
s
0
,
a
0
,
…
∼
τ
[
A
^
t
(
s
0
:
∞
,
a
0
:
∞
)
∇
θ
log
π
θ
(
a
t
∣
s
t
)
]
=
E
s
0
,
a
0
,
…
∼
τ
[
A
π
,
γ
(
s
t
,
a
t
)
∇
θ
log
π
θ
(
a
t
∣
s
t
)
]
E_{s_{0}, a_{0}, \ldots \sim \tau}\left[\hat{A}_{t}\left(s_{0: \infty}, a_{0: \infty}\right) \nabla_{\theta} \log \pi_{\theta}\left(a_{t} \mid s_{t}\right)\right]=E_{s_{0}, a_{0}, \ldots \sim \tau}\left[A^{\pi, \gamma}\left(s_{t}, a_{t}\right) \nabla_{\theta} \log \pi_{\theta}\left(a_{t} \mid s_{t}\right)\right]
Es0,a0,…∼τ[A^t(s0:∞,a0:∞)∇θlogπθ(at∣st)]=Es0,a0,…∼τ[Aπ,γ(st,at)∇θlogπθ(at∣st)]
如果我们找到的估计函数能够满足上面的公式,它就可以用来替换优势函数。经过推导分析我们发现,
r
t
+
γ
V
π
,
γ
(
s
t
+
1
)
−
V
π
,
γ
(
s
t
)
r_{t}+\gamma V^{\pi, \gamma}\left(s_{t+1}\right)-V^{\pi, \gamma}\left(s_{t}\right)
rt+γVπ,γ(st+1)−Vπ,γ(st) 满足上述条件,是一个合格的替换 项,于是后面的工作将围绕它替换进行。
令
V
V
V 为一个近似的值函数,我们定义
δ
t
V
=
r
t
+
γ
V
(
s
t
+
1
)
−
V
(
s
t
)
,
\delta_{t}^{V}=r_{t}+\gamma V\left(s_{t+1}\right)-V\left(s_{t}\right),
δtV=rt+γV(st+1)−V(st), 这里的
δ
t
V
\delta_{t}^{V}
δtV 可 以作为
a
t
a_{t}
at 的一个优势价值估计。如果上面的公式中
V
=
V
π
,
γ
,
V=V^{\pi, \gamma},
V=Vπ,γ, 那么
δ
t
V
\delta_{t}^{V}
δtV 就是一个
γ
\gamma
γ -just 的估计函数,它可以得到
A
π
,
γ
A^{\pi, \gamma}
Aπ,γ 的一个无偏估计:
E
s
t
+
1
[
δ
t
V
π
,
γ
]
=
E
s
t
+
1
[
r
t
+
γ
V
π
,
γ
(
s
t
+
1
)
−
V
π
,
γ
(
s
t
)
]
=
E
s
t
+
1
[
Q
π
,
γ
(
s
t
,
a
t
)
−
V
π
,
γ
(
s
t
)
]
=
A
π
,
γ
(
s
t
,
a
t
)
\begin{aligned} E_{\boldsymbol{s}_{t+1}}\left[\boldsymbol{\delta}_{t}^{V^{\pi, \gamma}}\right] &=E_{\boldsymbol{s}_{t+1}}\left[\boldsymbol{r}_{t}+\gamma V^{\pi, \gamma}\left(s_{t+1}\right)-V^{\pi, \gamma}\left(s_{t}\right)\right] \\ &=E_{s_{t+1}}\left[Q^{\pi, \gamma}\left(s_{t}, \boldsymbol{a}_{t}\right)-V^{\pi, \gamma}\left(s_{t}\right)\right]=A^{\pi, \gamma}\left(\boldsymbol{s}_{t}, \boldsymbol{a}_{t}\right) \end{aligned}
Est+1[δtVπ,γ]=Est+1[rt+γVπ,γ(st+1)−Vπ,γ(st)]=Est+1[Qπ,γ(st,at)−Vπ,γ(st)]=Aπ,γ(st,at)
接下来我们考虑
n
n
n 步的优势函数估计,并用
A
^
t
(
k
)
\hat{A}_{t}^{(k)}
A^t(k) 表示,可以得到
A
^
t
(
1
)
=
δ
t
V
=
−
V
(
s
t
)
+
r
t
+
γ
V
(
s
t
+
1
)
A
^
t
(
2
)
=
δ
t
V
+
γ
δ
t
+
1
V
=
−
V
(
s
t
)
+
r
t
+
γ
V
(
s
t
+
1
)
+
γ
(
−
V
(
s
t
+
1
)
+
r
t
+
1
+
γ
V
(
s
t
+
2
)
)
=
−
V
(
s
t
)
+
r
t
+
γ
r
t
+
1
+
γ
2
V
(
s
t
+
2
)
\begin{array}{l} \hat{A}_{t}^{(1)}=\delta_{t}^{V}=-V\left(s_{t}\right)+r_{t}+\gamma V\left(s_{t+1}\right) \\ \hat{A}_{t}^{(2)}=\delta_{t}^{V}+\gamma \delta_{t+1}^{V} \\ =-V\left(s_{t}\right)+r_{t}+\gamma V\left(s_{t+1}\right)+\gamma\left(-V\left(s_{t+1}\right)+r_{t+1}+\gamma V\left(s_{t+2}\right)\right) \\ =-V\left(s_{t}\right)+r_{t}+\gamma r_{t+1}+\gamma^{2} V\left(s_{t+2}\right) \end{array}
A^t(1)=δtV=−V(st)+rt+γV(st+1)A^t(2)=δtV+γδt+1V=−V(st)+rt+γV(st+1)+γ(−V(st+1)+rt+1+γV(st+2))=−V(st)+rt+γrt+1+γ2V(st+2)
依此类推,可以得到
A
^
t
(
∞
)
=
∑
l
=
0
∞
γ
l
δ
t
+
l
V
=
−
V
(
s
t
)
+
r
t
+
γ
r
t
+
1
+
⋯
+
γ
k
r
t
+
k
+
⋯
\hat{A}_{t}^{(\infty)}=\sum_{l=0}^{\infty} \gamma^{l} \delta_{t+l}^{V}=-V\left(s_{t}\right)+r_{t}+\gamma \boldsymbol{r}_{t+1}+\cdots+\gamma^{k} \boldsymbol{r}_{t+k}+\cdots
A^t(∞)=l=0∑∞γlδt+lV=−V(st)+rt+γrt+1+⋯+γkrt+k+⋯
我们知道
γ
\gamma
γ 是一个小于 1 的数,随着
k
k
k 趋近于无穷大,最终
γ
∞
V
(
s
t
+
∞
)
→
0
\gamma^{\infty} V\left(s_{t+\infty}\right) \rightarrow 0
γ∞V(st+∞)→0, 所 以
A
^
t
(
∞
)
\hat{A}_{t}^{(\infty)}
A^t(∞) 这一项相当于用蒙特卡罗法对优势函数进行估计。此时我们看到,随着估计步数的增加,估计值的偏差逐渐变小,方差逐渐变大。如果我们能将这些估计值同时考虑在内,是就可以在偏差和方差之间找到更好的平衡。
A
^
t
G
A
E
(
γ
,
λ
)
=
(
1
−
λ
)
(
A
^
t
(
1
)
+
λ
A
^
t
(
2
)
+
λ
2
A
^
t
(
3
)
+
⋯
)
=
(
1
−
λ
)
(
δ
t
V
+
λ
(
δ
t
V
+
δ
t
+
1
V
)
+
λ
2
(
δ
t
V
+
γ
δ
t
+
1
V
+
γ
2
δ
t
+
2
V
)
+
⋯
)
=
(
1
−
λ
)
(
δ
t
V
(
1
+
λ
+
λ
2
+
⋯
)
+
γ
δ
t
+
1
V
(
λ
+
λ
2
+
λ
3
+
⋯
)
+
γ
2
δ
t
+
2
V
(
λ
2
+
λ
3
+
λ
4
+
⋯
)
+
⋯
)
=
(
1
−
λ
)
(
δ
t
V
(
1
1
−
λ
)
+
γ
δ
t
+
1
V
(
λ
1
−
λ
)
+
γ
2
δ
t
+
2
V
(
λ
2
1
−
λ
)
+
⋯
)
=
∑
l
=
0
∞
(
γ
λ
)
l
δ
t
+
l
V
\begin{aligned} \hat{A}_{t}^{\mathrm{GAE}(\gamma, \lambda)} &=(1-\lambda)\left(\hat{A}_{t}^{(1)}+\lambda \hat{A}_{t}^{(2)}+\lambda^{2} \hat{A}_{t}^{(3)}+\cdots\right) \\ &=(1-\lambda)\left(\delta_{t}^{V}+\lambda\left(\delta_{t}^{V}+\delta_{t+1}^{V}\right)+\lambda^{2}\left(\delta_{t}^{V}+\gamma \delta_{t+1}^{V}+\gamma^{2} \delta_{t+2}^{V}\right)+\cdots\right) \\ &=(1-\lambda)\left(\delta_{t}^{V}\left(1+\lambda+\lambda^{2}+\cdots\right)+\gamma \delta_{t+1}^{V}\left(\lambda+\lambda^{2}+\lambda^{3}+\cdots\right)\right.\\ &\left.+\gamma^{2} \delta_{t+2}^{V}\left(\lambda^{2}+\lambda^{3}+\lambda^{4}+\cdots\right)+\cdots\right) \\ &=(1-\lambda)\left(\delta_{t}^{V}\left(\frac{1}{1-\lambda}\right)+\gamma \delta_{t+1}^{V}\left(\frac{\lambda}{1-\lambda}\right)+\gamma^{2} \delta_{t+2}^{V}\left(\frac{\lambda^{2}}{1-\lambda}\right)+\cdots\right) \\ &=\sum_{l=0}^{\infty}(\gamma \lambda)^{l} \delta_{t+l}^{V} \end{aligned}
A^tGAE(γ,λ)=(1−λ)(A^t(1)+λA^t(2)+λ2A^t(3)+⋯)=(1−λ)(δtV+λ(δtV+δt+1V)+λ2(δtV+γδt+1V+γ2δt+2V)+⋯)=(1−λ)(δtV(1+λ+λ2+⋯)+γδt+1V(λ+λ2+λ3+⋯)+γ2δt+2V(λ2+λ3+λ4+⋯)+⋯)=(1−λ)(δtV(1−λ1)+γδt+1V(1−λλ)+γ2δt+2V(1−λλ2)+⋯)=l=0∑∞(γλ)lδt+lV
我们发现这个公式的最终形式比较简洁,虽然我们引人了一个新的超参数,但是公式并没有复杂太多。此时我们的估计值在偏差和方差方面得到了更好的平衡,我们可以分别计算
λ
\lambda
λ 等于 0 和 1 时的值
GAE
(
γ
,
0
)
:
A
^
t
:
=
δ
t
=
r
t
+
γ
v
(
s
t
+
1
)
−
v
(
s
t
)
GAE
(
γ
,
1
)
:
A
^
t
:
=
∑
l
=
0
∞
γ
l
δ
t
+
l
=
sum
t
=
0
∞
γ
l
r
t
+
l
−
v
(
s
t
)
\begin{array}{lrl} \operatorname{GAE}(\gamma, 0): & \hat{A}_{t}:=\delta_{t} & =r_{t}+\gamma v\left(s_{t+1}\right)-v\left(s_{t}\right) \\ \operatorname{GAE}(\gamma, 1): & \hat{A}_{t}:=\sum_{l=0}^{\infty} \gamma^{l} \delta_{t+l} & =\operatorname{sum}_{t=0}^{\infty} \gamma^{l} r_{t+l}-v\left(s_{t}\right) \end{array}
GAE(γ,0):GAE(γ,1):A^t:=δtA^t:=∑l=0∞γlδt+l=rt+γv(st+1)−v(st)=sumt=0∞γlrt+l−v(st)
可以看出,当
λ
=
0
\lambda=0
λ=0 时,算法等同于计算 TD-Error,这是一个方差较低但偏差较高的算法;
当
λ
=
1
\lambda=1
λ=1 时,算法变成蒙特卡罗目标值和价值估计的差,这是一个偏差较低但方差较高的算法。我们可以通过调整
λ
\lambda
λ 值使模型在两者之间得到更好的平衡。因此,
我们可以用它代替前面公式中的优势函数,此时计算的公式就变为
∇
θ
J
(
θ
)
=
E
s
,
a
∼
τ
[
∑
t
=
0
∞
A
^
t
G
A
E
(
γ
,
λ
)
∇
θ
log
π
θ
(
a
t
∣
s
t
)
]
\nabla_{\theta} J(\theta)=E_{s, a \sim \tau}\left[\sum_{t=0}^{\infty} \hat{A}_{t}^{\mathrm{GAE}(\gamma, \lambda)} \nabla_{\theta} \log \pi_{\theta}\left(\boldsymbol{a}_{t} \mid s_{t}\right)\right]
∇θJ(θ)=Es,a∼τ[t=0∑∞A^tGAE(γ,λ)∇θlogπθ(at∣st)]
当时第一次看GAE的时候很不理解为什么GAE选定了
δ
t
V
=
r
t
+
γ
V
(
s
t
+
1
)
−
V
(
s
t
)
\delta_{t}^{V}=r_{t}+\gamma V\left(s_{t+1}\right)-V\left(s_{t}\right)
δtV=rt+γV(st+1)−V(st)这种形式,后面看到吴恩达老师1998年reward shaping的论文,在做reward shaping的时候将reward加上一个势能函数的差值就保障了加入reward shaping之后策略没有变坏:
r
~
(
s
,
a
,
s
′
)
=
r
(
s
,
a
,
s
′
)
+
γ
Φ
(
s
′
)
−
Φ
(
s
)
\tilde{r}\left(s, a, s^{\prime}\right)=r\left(s, a, s^{\prime}\right)+\gamma \Phi\left(s^{\prime}\right)-\Phi(s)
r~(s,a,s′)=r(s,a,s′)+γΦ(s′)−Φ(s)
感觉GAE就是将V函数替代r函数的一种操作,也就是说GAE是一种更加“长视”的reward shaping的方法?不知道这么理解对不对,欢迎大家讨论。
上一篇:强化学习的学习之路(四十七)2021-02-16 TRPO实现策略上的单调提升(Monotonic Improvement with TRPO )
下一篇:强化学习的学习之路(四十九)2021-02-18基于GAE和TRPO的值函数优化