1、策略与环境模型

  强化学习是继监督学习和无监督学习之后的第三种机器学习方法。强化学习的整个过程如下图所示:

    

  具体的过程可以分解为三个步骤:

  1)根据当前的状态 $s_t$ 选择要执行的动作 $ a_t $。

  2)根据当前的状态 $s_t $ 和动作 $ a_t$ 选择转移后的状态 $s_{t+1} $。

  3)根据在当前状态 $s_t$ 采取动作 $a_t$ 给出对应的奖励 $ r_{t+1} $。

  因此我们可以得到强化学习中三个重要的要素:环境的状态 $S$,个体的动作 $A$,环境的奖励 $R$。

  通过不断的重复上述三个过程就可以得到一条状态—动作链,其表示如下:

     $ {s_0, a_0, s_1, a_1, ......s_{t-1}, a_{t-1}, s_t} $

  现在我们来具体看看是如何生成动作—状态链的:

  1)从状态到动作

    从状态到动作是有Agent 的策略 $\pi$ 决定的,从条件概率上来说当前的动作选择应该和之前的所有状态和动作都有关系,如下在时刻 $t$ 的动作应该是:

    $ {a_t}^* = argmax_{a_{t, i}} p(a_{t, i}|{s_0, a_0, ..., s_t}) $

    然而对于上面的式子计算复杂度太高了,引入马尔科夫理论,认为当前的动作选择之和当前的状态有关,于是上面的公式就变成了:

    $ {a_t}^* = argmax_{a_{t, i}} p(a_{t, i}|s_t) $

    个体的策略函数 $\pi$ 可以表示为:

    $ \pi(a|s) = P(A_t=a | S_t=s)$

  2)从状态到状态

    在当前状态转移到下一状态时,我们同样假设下一状态之和当前状态以及当前动作相关,具体表达式如下:

    $ P(S_{t+1} | S_t, a_t)$

2、值函数与贝尔曼公式

  在强化学习中我们该如何评价我们每一步动作的好坏呢?这就需要值函数了。在执行每一个动作时都会有一个对应的奖赏,我们的目的就是要使得最终的加起来的奖赏最高。表达式如下:

    $ max \sum\limits_{t=0}^n r_t $  

  当n无限大时,上链的式子是一个无穷数列,且无法收敛,因此我们也无法计算出最高的奖赏。针对这个问题引入了奖励衰减因子 $\gamma$,表达式变成:

    $ max \sum\limits_{t=0}^n \gamma^t\, r_t $

  根据上面的结果可以给出 $t$ 时刻的状态价值函数,状态价值函数是期望值。在下式中的$G_t$表示从状态$S_t$出发到终点一条完整的序列的回报值,从$S_t$通过随机性采样到终点会得到无数条随机的$G_t$,而我们要得到一个确定的状态价值函数,那就是对随机值取期望即可。

    $ v_{\pi}(s) = \mathbb{E}_{\pi}(G_t|S_t=s ) = \mathbb{E}_{\pi}(r_{t+1} + \gamma r_{t+2} + \gamma^2r_{t+3}+...|S_t=s) $

  上面的公式又可以称为贝尔曼公式。对状态价值函数使用代换消元法可以推导出状态价值函数 $ v_{\pi}(s)$ 的递推关系:

    $ v_{\pi}(s) = \mathbb{E}_{\pi}(r_{t+1} + \gamma v_{\pi}(S_{t+1}) |S_t=s) $

  根据上式可知在 $t$ 时刻的状态 $S_T$ 和 $t+1$ 时刻的状态 $S_{T+1}$ 是满足递推关系的。

  除了上述的状态价值函数之外,还有一个状态-动作价值函数 $q_{\pi}(s,a)$,其表达式如下:

    $ q_{\pi}(s,a) = \mathbb{E}_{\pi}(G_t|S_t=s, A_t=a) = \mathbb{E}_{\pi}(r_{t+1} + \gamma r_{t+2} + \gamma^2r_{t+3}+...|S_t=s,A_t=a) $

    $ q_{\pi}(s,a) = \mathbb{E}_{\pi}(r_{t+1} + \gamma q_{\pi}(S_{t+1},A_{t+1}) | S_t=s, A_t=a) $

  状态价值函数和状态-动作价值函数之间也存在递推关系,状态价值函数可以用状态-动作价值函数表示:

    $v_{\pi}(s) = \sum\limits_{a \in A} \pi(a|s)q_{\pi}(s,a)$

  根据上面式子可知状态价值函数其实就是在该状态下基于策略 $\pi$ 得到的所有动作的状态-动作价值函数的期望。

  反过来,状态-动作价值函数也可以用状态价值函数表示:

    $q_{\pi}(s,a) = r_s^a + \gamma \sum\limits_{s' \in S}P_{ss'}^av_{\pi}(s')$

  将上面两个式子相结合又可以得到:

    $ v_{\pi}(s) = \sum\limits_{a \in A} \pi(a|s)(R_s^a + \gamma \sum\limits_{s' \in S}P_{ss'}^av_{\pi}(s'))$

    $ q_{\pi}(s,a) = R_s^a + \gamma \sum\limits_{s' \in S}P_{ss'}^a\sum\limits_{a' \in A} \pi(a'|s')q_{\pi}(s',a')$

  

 3、策略迭代与值迭代

  解决强化学习的一个问题就是要寻找最优策略使得个体在与环境的交互过程中获得最高的奖赏。用 $\pi^*$ 来表示这个最优策略,一旦找到该最优策略,强化学习的问题就解决了。

  首先提出强化学习的两个基本问题:

  1)预测问题。给定强化学习的状态集$S$, 动作集 $A$ ,模型状态转化概率矩阵 $ P$,即时奖励 $R$,奖励衰减因子 $\gamma$,策略 $\pi$。求解该策略的状态价值函数 $v(\pi)$。

  2)控制问题。也就是求解最优的价值函数和策略。只给定了强化学习的状态集$S$, 动作集 $A$ ,模型状态转化概率矩阵 $ P$,即时奖励 $R$,奖励衰减因子 $\gamma$。求解最优策略 $\pi^*$ 和最优状态价值函数 $v^*$。

  现在来看看如何解决这些问题:

  1)预测问题也称为策略评估。

  其整体步骤如下:

  首先给定策略,状态转移概率,回报和衰减因子,对状态集中的所有状态初始化状态价值。

  然后从$t=0$时刻开始迭代:

  假设在第 $t$ 轮迭代已经计算出所有的状态的状态价值,那么在 $t+1$轮就可以利用之前计算出的状态价值计算当前的状态价值,在已知状态转移概率的情况下,可以通过贝尔曼方程来实现:

    $v_{t+1}(s) = \sum\limits_{a \in A} \pi(a|s)(r_s^a + \gamma \sum\limits_{s' \in S}P_{ss'}^av_{t}(s'))$

  因此策略评估的求解问题本质上迭代解法,而且用的是高斯-赛德尔迭代法。

  2)控制问题的解决方案有两个:策略迭代和值迭代。这个两个方法都包含策略评估和策略改善两个步骤,具体的解决方案如下:

  策略迭代的过程:

    1)初始化策略 $\pi = \pi_0$,$t=0$时刻的状态集合中各状态的价值函数。

    2)for 1 to l(策略更新迭代至收敛的步数):

      3)for 1 to m(高斯-赛德尔迭代求解的步数):

        4)根据下面的方程更新状态空间中状态的价值函数:

          $v_{t+1}(s) = \max_{a \in A}(r_s^a + \gamma \sum\limits_{s' \in S}P_{ss'}^av_{t}(s'))$

      5)利用该状态价值函数计算出状态-动作价值函数 $q(s, a)$,然后找到更好的策略 $\pi^*$(备注:此时的状态价值函数是完全收敛的结果,求解方案和上面的策略评估是完全一样的)。

        $\pi' = argmax_{a} q(s, a)$

    6)重复2)到5),直至$\pi_{l+1} = \pi+l$,则得到最优策略 $\pi^* = \pi_l$。

    策略迭代在每一个策略下都要得到收敛后的状态价值函数,然后根据该状态价值函数来更新策略(实际上是一个策略评估过程),因此收敛会比较慢。

  值迭代的过程:

    1)初始化策略 $\pi = \pi_0$,$t=0$时刻的状态集合中各状态的价值函数。

    2)for 1 to l(策略更新迭代至收敛的步数):

      3)for 1 to m(高斯-赛德尔迭代求解的步数):

        4)根据下面的方程更新状态空间中状态的价值函数:

          $v_{t+1}(s) = \max_{a \in A}(r_s^a + \gamma \sum\limits_{s' \in S}P_{ss'}^av_{t}(s'))$

        5)利用该状态价值函数计算出状态-动作价值函数 $q(s, a)$,然后找到更好的策略 $\pi^*$(备注:此时的状态价值函数是完全收敛的结果,求解方案和上面的策略评估是完全一样的)。

          $\pi' = argmax_{a} q(s, a)$

    6)重复2)到5),直至$\pi_{l+1} = \pi+l$,则得到最优策略 $\pi^* = \pi_l$。

    值迭代和策略迭代唯一不同的是随着状态价值的迭代及时调整策略,也就是上面第5步时紧跟着第4步发生的,而不是等到第3步循环完,即状态价值函数收敛的情况下才更新策略。这种做法的收敛更快。

  

强化学习(一)—— 基本概念及马尔科夫决策过程(MDP)的更多相关文章

  1. 强化学习(二)马尔科夫决策过程(MDP)

    在强化学习(一)模型基础中,我们讲到了强化学习模型的8个基本要素.但是仅凭这些要素还是无法使用强化学习来帮助我们解决问题的, 在讲到模型训练前,模型的简化也很重要,这一篇主要就是讲如何利用马尔科夫决策 ...

  2. 【转载】 强化学习(二)马尔科夫决策过程(MDP)

    原文地址: https://www.cnblogs.com/pinard/p/9426283.html ------------------------------------------------ ...

  3. 【强化学习】MOVE37-Introduction(导论)/马尔科夫链/马尔科夫决策过程

    写在前面的话:从今日起,我会边跟着硅谷大牛Siraj的MOVE 37系列课程学习Reinforcement Learning(强化学习算法),边更新这个系列.课程包含视频和文字,课堂笔记会按视频为单位 ...

  4. 强化学习 1 --- 马尔科夫决策过程详解(MDP)

    强化学习 --- 马尔科夫决策过程(MDP) 1.强化学习介绍 ​ 强化学习任务通常使用马尔可夫决策过程(Markov Decision Process,简称MDP)来描述,具体而言:机器处在一个环境 ...

  5. 隐马尔科夫模型HMM学习最佳范例

    谷歌路过这个专门介绍HMM及其相关算法的主页:http://rrurl.cn/vAgKhh 里面图文并茂动感十足,写得通俗易懂,可以说是介绍HMM很好的范例了.一个名为52nlp的博主(google ...

  6. PGM学习之七 MRF,马尔科夫随机场

    之前自己做实验也用过MRF(Markov Random Filed,马尔科夫随机场),基本原理理解,但是很多细节的地方都不求甚解.恰好趁学习PGM的时间,整理一下在机器视觉与图像分析领域的MRF的相关 ...

  7. 自然语言处理(1)-HMM隐马尔科夫模型基础概念(一)

    隐马尔科夫模型HMM 序言 文本序列标注是自然语言处理中非常重要的一环,我先接触到的是CRF(条件随机场模型)用于解决相关问题,因此希望能够对CRF有一个全面的理解,但是由于在学习过程中发现一个算法像 ...

  8. 隐马尔科夫模型(HMM)的概念

    定义隐马尔科夫模型可以用一个三元组(π,A,B)来定义:π 表示初始状态概率的向量A =(aij)(隐藏状态的)转移矩阵 P(Xit|Xj(t-1)) t-1时刻是j而t时刻是i的概率B =(bij) ...

  9. 用hmmlearn学习隐马尔科夫模型HMM

    在之前的HMM系列中,我们对隐马尔科夫模型HMM的原理以及三个问题的求解方法做了总结.本文我们就从实践的角度用Python的hmmlearn库来学习HMM的使用.关于hmmlearn的更多资料在官方文 ...

随机推荐

  1. Excel通用类工具(二)

    前言 上一篇中写到了用反射来处理类中的不用的属性,但是Excel的列名还得手动输入,这样还是比较麻烦的,今天这篇就利用自定义注解来解决手动传入列名的问题:其实很简单的,只需要在上一篇的基础上加一个类就 ...

  2. 微信分享链接出现config:invalid signature错误的解决方法

    首先贡献jssdk下载地址:http://demo.open.weixin.qq.com/jssdk/sample.zip  不建议大家在*SDN上花钱买积分下载 当开发微信时需要做特定的页面做分享时 ...

  3. js 每到达5次换一行

    function getYourString(s) { var res = ''; var length = s.length; for (var i = 0, j = 1; i < lengt ...

  4. js (jQuery)分组数据

    function getobjArr (data) { var result = []; data.HELMET.system = '系统分类' // console.log(data) $.each ...

  5. springboot 整合 redis

    jedis 和 lettuce 都是用来连接 redis 的客户端,jedis 如果不使用连接池是非线程安全的,lettuce 使用 netty 线程安全且并发性能更好: springboot 2.x ...

  6. Python3 jupyter notebook 服务器搭建

    1. jupyter notebook 安装 创建 jupyter 目录 mkdir jupyter cd jupyter/ 创建独立的 Python3 运行环境,并激活进入该环境 virtualen ...

  7. (网页)JavaScript周末总结(一)

    本周学习的内容总结: 1. 2章在html中使用javascript. 2. 3章Javascript的基本概念. 3. 4章变量,作用域,内存问题. 1-1:2章以下内容: 1.包含javascri ...

  8. html-edm(邮件营销)编写规则

    最近写了一个edm邮件 以前没有接触过  使用的是很老的html页面编写规则  只能用table标签  在此记录一下edm编写的一些规则 个人参考的是这两个网址,转载一下 http://www.zco ...

  9. [20181015]为什么是3秒.txt

    [20181015]为什么是3秒.txt --//以前测试:连接http://blog.itpub.net/267265/viewspace-2144765/=>为什么是12秒.txt.--// ...

  10. [20180814]慎用查看表压缩率脚本.txt

    [20180814]慎用查看表压缩率脚本.txt --//最近看exadata方面书籍,书中提供1个脚本,查看某些表采用那些压缩模式压缩比能达到多少.--//通过调用DBMS_COMPRESSION. ...