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}^N\sum_{k=0}^K\gamma^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) \]
我们观察下,上面公式很像梯度下降法\(\theta_t=\theta_{t-1}-\alpha\nabla{J}\),因为我们想要值函数尽量大,所以这里是一个梯度上升的过程。

3.3 蒙特卡罗法步骤

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

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

4. 探索与利用

4.1 如何得到这些游戏序列

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

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

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

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

5. 总结

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

转载于:https://www.cnblogs.com/huangyc/p/10392951.html

强化学习-蒙特卡罗法相关推荐

  1. 强化学习(四)用蒙特卡罗法(MC)求解

    在强化学习(三)用动态规划(DP)求解中,我们讨论了用动态规划来求解强化学习预测问题和控制问题的方法.但是由于动态规划法需要在每一次回溯更新某一个状态的价值时,回溯到该状态的所有可能的后续状态.导致对 ...

  2. 强化学习(七)时序差分离线控制算法Q-Learning

    在强化学习(六)时序差分在线控制算法SARSA中我们讨论了时序差分的在线控制算法SARSA,而另一类时序差分的离线控制算法还没有讨论,因此本文我们关注于时序差分离线控制算法,主要是经典的Q-Learn ...

  3. 【强化学习】Actor-Critic

    目录 Actor-Critic算法 概述 可选形式 算法流程 小结 强化学习笔记,内容来自 刘建平老师的博客 Actor-Critic算法 概述 ​ Actor-Critic包括两部分:演员(Acto ...

  4. 【强化学习】策略梯度Policy-Gradient

    目录 Value-based 强化学习方法的不足 Policy-based 强化学习方法的引入 策略梯度的优化目标 策略函数的设计 Softmax策略函数 Gauss策略函数 蒙特卡罗策略梯度rein ...

  5. 【强化学习】Sarsa 和 Sarsa(λ)

    目录 Sarsa算法(on-policy) 概述 on-poilcy: 算法流程 Sarsa(λ)算法(on-policy) 概述 状态价值迭代公式: 动作价值迭代公式: 算法流程 Sarsa小结 强 ...

  6. 强化学习(十四) Actor-Critic

    在强化学习(十三) 策略梯度(Policy Gradient)中,我们讲到了基于策略(Policy Based)的强化学习方法的基本思路,并讨论了蒙特卡罗策略梯度reinforce算法.但是由于该算法 ...

  7. 强化学习(六)时序差分在线控制算法SARSA

    在强化学习(五)用时序差分法(TD)求解中,我们讨论了用时序差分来求解强化学习预测问题的方法,但是对控制算法的求解过程没有深入,本文我们就对时序差分的在线控制算法SARSA做详细的讨论. SARSA这 ...

  8. 强化学习(五)用时序差分法(TD)求解

    在强化学习(四)用蒙特卡罗法(MC)求解中,我们讲到了使用蒙特卡罗法来求解强化学习问题的方法,虽然蒙特卡罗法很灵活,不需要环境的状态转化概率模型,但是它需要所有的采样序列都是经历完整的状态序列.如果我 ...

  9. 强化学习——马尔科夫决策过程 MDP

    马尔可夫决策过程是强化学习里面的一个基本框架. 马尔可夫过程.马尔可夫反馈过程是马尔可夫决策过程的基础,所以本博客将会一并介绍. 文章目录 1. 马尔科夫过程 Markov Process,MP 1. ...

最新文章

  1. python爬虫从入门到精通-Python爬虫从入门到精通视频(2018新版)
  2. JAVA怎么查找错误,如何调试错误“符号查找错误:未定义符号”
  3. lightoj 1020 (博弈)
  4. ssm使用全注解实现增删改查案例——EmpMapperImpl
  5. java实验金额转换_java 数字金额转换中文金额
  6. 作者:滕飞(1984-),女,博士,西南交通大学信息科学与技术学院讲师,CCF和ACM会员。...
  7. 机器学习也可以在线做!
  8. VC++的学习(基于VS2008)——windows程序内部运行机制
  9. 理发店收银系统php,【毕业论文】基于php+mysql美发店收银系统设计与实现.doc
  10. HashMap的五种遍历方法
  11. python入门指南-Python 30分钟入门指南
  12. Eclipse中Jar包的反编译(通过jar包查看源码)
  13. 弹性升级诀窍分享:让双11来的更猛烈些吧
  14. godaddy 安装 ssl
  15. c语言函数文档,C语言函数手册DOC.doc
  16. 神舟笔记本怎么进入bios?神舟笔记本bios设置U盘启动教程
  17. 周记——20150427
  18. windows7 32位系统下好用的一款视频制作工具--Windows live影音制作
  19. Debugging Events
  20. 医院排队叫号系统(JAVA版)

热门文章

  1. JDK JRE JVM三者之间的关系,以及JDK JRE包含的结构是什么?
  2. 408数据结构学习笔记-树-①树的逻辑结构
  3. javaee.jar与servlet-api.jar
  4. Python黑帽子 黑客与渗透测试编程之道(七) 第四章:Scapy:网络的掌控者
  5. Linux下离线安装Google Chrome
  6. 自动钉木箱机器人_她用钉满小孔的木箱种花,几个月后路人全看傻眼
  7. UWB定位matlab代码及详细解析(附github下载链接)
  8. 傻白入门芯片设计,华人CEO掌舵的全球十大半导体公司(十七)
  9. ERROR:Session/line number was not unique in database. History logging moved to new session.
  10. IBM合作伙伴世界峰会:将全部筹码都押在认知计算上