【强化学习-基础知识|强化学习的学习之路(四十八)2021-02-17 GAE(Generalized Advantage Estimation)】作为一个新手,写这个强化学习-基础知识专栏是想和大家分享一下自己学习强化学习的学习历程,希望对大家能有所帮助。这个系列后面会不断更新,希望自己在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?:=δt?A^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的值函数优化
推荐阅读
- 机器学习|从Python入门人工智能指南
- PV-RCNN|PV-RCNN代码解读——train & test
- Something|《Python深度学习》之卷积神经网络可视化
- Pytorch教程|Pytorch教程[01]张量操作
- Pytorch教程|Pytorch教程[02]DataLoader与Dataset
- Pytorch教程|Pytorch教程[04]torch.nn---Containers
- DEEP|什么是端到端神经网络()
- 问答系统|简单问答系统实现原理 - 基于机器学习的
- 深度学习|【深度学习】经典网络-VGG复现(使用Tensorflow实现)