强化学习的学习之路(四十七)2021-02-16 TRPO实现策略上的单调提升(Monotonic Improvement with TRPO )

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

TRPO实现策略上的单调提升(Monotonic Improvement with TRPO )

TRPO主要是针对我们前面提到的自然梯度法进行了两个方面的改进:1、用共轭梯度法简化求逆矩阵的高复杂度。 2、对KL divergence做的approximation中可能存在的约束违反的问题做了预防。

首先先来看第一个问题:

我们知道共轭梯度法可以用来求解 A x = g A x=g Ax=g 这样的问题,而参数更新量也可以表示成这样的形式:
I π old  Δ π = ∇ π L π old  ( π ; θ old  ) I_{\pi_{\text {old }}} \Delta \pi=\nabla_{\pi} L_{\pi_{\text {old }}}\left(\pi ; \theta_{\text {old }}\right) Iπold Δπ=πLπold (π;θold )
幸运的是,在共轭梯度法的计算过程中我们只需要矩阵 A A A 参与运算,这样我们就不需要计算逆矩阵了。而且在共功梯度法的每一轮迭代中,它只参与了一次计算, 就是在计算的优化步长这一步:
α k = r k T r k p k T A p k \alpha_{k}=\frac{r_{k}^{T} r_{k}}{p_{k}^{T} A p_{k}} αk=pkTApkrkTrk
虽然我们节省了一定的计算时间,但是我们依然要计算出矩阵 A , A, A, 这个矩阵对深层神经网络这样复杂的模型来说同样是难以计算的,因此我们仍然需要找方法进行化简。幸运的是,矩阵 A A A 同旁边的方向向量 p p p 进行乘法会得到一个向量,这是简化算法的突破口。矩阵和向量乘积的结果的每一个元素都是由两个向量得到的,对应的计算公式为
( A p ) [ i ] = ∑ j = 1 N ( ∂ ∂ π i ∂ ∂ π j f ( π ) ) [ i , j ] × p [ j ] (A p)[i]=\sum_{j=1}^{N}\left(\frac{\partial}{\partial \pi_{i}} \frac{\partial}{\partial \pi_{j}} f(\pi)\right)[i, j] \times p[j] (Ap)[i]=j=1N(πiπjf(π))[i,j]×p[j]
对于我们现在要解决的问题来说,求导和求和是可以互换的,所以得到
= ∂ ∂ π i ( ∑ j = 1 N ∂ ∂ π j f ( π ) [ j ] × p [ j ] ) =\frac{\partial}{\partial \pi_{i}}\left(\sum_{j=1}^{N} \frac{\partial}{\partial \pi_{j}} f(\pi)[j] \times p[j]\right) =πi(j=1Nπjf(π)[j]×p[j])
这样一来,我们先进行小括号内部的计算然后对结果进行求导,这样整体的复杂度将会大大降低。原本的二阶求导变成了求两次一阶导数,运算量得到了大幅降低,运算速度得到了很大的提升。解决了这个大问题,我们就可以使用共轭梯度法完成对优化方向的求解,令 ∇ π L π old  ( π ; θ old  ) \nabla_{\pi} L_{\pi_{\text {old }}}\left(\pi ; \theta_{\text {old }}\right) πLπold (π;θold ) 表 示残差,令 1 N ∑ n = 1 N I π old  ( s ) \frac{1}{N} \sum_{n=1}^{N} I_{\pi_{\text {old }}}(s) N1n=1NIπold (s) 为共功梯度法的 A , A, A, 就可以完成对优化方向 s s s 的计算。

接下来我们来解决第二个问题:对KL divergence做的approximation中可能存在的约束违反的问题做了预防。这是这个问题可以通过确定更新的最大步长来决定:由于有约束条件的存在,优化的最大步长一定存在, 这样约束条件相当于为我们划定了一个置信区域 ( Trust Region ),以保证我们的优化满足策略提升的要求。前面我们利用共轭梯度法求出了方 向 s , s, s, 现在令最大步长为 β , \beta, β, 也就是说,参数更新的最大值为 β s \beta s_{} βs。 我们前面提到了问题的约束:
1 N ∑ n = 1 N [ 1 2 Δ θ T I π o l d Δ θ ] ⩽ ϵ \frac{1}{N} \sum_{n=1}^{N}\left[\frac{1}{2} \Delta \theta^{\mathrm{T}} \boldsymbol{I}_{\pi_{\mathrm{old}}} \Delta \theta\right] \leqslant \epsilon N1n=1N[21ΔθTIπoldΔθ]ϵ
使用 β s \beta s βs 代替 Δ θ , \Delta \theta, Δθ, 就可以得到
1 N ∑ n = 1 N [ 1 2 ( β s ) T I π o l d ( s ) ( β s ) ] = 1 2 β 2 1 N ∑ n = 1 N [ s T I π o l d ( s ) ] ⩽ ϵ \frac{1}{N} \sum_{n=1}^{N}\left[\frac{1}{2}(\beta s)^{\mathrm{T}} \boldsymbol{I}_{\pi_{o l d}}(s)(\beta \boldsymbol{s})\right]=\frac{1}{2} \beta^{2} \frac{1}{N} \sum_{n=1}^{N}\left[s^{\mathrm{T}} I_{\pi_{\mathrm{old}}}(s)\right] \leqslant \epsilon N1n=1N[21(βs)TIπold(s)(βs)]=21β2N1n=1N[sTIπold(s)]ϵ
将公式进行整理,可以得到
β ⩽ 2 ϵ 1 N ∑ n = 1 N s T I π o l d \beta \leqslant \sqrt{\frac{2 \epsilon}{\frac{1}{N} \sum_{n=1}^{N} s^{\mathrm{T}} \boldsymbol{I}_{\pi_{\mathrm{old}}}}} βN1n=1NsTIπold2ϵ
这样我们就知道了满足约束条件下的最大步长。与前面的方法类似,这里同样可 以将 Fisher 信息矩阵和右边的方向向量相乘,这样可以用两个一阶导计算代替本的 二阶导计算,方法和前面介绍的类似。
最后,我们使用 backtrack 的线搜索方法找到满足优化条件的合适步长,也就是找 到一个 π ( θ ) = π ( θ old  + Δ θ ) , \pi(\theta)=\pi\left(\theta_{\text {old }}+\Delta \theta\right), π(θ)=π(θold +Δθ), 使得它比 π old  \pi_{\text {old }} πold  产生足够的提升。具体方法为 : 先尝试以 β \beta β 为步长的情况下,策略提升是否可以满足,如果已经满足则步长选择结束; 如果无法满 足,则将步长减少一半,再进行测试,直到满足为止。如下图所示:

在这里插入图片描述

最后我们附上TRPO的伪码:

\begin{algorithm}[H]     \caption{Trust Region Policy Optimization}     \label{alg1} \begin{algorithmic}[1]     \STATE Input: initial policy parameters , initial value function parameters      \STATE Hyperparameters: KL-divergence limit , backtracking coefficient , maximum number of backtracking steps      \FOR{}     \STATE Collect set of trajectories  by running policy  in the environment.     \STATE Compute rewards-to-go .     \STATE Compute advantage estimates,  (using any method of advantage estimation) based on the current value function .     \STATE Estimate policy gradient as         \begin{equation*}         \hat{g}_k = \frac{1}{|{\mathcal D}_k|} \sum_{\tau \in {\mathcal D}_k} \sum_{t=0}^T \left. \nabla_{\theta} \log\pi_{\theta}(a_t|s_t)\right|_{\theta_k} \hat{A}_t.         \end{equation*}     \STATE Use the conjugate gradient algorithm to compute         \begin{equation*}         \hat{x}_k \approx \hat{H}_k^{-1} \hat{g}_k,         \end{equation*}         where  is the Hessian of the sample average KL-divergence.     \STATE Update the policy by backtracking line search with         \begin{equation*}         \theta_{k+1} = \theta_k + \alpha^j \sqrt{ \frac{2\delta}{\hat{x}_k^T \hat{H}_k \hat{x}_k}} \hat{x}_k,         \end{equation*}         where  is the smallest value which improves the sample loss and satisfies the sample KL-divergence constraint.     \STATE Fit value function by regression on mean-squared error:         \begin{equation*}         \phi_{k+1} = \arg \min_{\phi} \frac{1}{|{\mathcal D}_k| T} \sum_{\tau \in {\mathcal D}_k} \sum_{t=0}^T\left( V_{\phi} (s_t) - \hat{R}_t \right)^2,         \end{equation*}         typically via some gradient descent algorithm.     \ENDFOR \end{algorithmic} \end{algorithm}

上一篇:强化学习的学习之路(四十六)2021-02-15自然梯度法实现策略上的单调提升(Monotonic Improvement with Natural gradient descent)
下一篇:强化学习的学习之路(四十八)2021-02-17 GAE(Generalized Advantage Estimation)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值