强化学习——表格型求解方法

    了解了强化学习的基础概念后,我们知道最优策略就是根据来贪心地选择状态下的动作,那么问题就转变为如何求解或者这些最优价值函数了。
    这一篇我们先假设状态空间是有限离散的,有限代表有终止状态,这样或者的值均可以存储在一张表格中,供我们随时修改、选取,这就是表格型求解方法的名称由来,经典的方法有动态规划、蒙特卡洛和时序差分。
    本篇的内容安排是,首先我们会分别简述一下这三个方法是如何求解强化学习中的最优价值函数,接着我们会比较一下三个方法的区别和联系,最后也是最重要的实践部分。
    希望以上两篇内容可以让大家明白原理的同时也可以自己动手实践一个“toy reinforcement learning ”。

一 表格型求解方法

1.1 Dynamic Programing

    动态规划是一种将问题拆分成若干个类似的子问题,再分而治之的方法。其中最重要的就是如何定义子问题,该子问题常常是递推关系。在强化学习——基础概念那篇中我们提到的bellman方程就是一种递推关系,

  • 状态价值函数
1.1.1 策略迭代

    策略迭代是一种基于动态规划得出的强化学习控制算法。它是一种策略评估、策略改进交替进行的一种方法,从而最后收敛于最优的价值函数和最优策略。

  • 策略评估:策略评估是给定一个策略,我们来求其价值函数。
  • 策略改进:策略改进是基于,我们可以找到一个。
        在策略迭代中,根据策略,策略评估就是根据式(1)进行计算得到。那么如何基于此进行策略改进呢?还记得基础概念篇中讲的策略改进定理,即,那么,也就是说我们只需要根据计算出,即可得到一个不差于的策略。
        策略迭代这一过程如图所示,每次都先评估出一个不是最优的价值函数,之后再用这一个不完美的价值函数去改进现有的策略,该策略当然也不会是最优的,但是两者都是在向着最优的方向不断改变自己,即使“道路”蜿蜒曲折,最终还是会到达胜利的终点——最优价值函数和最优策略。
  • 算法伪代码


1.1.2 价值迭代

    从策略迭代的算法中可以看到,每次策略评估都需要遍历整个状态空间,使得收敛,再进行策略改进;而价值迭代在策略改进前只需要进行一步更新,这是一种广义策略迭代(GPI)的思想。
    从另一个角度比较以下策略迭代与价值迭代,策略迭代在策略评估中使用到的递推公式是bellman方程;而价值迭代使用的是bellman最优方程。

  • 算法伪代码


1.2 Monte Carlo

    在动态规划中,无论是使用策略迭代还是价值迭代在估计价值函数的过程中都需要计算,即我们需要知道“环境”在状态下,agent采取了动作后下一步环境会给我们多少奖励以及反馈给我们的下一个状态。也就是说使用动态规划需要我们了解“环境”模型,这就大大的限制了动态规划的使用场景。

1.2.1 蒙特卡洛方法

    蒙特卡洛方法就是在不知道“环境”模型的情况下,经过不断的与环境互动进行采样,从而估计价值函数。如估计,我们就可以根据下面的一个回溯图,采样得到一个序列,代表一回合的终止,

    这一回合我们得到的是,

    基于一次采样得到的价值函数估计值方差是较大的,所以我们需要不断采样,得到。最后用它们的均值代表价值函数的估计,

    可以看出采样的好坏对于蒙特卡洛方法的影响是很大的,一个好的采样肯定是可以遍历所有的序列,

    有两种采样策略,一种是试探性开始,一种是-贪婪策略。前者是假设我们每个状态作为初始状态的概率都是大于0的,即都有可能被选为初始状态。后者是强化学习中更常用的方法。

1.2.2 -贪婪策略

    我们希望agent在前期尽可能的去探索,从而发现更好的策略,所以我们在基于价值函数选取贪婪动作的同时,会以的概率去在动作集合中随机的选取一个动作,这样使得agent在采样的过程中更加的多样化,得到更精准的价值函数估计。

    最后附上使用了-贪婪策略的蒙特卡洛算法的伪代码。

  • 算法伪代码


1.3 Temporal-Difference Learning

    时序差分算法可以说是强化学习的核心算法,不论是表格型求解还是下一篇会讲到的近似求解方法中,时序差分都占到了很大的比重,它是动态规划和蒙特卡洛方法的结合体,不仅利用了动态规划中的自举,还使用到了蒙特卡洛中的采样思想。
    我们知道蒙特卡洛就是采样一个序列直到终止状态,统计多个序列的回报之和,通过计算其平均值来估计价值函数,我们来推导蒙特卡洛的另一种计算方式——增量式,
\begin{align} q_{N}(s, a) =& \frac{1}{N} \sum_{n=1}^{N } G_n \\ =& \frac{1}{N-1} \frac{N-1}{N}(\sum_{n=1}^{N-1} G_n + G_{N}) \\ =&\frac{1}{N-1 } \sum_{n=1}^{N-1} G_n \frac{N-1}{N} +\frac{1}{N-1}G_{N} \\ =& q_{N-1}(s,a)(1-\frac{1}{N}) + \frac{1}{N-1}G_{N}\\ =& q_{N-1}(s,a) + \frac{1}{N}(G_{N} - q_{N-1}(s,a)) \end{align}
    若令,则蒙特卡洛的更新公式可以变为,

    时序差分算法和这一形式的蒙特卡洛方法类似,不同的是被bellman方程中的给替换了,

其中被称为TD误差。
    时序差分算法不需要等到回合结束才更新价值函数,它在时刻,会自举上一时刻已有的来进行更新。
    针对的取法不同,介绍两种非常有名的TD实践版本,分别是SARSA和Q-Learning。

1.3.1 SARSA

    在SARSA中agent是一个实干家,在状态下会真实地选取一个行动去估计,即用去估计,正是该agent需要经历才能进行一次价值函数更新,所以称其为SARSA算法,下面是SARSA算法的回溯图。


  • 算法伪代码


1.3.2 Q-Learning

    在Q-Learning中agent是一个想象家,在状态下不去行动,而是想象假如自己选取不同的行动哪个会更好,即用来估计,下面是Q-Learning的回溯图。


  • 算法伪代码


二 区别和联系

    上面三种任意一种方法其实都是一套强大的学习系统,但是这里我们把他们放在一起进行一个简单的对比,

更新时间 是否使用自举更新 采样or环境模型
Dynamic Programing - 使用 环境模型
Monte Carlo 回合结束时更新 不使用 采样
Temporal-Difference Learning 回合中更新 使用 采样

注:在这里注明一下,自举指的是在时刻更新价值函数时使用到了时刻的价值函数估计值。

三 实践

    这里的实践是一个非常简单的随机游走的例子,如下图,在一个道路上agent可以向左走也可以向右走,但是只有在道路的最右边有一个宝藏,agent拿到宝藏才有有1的奖励,其他情况的奖励都是0,agent的目标就是得到宝藏。如果agent来到道路最左边即A,且选择了向左走,那么下一个状态agent依然处于A。


    上述方法均可以应用于该简单的环境中,具体的代码可以参看7nic7的github。
    下面是Q-Learning在前期的一次学习过程,

    经过了5、6个回合后,agent已经学会了快速地找到宝藏了,


你可能感兴趣的:(强化学习——表格型求解方法)