zoukankan      html  css  js  c++  java
  • 强化学习(二)—— 蒙特卡洛方法求解

    1、“无模型学习”的基本概念

      在前一章中提到的基于动态规划的策略迭代和值迭代求解强化学习都属于“有模型学习”,都是在需要知道状态转移概率矩阵的前提下才能适用的算法。然而在现实很多场景中,我们无法获得环境信息,也就是状态转移概率矩阵未知。此时我们无法再利用策略迭代和值迭代算法来求解,需要提出新的方法来求解强化学习问题。

      首先来回顾下强化学习自身的特点:不断试错,也就是通过尝试与环境交互来解决策略评估的问题。实际上,这个不断尝试的思路和人类的一些学习方式比较接近,我们可以列出新算法的答题思路:

      1)确定一个初始策略(这个和策略迭代的算法一致)。

      2)在当前状态下用这个策略在选择动作,得到一条状态-动作系列。

      3)重复第 2)步得到一定数目的状态-动作系列,当这个数目达到一定的程度,根据大数定理,就可以认为这些序列能代表当前策略和环境交互的表现,将这些序列聚合起来,去这些序列动作价值的均值作为当前状态的动作价值。

      4)得到了价值函数,就相当于完成了策略评估的过程,之后就可以按照策略迭代的方法来更新策略。

      5)依次迭代上面的步骤,直至价值函数和策略收敛到最优。

      根据上面的答题思路,“无模型学习” 和 “有模型学习” 的区别主要在于策略评估过程,针对上面的思路,最关键的两点就是:

      1)在没有状态转移概率矩阵的情况下如何获得这些序列。

      2)获得了这些序列之后如何来评估当前的策略,也就是怎么得到当前策略的价值函数。

    2、蒙特卡洛方法求解

      蒙特卡洛方法是一种基于随机采样来估计期望值的方法,在MCMC算法中利用蒙特卡洛方法采样其实就相当于构建了一个状态转移概率矩阵。状态与状态之间通过采样的形式转移。

      在已知状态转移概率矩阵时,通过贝尔曼公式可以得到状态-动作价值函数:

        $q_{pi}(s_t,a_t) = sumlimits_{s_{t+1};in S}p(s_{t+1}|s_t, a_t)(r_{t+1} + v_{pi}(s_{t+1}))$

      然后通过值函数进行策略改进,在“无模型学习” 中,状态转移概率矩阵未知。于是我们需要把公式转变成:

        $q_{pi}(s_t,a_t) = mathbb{E}_{s_{t+1} ~ p, pi}[sumlimits_{k=0}gamma^kr_{t+k}]$

      看到上式等号右边的期望,就可以联想到用蒙特卡洛方法。假设在时刻 $t$ 通过一些方法,从状态 $s$ 和动作 $a$ 开始不断地与环境交互,得到大量的样本序列

        $ {[s_t, a_t, s_{t+1}^i, a_{t+1}^i, ......]_{i=1}^N}$

      上面通过蒙特卡洛采样得到的序列对应的回报为

        ${[r_t, r_{t+1}^i, r_{t+2}^i, ......]_{i=1}^N}$

      我们可以通过这些样本序列逼近真实的期望值,那么状态-动作价值函数就可以近似等于:

        $q_{pi}(s_t,a_t) simeq frac{1}{N}sumlimits_{i=1}^Nsumlimits_{k=0}gamma^kr_{t+k} $

      如果这个序列是有限的,采样的结果一般是有限的。

        $q_{pi}(s_t,a_t) simeq frac{1}{N}sumlimits_{i=1}^N[r_1^i + r_2^i + ......] $

      通过上面的方法就可以得到策略评估的结果,具体算法的流程如下:

      1)首先基于蒙特卡洛方法采样得到一定量的交互序列。

      2)通过序列计算出每一时刻的价值。

      3)将这些价值累积到值函数中进行更新。

      4)根据更新的值更新策略。

    3、探索与利用

      在上一章的策略迭代和值迭代算法中,我们都会遍历所有的状态,更新所有状态的价值函数。在这里我们没有遍历所有状态的这一步操作,我们在上面假设了采样后的序列的价值是可以代替当前时刻的价值函数,然而在实际中却往往达不到这样的效果,在实际问题中在每一个状态下,都是通过策略得到最优的动作去执行,然而这种情况可能会导致有些动作或状态无法被遍历到,那为了在采样的过程中让所有的状态都参与进行,我们需要引入一个随机性的策略来采样(注:策略可以分为确定性策略和随机性策略。确定性策略:一个状态对应一个动作;随机性策略:一个状态对应一个动作的概率分布),期望这样能遍历到所有的动作-状态对。

      在这里引入$ epsilon - greedy$ 算法:

      1)首先随机生成一个 $0 - 1$ 之间的数。

      2)判断这个随机数和 $epsilon$ 之间的大小,如果 随机数大于 $epsilon$,则选择当前的最优策略产生的动作;如果随机数小于 $epsilon$,则以同等概率随机选择一个动作。

      通过引入 $epsilon$ 值,以保证能遍历到所有的状态-动作对。在这里将上述两种选择称为探索和利用。

      探索:不拘泥于当前的表现,随机选择一些不同于当前策略的动作。

      利用:持续使用当前的最优策略,尽可能地获得更多的回报。

    4、蒙特卡洛的方差问题

      蒙特卡洛方法的成功是基于大数定理的,大数定理只说明了统计量的收敛性,并没有说明收敛的速度。很显然,如果采样集合的方差比较大,那么想让均值收敛就需要更长的时间;如果采样序列的方差较小,那么收敛的速度也会相应地加快。

      而蒙特卡洛方法每次采样的序列都比较长,那么序列之间的差异性就较大,因此最后得到的序列估计得方差也较大。而且蒙特卡洛方法在估计价值上的特点就是无偏差但方差较高

      此外在蒙特卡洛方法中也有两种计算序列价值的方法:

      1)first-visit。仅把状态序列中第一次出现该状态时的回报纳入到回报平均值的计算中。

      2)every-visit。针对一个状态序列中每次出现的该状态,都计算对应的回报值并纳入到回报平均值的计算中。

      总的来说,第一种计算方法计算量小,且方差要更小(但是不会太明显),第二种方法的计算量要大,方差也会更大些,但是在完整的样本序列较少时比较适用。

      事实上,在强化学习中也会牵涉到方差-偏差问题,蒙特卡洛方法的方差较大,而偏差很小。

  • 相关阅读:
    JeePlus:代码结构
    JeePlus:项目部署
    JeePlus:Maven 安装配置
    JeePlus:目录
    框架-Java:JeePlus
    Java-JSP:EL表达式
    Template-FreeMarker:模板开发指南
    Template-FreeMarker:什么是 FreeMarker?
    FreeMarker:
    Template-FreeMarker:目录
  • 原文地址:https://www.cnblogs.com/jiangxinyang/p/9963293.html
Copyright © 2011-2022 走看看