美文网首页
强化学习——表格型求解方法

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

作者: 7NIC7 | 来源:发表于2020-11-29 23:09 被阅读0次

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

    一 表格型求解方法

    1.1 Dynamic Programing

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

    • 状态价值函数
      v_{t}(s) = \sum_a \pi(a|s)\sum_{s',r} p(s',r|s,a)(R_{t+1}+\gamma v_{t-1}(s')) \tag{1}
    1.1.1 策略迭代

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

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


    1.1.2 价值迭代

        从策略迭代的算法中可以看到,每次策略评估都需要遍历整个状态空间,使得v_{\pi}(s)收敛,再进行策略改进;而价值迭代在策略改进前只需要进行一步s \in \mathcal S更新,这是一种广义策略迭代(GPI)的思想。
        从另一个角度比较以下策略迭代与价值迭代,策略迭代在策略评估中使用到的递推公式是bellman方程;而价值迭代使用的是bellman最优方程。
    v_t(s) = max_a \sum_{s',r} p(s',r|s,a)(R_{t+1} + \gamma v_{t-1}(s'))

    • 算法伪代码


    1.2 Monte Carlo

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

    1.2.1 蒙特卡洛方法

        蒙特卡洛方法就是在不知道“环境”模型的情况下,经过不断的与环境互动进行采样,从而估计价值函数。如估计q_{\pi}(s,a),我们就可以根据下面的一个回溯图,采样得到一个序列,S_T代表一回合的终止,
    S_t,A_t,R_{t+1},S_{t+1},A_{t+1},\dots,A_{T-1},R_{T},S_T

        这一回合我们得到的q_{\pi}(s,a)是,
    q_{\pi}(s,a) = G_1 = \sum_{k=t+1}^T R_k

        基于一次采样得到的价值函数估计值方差是较大的,所以我们需要不断采样,得到G_1,G_2,\dots,G_N。最后用它们的均值代表价值函数的估计,
    q_{\pi}(s,a) = \frac{1}{N} \sum_{n=1}^N G_n
        可以看出采样的好坏对于蒙特卡洛方法的影响是很大的,一个好的采样肯定是可以遍历所有的序列,
    \tau=\{S_{t} \in \mathcal S,A_t \in \mathcal A, R_{t+1}\in \mathcal R,S_{t+1}\in \mathcal S,\dots\}
        有两种采样策略,一种是试探性开始,一种是\epsilon-贪婪策略。前者是假设我们每个状态s \in \mathcal S作为初始状态的概率都是大于0的,即都有可能被选为初始状态。后者是强化学习中更常用的方法。

    1.2.2 \epsilon-贪婪策略

        我们希望agent在前期尽可能的去探索,从而发现更好的策略,所以我们在基于价值函数选取贪婪动作a^* = \arg \max_a q_{\pi}(s,a)的同时,会以\epsilon的概率去在动作集合\mathcal A中随机的选取一个动作,这样使得agent在采样的过程中更加的多样化,得到更精准的价值函数估计。
    \pi(a|s)= \begin{cases} 1-\epsilon +\epsilon/|\mathcal A| &if\ a=a^* \\ \epsilon/|\mathcal A| &if\ a\neq a^* \end{cases}

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

    • 算法伪代码


    1.3 Temporal-Difference Learning

        时序差分算法可以说是强化学习的核心算法,不论是表格型求解还是下一篇会讲到的近似求解方法中,时序差分都占到了很大的比重,它是动态规划和蒙特卡洛方法的结合体,不仅利用了动态规划中的自举,还使用到了蒙特卡洛中的采样思想。
        我们知道蒙特卡洛就是采样一个序列直到终止状态,统计多个序列的回报之和G_n,通过计算其平均值来估计价值函数,我们来推导蒙特卡洛的另一种计算方式——增量式,
    \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}
        若令\alpha=\frac{1}{N},则蒙特卡洛的更新公式可以变为,
    q_{N}(s, a) = q_{N-1}(s,a) + \alpha(G_{N} - q_{N-1}(s,a))
        时序差分算法和这一形式的蒙特卡洛方法类似,不同的是G_{N}被bellman方程中的r+\gamma v_{\pi}(s')给替换了,
    q_{t}(s, a) = q_{t-1}(s,a) + \alpha(r+\gamma v_{\pi}(s') - q_{t-1}(s,a))
    其中r+\gamma v_{\pi}(s') - q_{t-1}(s,a)被称为TD误差。
        时序差分算法不需要等到回合结束才更新价值函数,它在t时刻,会自举上一时刻已有的\hat q_{t-1}(s,a)来进行更新。
        针对v_{\pi}(s')的取法不同,介绍两种非常有名的TD实践版本,分别是SARSA和Q-Learning。

    1.3.1 SARSA

        在SARSA中agent是一个实干家,在状态s'下会真实地选取一个行动a'去估计v_{\pi}(s'),即用q_{t-1}(s',a')去估计v_{\pi}(s'),正是该agent需要经历\{S_t, A_t,R_{t+1},S_{t+1},A_{t+1}\}才能进行一次价值函数更新,所以称其为SARSA算法,下面是SARSA算法的回溯图。


    q_{t}(s, a) = q_{t-1}(s,a) + \alpha(r+\gamma q_{t-1}(s',a') - q_{t-1}(s,a))
    • 算法伪代码


    1.3.2 Q-Learning

        在Q-Learning中agent是一个想象家,在状态s'下不去行动,而是想象假如自己选取不同的行动哪个会更好,即用max_{a'} q_{t-1}(s',a')来估计v_{\pi}(s'),下面是Q-Learning的回溯图。


    q_{t}(s, a) = q_{t-1}(s,a) + \alpha(r+\gamma max_{a'} q_{t-1}(s',a') - q_{t-1}(s,a))
    • 算法伪代码


    二 区别和联系

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

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

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

    三 实践

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


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

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


    相关文章

      网友评论

          本文标题:强化学习——表格型求解方法

          本文链接:https://www.haomeiwen.com/subject/qqztwktx.html