作为一个新手,写这个强化学习-基础知识专栏是想和大家分享一下自己学习强化学习的学习历程,希望对大家能有所帮助。这个系列后面会不断更新,希望自己在2021年能保证平均每日一更的更新速度,主要是介绍强化学习的基础知识,后面也会更新强化学习的论文阅读专栏。本来是想每一篇多更新一点内容的,后面发现大家上CSDN主要是来提问的,就把很多拆分开来了(而且这样每天任务量也小一点哈哈哈哈偷懒大法)。但是我还是希望知识点能成系统,所以我在目录里面都好按章节系统地写的,而且在github上写成了书籍的形式,如果大家觉得有帮助,希望从头看的话欢迎关注我的github啊,谢谢大家!另外我还会分享深度学习-基础知识专栏以及深度学习-论文阅读专栏,很早以前就和小伙伴们花了很多精力写的,如果有对深度学习感兴趣的小伙伴也欢迎大家关注啊。大家一起互相学习啊!可能会有很多错漏,希望大家批评指正!不要高估一年的努力,也不要低估十年的积累,与君共勉!
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的值函数优化