zoukankan      html  css  js  c++  java
  • 强化学习-蒙特卡罗法

    1. 前言

    从本章起,我们开始解决更贴近实际的问题。前面提到我们接触过的问题有一个特点,即我们可以知道环境运转的细节,具体说就是知道状态转移概率(P(s_{t+1}|s_t,a_t))。对蛇棋来说,我们可以看到蛇棋的棋盘,也就可以了解到整个游戏的全貌,这时我们相当于站在上帝视角,能够看清一切情况。

    在很多实际问题中,我们无法得到游戏的全貌,也就是说,状态转移的信息(P(s_{t+1}|s_t, a_t))无法获得。

    一般来说,我们知晓状态转移概率的问题称为“基于模型”的问题(Model-based),将不知晓的称为“无模型”问题(Model-free)。后面我们要继续升级我们的问题,模拟一个真人去玩游戏,无法知道所有游戏的全貌。

    2. Model-free原理

    1. 确定一个初始策略(这和前面的算法一致)。
    2. 用这个策略进行游戏,得到一些游戏序列(Episode):({s_1,a_1,s_2,a_2,...,s_n,a_n})
    3. 一旦游戏的轮数达到一定数目,就可以认为这些游戏序列代表了当前策略与环境交互的表现,就可以将这些序列聚合起来,得到状态对应的值函数。
    4. 得到了值函数,就相当于完成了策略评估的过程,这样就可以继续按照策略迭代的方法进行策略改进的操作,得到更新后的策略。如果策略更新完成,则过程结束;否则回到步骤2。

    上面的流程十分清晰地介绍了学习的过程,此时学习的关键就落在了下面两个问题上。

    1. 如何得到这些游戏序列?
    2. 如何使用序列进行评估?

    我们用2个方法介绍Model-free的过程,本篇介绍“蒙特卡罗法(Monte Carlo Method)”和下一篇介绍“时序差分法(Temporal Difference Method)

    3. 蒙特卡罗法原理

    3.1 如何使用序列进行评估

    本节我们介绍蒙特卡罗法。在前面的章节里,我们曾介绍当环境信息,也就是状态转移概率已知时,可以使用Bellman公式,通过不断迭代得到状态-行动值函数:

    [q_{pi}(s_t,a_t)=sum_{s_{t+1}}p(s_{t+1}|s_t,a_t)[r_{a_t}^{s_{t+1}} + gamma * v_{pi}(s_{t+1})] ]

    然后通过值函数进行策略改进。而在无模型问题中,状态转移概率将无法知晓。于是我们需要把公式转变为

    [q_{pi}(s_t,a_t)=E_{s_{t+1}-p pi}[sum_{k=0}^{infty}gamma^kr_{t+k}] ]

    看到了等号右边的期望,我们很自然地联想到了蒙特卡罗法,它是一种通过随机采样估计期望值的方法,假设我们通过一些方法,从状态(s_t)和行动(a_t)开始不断地与环境交互,得到了大量的样本序列

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

    得到对应的回报序列

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

    其中N代表随机采样的轮数,K代表到达结束的步数。

    然后我们有一个状态-行动值函数的公式:

    [q(s,a) = frac{1}{N}sum_{i=0}^Nsum_{k=0}^Kgamma^kr^i_{t+k} ]

    通过大量的随机采样,上面这个公式能够比较号的描述初始的状态-行动值函数。

    3.2 状态-行动值函数更新

    令状态行动价值为(q),当前的时间为(t),积累的数量为(N),我们要求的值为(q^N_t),当前已知的值为(q^{N-1}_t)(N),每一个时刻的价值为(q'^i_t),于是可以得到:

    [q^N_t = q^{N-1}_t + frac{1}{N}(q'^N_t - q^{N-1}_t) ]

    我们观察下,上面公式很像梯度下降法( heta_t= heta_{t-1}-alpha abla{J}),因为我们想要值函数尽量大,所以这里是一个梯度上升的过程。

    3.3 蒙特卡罗法步骤

    以上就是蒙特卡罗法的全部内容,我们可以将它的算法全过程总结如下。

    1. 让Agent和环境交互后得到交互序列。
    2. 通过序列计算出每一时刻的价值。
    3. 将这些价值累积到值函数中进行更新。
    4. 根据更新的值函数更新策略”

    4. 探索与利用

    4.1 如何得到这些游戏序列

    那么,为了达到和基于模型的算法接近的效果,我们首先要做的是确保当前的问题有遍历所有状态-行动对的可能。

    在一些状态非常多的环境中,我们很难遍历所有的状态,这里采用一种叫(epsilon-greedy)的算法,首先随机生成一个0~1的数,然后用这个随机数进行判断,如果随机数小于某个值(epsilon),就采用完全随机的方式产生行动,此时每个行动产生的概率是一样的;如果随机数不小于某个值(epsilon),就选择当前的最优策略。

    image

    (epsilon-greedy)算法实际上是在解决强化学习中的一个经典问题:探索与利用。这是两种与环境交互的策略。

    • 探索:是指不拘泥于当前的表现,选择一些不同于当前策略的行动。
    • 利用:就是持续使用当前的最优策略,尽可能地获得更多的回报。

    5. 总结

    蒙特卡罗法是第一个不基于模型的强化问题求解方法。它可以避免动态规划求解过于复杂,同时还可以不事先知道环境转化模型,因此可以用于海量数据和复杂模型。但是它也有自己的缺点,这就是它每次采样都需要一个完整的状态序列。如果我们没有完整的状态序列,或者很难拿到较多的完整的状态序列,这时候蒙特卡罗法就不太好用了,也就是说,我们还需要寻找其他的更灵活的不基于模型的强化问题求解方法。

  • 相关阅读:
    PHP和Ajax设置页面请求超时
    Flex 布局教程
    数据库访问优化法则
    phpcms网站搬家至服务器
    phpcms网页替换验证码及搜索功能
    php判断手机段登录
    php环境搭建
    ThinkPHP框架
    JQuery事件
    JQuery
  • 原文地址:https://www.cnblogs.com/huangyc/p/10392951.html
Copyright © 2011-2022 走看看