动态规划(续)

Value Iteration

vk+1(s)=maxa∈A(Ras+γ∑s′∈SPass′vk(s′))vk+1(s)=maxa∈A(Rsa+γ∑s′∈SPss′avk(s′))

v_{k+1}(s) = \max_{a \in \mathcal{A}}\left(\mathcal{R}_s^a + \gamma \sum_{s'\in \mathcal{S}}\mathcal{P}_{ss'}^a v_k(s')\right)

state-value function迭代的复杂度是O(mn2)O(mn2)O(mn^2),其中m为action的数量,n为state的数量。而action-value function迭代的复杂度是O(m2n2)O(m2n2)O(m^2n^2)

动态规划的主要局限在于:

1.它依赖于概率模型。

2.计算复杂度太高,只适合规模中等(<1M的状态数)的情况。

DP的一些扩展

异步动态规划(Asynchronous Dynamic Programming)

采样更新(Sample Backups)

近似动态规划(Approximate Dynamic Programming)

参考

http://www.cppblog.com/Fox/archive/2008/05/07/Dynamic_programming.html

动态规划算法(Wikipedia中文翻译版)

https://www.zhihu.com/question/23995189

什么是动态规划?动态规划的意义是什么?

http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741374.html

动态规划算法

http://www.cppblog.com/menjitianya/archive/2015/10/23/212084.html

动态规划

https://segmentfault.com/a/1190000004454832

动态规划

http://www.cnblogs.com/jmzz/archive/2011/06/26/2090702.html

动态规划

http://www.cnblogs.com/jmzz/archive/2011/07/01/2095158.html

DP之Warshall算法和Floyd算法

http://www.cnblogs.com/jmzz/archive/2011/07/02/2096050.html

DP之最优二叉查找树

http://www.cnblogs.com/jmzz/archive/2011/07/02/2096188.html

DP之矩阵连乘问题

http://www.cnblogs.com/jmzz/archive/2011/07/05/2098630.html

DP之背包问题+记忆递归

http://www.cs.upc.edu/~mmartin/Ag4-4x.pdf

Bellman equations and optimal policies

https://mp.weixin.qq.com/s/a1C1ezL59azNfdM3TFGaGw

递推与储存,是动态规划的关键

Monte-Carlo

概率算法

概率算法是和确定性算法相对的概念。概率算法的一个基本特征是对所求解问题的同一实例用同一概率算法求解两次,可能得到完全不同的效果。这两次求解问题所需的时间甚至所得到的结果,可能会有相当大的差别。

常见的概率算法主要有:数值概率算法,舍伍德(Sherwood)算法,蒙特卡罗(Monte Carlo)算法和拉斯维加斯(Las Vegas)算法。

在《数学狂想曲(三)》中我们已经提到了“统计模拟”的概念,这实际上就是数值概率算法的应用,它主要利用了大数定律与强大数定律。

这里有两个容易混淆的概念:Monte Carlo methodMonte Carlo algorithm

Monte Carlo method这个概念的范围非常广,它实际上就是概率算法的别名。诸如用随机投针计算圆周率之类的算法,都可以看作是Monte Carlo method。

Monte Carlo algorithm就要狭义的多了,详情见下文。

舍伍德(Sherwood)算法

设A是一个确定算法,f(x)f(x)f(x)是解某个实例x的执行时间,设n是一整数,XnXnX_n是大小为n的实例的集合.假定XnXnX_n中每一个实例是等可能出现的,则算法A解XnXnX_n中一个实例的平均执行时间是:

f(x)¯¯¯¯¯¯¯¯¯¯=∑x∈Xnf(x)/nf(x)¯=∑x∈Xnf(x)/n

\overline{f(x)}=\sum_{x\in X_n}f(x)/n

假如存在一个实例x0x0x_0使得f(x0)≫f(x)¯¯¯¯¯¯¯¯¯¯f(x0)≫f(x)¯f(x_0)\gg \overline{f(x)},比如快速排序在最坏情况下的复杂度O(n)≫O(nlogn)O(n)≫O(nlog⁡n)O(n)\gg O(n\log n)。这时使用sherwood对原始算法进行改进是有价值的。

Sherwood算法通过增加一个较小的额外开销从而使得算法的复杂度与具体实例x无关。例如,在快速排序中,我们是以第一个元素为基准开始排序时,为了避免这样的情况,可以用舍伍德算法解决,也就是使第一个基准元素是随机的。

蒙特卡罗(Monte Carlo)算法

举个例子,假如筐里有100个苹果,让我每次闭眼拿1个,挑出最大的。于是我随机拿1个,再随机拿1个跟它比,留下大的,再随机拿1个……我每拿一次,留下的苹果都至少不比上次的小。拿的次数越多,挑出的苹果就越大,但我除非拿100次,否则无法肯定挑出了最大的。这个挑苹果的算法,就属于蒙特卡罗算法——尽量找好的,但不保证是最好的

拉斯维加斯(Las Vegas)算法

假如有一把锁,给我100把钥匙,只有1把是对的。于是我每次随机拿1把钥匙去试,打不开就再换1把。我试的次数越多,打开(最优解)的机会就越大,但在打开之前,那些错的钥匙都是没有用的。这个试钥匙的算法,就是拉斯维加斯算法——尽量找最好的,但不保证能找到

比如N皇后的排列问题,除了顺序枚举法之外,随机枚举也是一种策略。

Monte Carlo method与RL

MDP的缺点在于model是已知的,但在实际应用中,更多的是Model未知(或部分未知)或者建模困难的情况,这种情况下就需要使用MC method来生成相应的Model。

MC method在RL中主要有两种使用方式:

model-free:完全不依赖Model。

Simulated:简单的模拟,而不需要完整的Model。

MC method用experience替代了MDP中的transitions/rewards(也可以说是用empirical mean替代了expected),但需要注意这些experience不能是重复采样的,而且它只适用于周期性的MDP。

Monte Carlo Policy Evaluation

Monte Carlo Policy Evaluation的目标是对状态s进行估值。它的步骤是:

当s被访问到(visited)时:

增加计数:

N(s)←N(s)+1N(s)←N(s)+1

N(s)\leftarrow N(s) + 1
增加总奖励:

S(s)←S(s)+GtS(s)←S(s)+Gt

S(s)\leftarrow S(s) + G_t

V(s)=S(s)/N(s)V(s)=S(s)/N(s)

V(s) = S(s)/N(s)
反复多次:

N(s)→∞,V(s)→vπ(s)N(s)→∞,V(s)→vπ(s)

N(s)\to \infty,V(s)\to v_{\pi}(s)

根据Visit的策略不同,Monte Carlo Policy Evaluation又可分为:First-visit MC和Every-Visit MC。

两者的差别在于:First-visit MC的每次探索,一旦抵达状态s,就结束了,Every-Visit MC到达状态s之后还可以继续探索。

Incremental Monte-Carlo Updates

借用《机器学习(二十六)》中,求均值的小技巧,我们可以得到Incremental Mean。

用Incremental Mean进行更新,被称作Incremental Monte-Carlo Updates:

V(St)←V(St)+1N(St)(Gt−V(St))V(St)←V(St)+1N(St)(Gt−V(St))

V(S_t)\leftarrow V(S_t)+\frac{1}{N(S_t)}(G_t-V(S_t))

对于非平稳(non-stationary)问题,我们也可采用如下公式更新:

V(St)←V(St)+α(Gt−V(St))V(St)←V(St)+α(Gt−V(St))

V(S_t)\leftarrow V(S_t)+\alpha(G_t-V(S_t))

参考

https://mp.weixin.qq.com/s/F9VlxVV4nXELyKxdRo9RPA

强化学习——蒙特卡洛

https://www.zhihu.com/question/20254139

蒙特卡罗算法是什么?

http://www.cnblogs.com/2010Freeze/archive/2011/09/19/2181016.html

概率算法-sherwood算法

http://www.cnblogs.com/chinazhangjie/archive/2010/11/11/1874924.html

概率算法

https://mp.weixin.qq.com/s/wfCyii6bS-GxMZPg2TPaLA

蒙特卡洛树搜索是什么?如何将其用于规划星际飞行?

https://mp.weixin.qq.com/s/tqhPGG2Djl4gnd09RdHsUA

一个彻底改变世界的思想

https://mp.weixin.qq.com/s/vKVX-aJ7n7VVDXOpoTo1GQ

通过Python实现马尔科夫链蒙特卡罗方法的入门级应用

https://mp.weixin.qq.com/s/TMHaIRFdgJxG__1oqRq70Q

蒙特卡罗树搜索之初学者指南

Temporal-Difference Learning

TD

时序差分学习和蒙特卡洛学习一样,它也从Episode学习,不需要了解模型本身;但是它可以学习不完整的Episode,通过bootstrapping,猜测Episode的结果,同时持续更新这个猜测。

最简单的TD算法——TD(0)的更新公式如下:

V(St)←V(St)+α(Rt+1+γV(St+1)−V(St))V(St)←V(St)+α(Rt+1+γV(St+1)−V(St))

V(S_t)\leftarrow V(S_t)+\alpha(R_{t+1}+\gamma V(S_{t+1})-V(S_t))

其中,Rt+1+γV(St+1)Rt+1+γV(St+1)R_{t+1}+\gamma V(S_{t+1})被称作TD target,而δt=Rt+1+γV(St+1)−V(St)δt=Rt+1+γV(St+1)−V(St)\delta_t=R_{t+1}+\gamma V(S_{t+1})-V(S_t)被称作TD error。

下面用驾车返家的例子直观解释蒙特卡洛策略评估和TD策略评估的差别。

想象一下你下班后开车回家,需要预估整个行程花费的时间。假如一个人在驾车回家的路上突然碰到险情:对面迎来一辆车感觉要和你相撞,严重的话他可能面临死亡威胁,但是最后双方都采取了措施没有实际发生碰撞。如果使用蒙特卡洛学习,路上发生的这一险情可能引发的负向奖励不会被考虑进去,不会影响总的预测耗时;但是在TD学习时,碰到这样的险情,这个人会立即更新这个状态的价值,随后会发现这比之前的状态要糟糕,会立即考虑决策降低速度赢得时间,也就是说你不必像蒙特卡洛学习那样直到他死亡后才更新状态价值,那种情况下也无法更新状态价值。

TD算法相当于在整个返家的过程中(一个Episode),根据已经消耗的时间和预期还需要的时间来不断更新最终回家需要消耗的时间。

状态 已消耗时间 预计仍需耗时 预测总耗时
离开办公室 0 30 30
取车,发现下雨 5 35 40
离开高速公路 20 15 35
被迫跟在卡车后面 30 10 40
到达家所在街区 40 3 43
到家 43 0 43

基于上表所示的数据,下图展示了蒙特卡洛学习和TD学习两种不同的学习策略来更新价值函数(各个状态的价值)。这里使用的是从某个状态预估的到家还需耗时来间接反映某状态的价值:某位置预估的到家时间越长,该位置价值越低,在优化决策时需要避免进入该状态。对于蒙特卡洛学习过程,驾驶员在路面上碰到各种情况时,他不会更新对于回家的预估时间,等他回到家得到了真实回家耗时后,他会重新估计在返家的路上着每一个主要节点状态到家的时间,在下一次返家的时候用新估计的时间来帮助决策。

而对于TD学习,在一开始离开办公室的时候你可能会预估总耗时30分钟,但是当你取到车发现下雨的时候,你会立刻想到原来的预计过于乐观,因为既往的经验告诉你下雨会延长你的返家总时间,此时你会更新目前的状态价值估计,从原来的30分钟提高到40分钟。同样当你驾车离开高速公路时,会一路根据当前的状态(位置、路况等)对应的预估返家剩余时间,直到返回家门得到实际的返家总耗时。这一过程中,你会根据状态的变化实时更新该状态的价值。

TD vs. MC—1

通过这个例子,我们可以直观的了解到:

1.TD在知道结果之前可以学习,MC必须等到最后结果才能学习;

2.TD可以在没有结果时学习,可以在持续进行的环境里学习。

TD vs. MC—2

Gt=Rt+1+γRt+2+⋯+γT−1RTGt=Rt+1+γRt+2+⋯+γT−1RTG_t = R_{t+1} + \gamma R_{t+2} + \dots + \gamma^{T−1}R_T是Vπ(St)Vπ(St)V_{\pi}(S_t)的无偏估计值。

True TD target:Rt+1+γVπ(St+1)Rt+1+γVπ(St+1)R_{t+1}+\gamma V_{\pi}(S_{t+1}),也是Vπ(St)Vπ(St)V_{\pi}(S_t)的无偏估计值。

TD target:Rt+1+γV(St+1)Rt+1+γV(St+1)R_{t+1}+\gamma V(S_{t+1}),是Vπ(St)Vπ(St)V_{\pi}(S_t)的有偏估计值。

MC没有bias,但有着较高的Variance,且对初始值不敏感;

TD低variance, 但有一定程度的bias,对初始值较敏感,通常比MC更高效;

机器学习(二十八)——Monte-Carlo相关推荐

  1. OpenCV学习笔记(二十六)——小试SVM算法ml OpenCV学习笔记(二十七)——基于级联分类器的目标检测objdect OpenCV学习笔记(二十八)——光流法对运动目标跟踪Video Ope

    OpenCV学习笔记(二十六)--小试SVM算法ml 总感觉自己停留在码农的初级阶段,要想更上一层,就得静下心来,好好研究一下算法的东西.OpenCV作为一个计算机视觉的开源库,肯定不会只停留在数字图 ...

  2. 机器学习之十八(读书笔记)

    Generative Adversarial Network(生成性对抗网络) Conditional Generation by GAN 二十八.Generative Adversarial Net ...

  3. 2008R2Win7管理二十八Mail之基本使用

    2008R2Win7管理二十八Mail之基本使用 上篇我们已经安装好了exchange2010,呵呵本片简单介绍和看下ex2010的基本界面和使用 安装完成打开exchange控制台如图所示 汗,有试 ...

  4. 微信小程序把玩(二十八)image组件

    原文:微信小程序把玩(二十八)image组件 image组件也是一个程序不可缺少的,可以这样说一个app中image组件随处可以看到,一般 image有两种加载方式第一种是网络图片第二种是本地图片资源 ...

  5. Citrix 服务器虚拟化之二十八 XenApp6.5发布文档内容

    Citrix 服务器虚拟化之二十八  XenApp 6.5发布文档内容 XenApp可发布以下类型的资源向用户提供信息访问,这些资源可在服务器或桌面上虚拟化: 1)  服务器桌面:发布场中服务器的整个 ...

  6. (转载)Android项目实战(二十八):使用Zxing实现二维码及优化实例

    Android项目实战(二十八):使用Zxing实现二维码及优化实例 作者:听着music睡 字体:[增加 减小] 类型:转载 时间:2016-11-21 我要评论 这篇文章主要介绍了Android项 ...

  7. SAP UI5 初学者教程之二十八 - SAP UI5 应用的集成测试工具 OPA 介绍试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 初学者教程之一:Hello World SAP UI5 初学者教程之二:SAP UI5 ...

  8. FreeSql (二十八)事务

    FreeSql实现了四种数据库事务的使用方法,脏读等事务相关方法暂时未提供.主要原因系这些方法各大数据库.甚至引擎的事务级别五花八门较难统一. 事务用于处理数据的一致性,处于同一个事务中的操作是一个U ...

  9. 计算机英语翻译3000字,英语专四作文满分范文(二十八):计算机翻译

    英语专四作文满分范文(二十八):计算机翻译 2015年专四考试预计4月18日开考,考生们现在应该进入紧张的冲刺复习阶段,专四作文是很多同学感到头疼的,在这里新东方在线整理了英语专四作文满分范文供考生们 ...

  10. WCF技术剖析之二十八:自己动手获取元数据[附源代码下载]

    WCF技术剖析之二十八:自己动手获取元数据[附源代码下载] 原文:WCF技术剖析之二十八:自己动手获取元数据[附源代码下载] 元数据的发布方式决定了元数据的获取行为,WCF服务元数据架构体系通过Ser ...

最新文章

  1. 生猛!PDF 版本 6000 页 Java 手册开放下载!
  2. 吴恩达机器学习(第三章)——线性代数回顾
  3. why在重写equals时还必须重写hashcode方法
  4. Leecode 301. 删除无效的括号——Leecode每日一题系列
  5. Anaconda详细安装及安装Scrapy框架
  6. 解决ajax中ie缓存问题(手动添加时间戳)
  7. 可重构麦轮全向移动机器人分析(图片版)
  8. 正则表达式验证首尾是空格的字符串
  9. 拓端tecdat|R语言在BRFSS数据中可视化分析探索糖尿病的影响因素
  10. 超频电脑黑屏(超频失败怎么办)
  11. Oct.14 华为数通部算法岗面经
  12. 研表究明,汉字的序顺并不定一能影阅响读,比如当你看完这句话后,才发这现里的字全是都乱的。...
  13. [Unity] 二维洞穴地图随机生成
  14. PMP证书现在还值得考吗?
  15. 联想thinkpad待机怎么唤醒_联想电脑睡眠无法唤醒_联想电脑睡眠怎么唤醒
  16. 唯样商城:电路板上的字母都代表什么意思?
  17. 最大疯子树:树形DP优化:二次扫描+换根法(poj3585)
  18. ABP (.Net Core) 使用MySQL数据库
  19. 王文彬(淘宝网首席架构师)等关注探讨的问题
  20. python键盘监听及模拟键盘输入keyboard

热门文章

  1. 今天,我种下了一朵小蓝花
  2. mac 使用brew卸载安装node
  3. vue项目和react项目中禁止eslint
  4. Linux云服务器卸载安装MySql
  5. End to End Sequence Labeling via Bi-directional LSTM CNNs CRF
  6. 直观判断图像是否可以被实时处理
  7. emq+mysql设置_EMQ--添加mysql认证及mysql插件访问控制
  8. nginx 1.14.0 配置部署 thinkphp 5.1
  9. 如何遍历维数和各维上限未定的多维数组
  10. DedeCms织梦彩色标签云(tag)随机颜色和字体大小