TRPO算法解析

让子弹飞

这俗话说的好呀,这饭要一口一口吃,酒要一口一口喝,路要一步一步走,步子迈大了,喀,容易扯到蛋。
这训练模型呢,也是这个理,欲速则不达,收敛慢并不可怕,可怕的是不收敛,今天要介绍的TRPO(Trust Region Policy Optimization)算法,正是这样的一个很稳的算法,它对新旧策略施加了一个特殊的约束,从而达到了改进传统Policy Gradient方法的效果。

TRPO算法是由大名鼎鼎的OpenAi科学家John Schulman提出来的(后来那个万金油算法PPO也是他搞的..),他的导师的导师是当年入职百度就要上1000张GPU的名声如雷贯耳的Google大脑三巨头之一的吴恩达..... 说起来吴恩达这个人跟我是有些渊源的...我就是16年的时候无聊刷网易云偶然刷到吴恩达关于机器学习的公开课才像发现新大陆一样进入机器学习领域的..虽然至今没有看完过他任何一集的视频...可能是觉得看视频这种学习方式太低效了..... 所以学机器学习算法,还是看我的文章吧!

言归正传,让观察一下这个算法的名字,不难猜测,所谓的TRPO算法就是:使用Trust Region算法来进行Policy 优化的算法, 实际上确实是如此。

数值优化

因此,要搞懂TRPO,就必须要搞清楚Trust Region是什么。其实跟常见的梯度下降/上升类似,Trust Region也是一类数值优化的方法。在开始讲trust region之前,我们先来看一下原始的policy gradient中所使用的的梯度上升法。

随机梯度上升

在Policy Gradient中,假设Policy的参数是, 我们的目标是找到最优的 使得状态价值的期望最大,于是我们使用随机梯度上升来重复下面两个步骤,来使得随机状态价值沿着梯度方向变大:

但是这个原始的梯度上升存在一个很大的问题,就是我们很难控制它的学习速率,如果太大,可能会使得参数陷入崩溃的局面,使得训练过程回抖动难以收敛:


改变太大,参数翻车

但是改变太小,又会造成收敛极慢,甚至陷入局部最优无法自拔:


局部最优

并且,在强化学习中,要让学习率适应各种情形是很困难的:


假设针对上面的黄点专门调整了学习率。该区域相对平坦,因此该学习速率应高于平均水平,以获得良好的学习速度。但是,可能会有一个不好的举动让我们从悬崖上掉下去,到了红点的位置。红点处的梯度很高,当前的学习率将触发爆炸性的策略更新。由于学习率对地形不敏感,因此PG将有严重的收敛问题。

从上面Policy Gradient的各种缺陷可以看出,对梯度更新幅度有所限制是有必要的,这也是引入Trust Region的主要原因。

Trust Region

回到上面的优化问题,我们用 来更通用的表示我们想要优化的目标, 我们希望找到一个 来让 最大 。
假设 是 的邻域,是其中的点, 即:

如果我们可以找到一个函数 在邻域 的范围内近似于, 这个N(\theta) 就被称作trust region .

因为在trust region中,和 很接近,因此就可以用更好求最大值的 的最大值来近似 最大值。

于是Trust region算法就可以表示成这样两个步骤,然后不断重复:

  • 基于当前的, 找到 函数
  • 在trust region中,在上找到新的 使得 的值最大
    trust region

TRPO

理解了trust region,接下来就可以开始着手设计TRPO了。

找近似函数

遵循算法的思想,依样画葫芦... 将上面的优化目标 替换为状态价值 :
\begin{align} J(\theta)=\mathbb{E}_S(V_\pi(S)) =& \mathbb{E}_S[\mathbb{E}_{A\sim\pi}[Q_\pi(S,A)]] \\ =& \mathbb{E}_S[\sum_a \pi(a_i|S;\theta_i) *Q_\pi(S,a_i)] \\ =& \mathbb{E}_S[\sum_a \pi(a|S;\theta_{i-1}) * \frac{ \pi(a_i|S;\theta_i)}{ \pi(a_i|S;\theta_{i-1})} *Q_\pi(S,a_i)] \\ =& \mathbb{E}_S[\mathbb{E}_{A \sim \pi(a|S;\theta_{i-1})}[\frac{ \pi(A|S;\theta_i)}{ \pi(A|S;\theta_{i-1})} *Q_\pi(S,A)] ]\\ \end{align}
显然,上面的期望没法求最大值,于是我们使用蒙特卡洛近似,让agent使用当前的策略与环境交互得到一个trajectory:

就可以用随机采样回报来近似 ,用随机采样的观察来作为转移状态,为了更稳定,我们可以取均值,于是就得到了一个的近似函数:

回顾一下上面trust region中对于函数的限定,它得满足新的 在旧 附近,那么要如何保证呢? 拍下脑袋就能有两个很容易想到的思路:

  • 新旧 的二范数小于某个合适的值
  • 和 的KL散度小于某个合适的值

到这里第一步就完成了,下面开始第二步。

求最大值

但是要怎么求这玩意的最大值呢???
感觉瞬间就懵逼了。不会不要紧,肯定会有数学大佬会呀,赶紧去找找数值优化的方法,总归能找到的....
论文里用了一种被称之为MM算法(我们熟悉的EM算法可以看作是MM的特例)的优化方法,这个算法推导起来有点复杂,这里就不细说了,有兴趣自己去了解,或者等我下次单独开一篇来介绍一下MM 算法,总之我们通过它来求解约束范围内的最大值,然后一步一步优化 最终得到一个好的policy。

总结

TRPO实际上就是使用了Trust Region算法来进行策略的优化,相对的传统的Policy Gradient则是用的随机梯度上升。正因为用了Trust Region,因此TRPO的训练相对稳定,而且学习能力更强,但是其中的优化过程计算复杂,比较耗算力...这也为之后的PPO埋下了伏笔。

你可能感兴趣的:(TRPO算法解析)