1. 无模型问题

在很多时候,我们无法得知模型信息,比如前几节的蛇棋中,我们不知道棋盘梯子的信息和骰子的信息,用数学化的方法来说,就是我们用于决策的智能体不知道状态转移概率PPP。和有模型问题使用VVV计算的方法相比,我们需要保存并更新QQQ,很容易波动不收敛,因此需要的迭代次数一般需要更多。
首先介绍蒙特卡洛法,这是一种策略迭代方法。

2. 采样的方法

2.1 计算公式

当我们无法得知PPP的时候,一个直观的想法就是使用大量的采样去进行估计。
为了方便,我们把策略迭代算法中策略评估的公式进行一下拆解:
Q=P(R+γV)Q=P(R+\gamma V)Q=P(R+γV)
V=ΠQV=\Pi QV=ΠQ
QQQ无法使用迭代的方法计算得到,因此使用蒙特卡洛法,采样得到大量的样本序列:
s0,a0,r0,s11,a11,r11...{s_0,a_0,r_0,s^1_1,a^1_1,r^1_1...}s0​,a0​,r0​,s11​,a11​,r11​...
s0,a0,r0,s12,a12,r12...{s_0,a_0,r_0,s^2_1,a^2_1,r^2_1...}s0​,a0​,r0​,s12​,a12​,r12​...
s0,a0,r0,s13,a13,r13...{s_0,a_0,r_0,s^3_1,a^3_1,r^3_1...}s0​,a0​,r0​,s13​,a13​,r13​...

s0,a0,r0,s1N,a1N,r1N...{s_0,a_0,r_0,s^N_1,a^N_1,r^N_1...}s0​,a0​,r0​,s1N​,a1N​,r1N​...
状态行动集(s0s_0s0​,a0a_0a0​)的值函数可以近似为:Q=1N(r0+γr11+γ2r21...+r0+γr12+γ2r22...+r0+γr1N+γ2r2N+...)Q=\frac{1}{N}(r_0+\gamma r^1_1+\gamma ^2r^1_2...+r_0+\gamma r^2_1+\gamma^2 r^2_2...+r_0+\gamma r^N_1+\gamma^2 r^N_2+...)Q=N1​(r0​+γr11​+γ2r21​...+r0​+γr12​+γ2r22​...+r0​+γr1N​+γ2r2N​+...)。再根据策略Π\PiΠ就可以计算出VVV了。
具体计算时,我们是使用更新的方法计算QQQ,而不是等遍历完再取均值。令qi=r0+γr1i+γ2r2i...q^i = r_0+\gamma r^i_1+\gamma ^2r^i_2...qi=r0​+γr1i​+γ2r2i​...
则更新公式为:Qi=Qi−1+1i(qi−Qi−1)Q^i=Q^{i-1}+\frac{1}{i}(q^i-Q^{i-1})Qi=Qi−1+i1​(qi−Qi−1)
可以证明:QN=1N(q1+...+qN)Q^N=\frac{1}{N}(q^1+...+q^N)QN=N1​(q1+...+qN)
更新公式和梯度下降法非常相像。

2.2 采样随机探索

在使用蒙特卡洛法采样的时候,我们有很多前进的方法。一方面,我们要保证行动aaa的最优性,这样才能准确估计出vvv;另一方面,我们要保证行动的随机性,这样我们才能访问到更多状态,避免陷入局部最优。
一种常见的策略是在采样的时候加入一定的随机性,比如ϵ\epsilonϵ-greedy策略,即以一定的概率采取随机行动,其他情况采取最优策略行动。

2.3 every visit和first visit

加入我们在行动的过程中,又碰到了(s0,a0)(s_0,a_0)(s0​,a0​)怎么办?一种方法是将其加入QQQ的计算之中,称为every visit方法;另一种方法是不加入,称为first visit方法。
在有限状态的序贯决策问题中,不同时间段访问同样状态的VVV值可能会差很大。这种情况下建议使用first visit方法,减少qqq值的方差,加快收敛速度。

3. 代码与测试

class MonteCarlo(object):def __init__(self, epsilon=0.0):self.epsilon = epsilon# 一轮蒙特卡洛采样def monte_carlo_eval(self, agent, env):state = env.reset()episode = []while True:ac = agent.play(state, self.epsilon)next_state, reward, terminate, _ = env.step(ac)episode.append((state, ac, reward))state = next_stateif terminate:breakvalue = []return_val = 0# 逆向计算q值for item in reversed(episode):return_val = return_val * agent.gamma + item[2]value.append((item[0], item[1], return_val))# 进行更新for item in reversed(value):if agent.value_n[item[0]][item[1]] == 0: # 这里是first visit方法;every visit把这句判断删除即可agent.value_n[item[0]][item[1]] += 1 # 访问次数agent.value_q[item[0]][item[1]] += (item[2] -  \agent.value_q[item[0]][item[1]]) /  \agent.value_n[item[0]][item[1]] def policy_improve(self, agent):new_policy = np.zeros_like(agent.pi)for i in range(1, agent.s_len):new_policy[i] = np.argmax(agent.value_q[i,:])if np.all(np.equal(new_policy, agent.pi)):return Falseelse:agent.pi = new_policyreturn True# monte carlo法def monte_carlo_opt(self, agent, env):for i in range(10): # 进行10轮迭代for j in range(100): # 每次采样100轮self.monte_carlo_eval(agent, env)self.policy_improve(agent)

对比测试结果如下:

ladders info:
{14: 65, 18: 48, 41: 68, 30: 45, 68: 41, 48: 18, 49: 89, 71: 79, 65: 14, 70: 18, 73: 41, 45: 30, 89: 49, 79: 71}
Iter 3 rounds converge
Timer PolicyIter COST:0.2772650718688965
return_pi=64
Timer MonteCarlo COST:0.22463107109069824
return_pi=30

MonteCarlo法的效果一般,主要是因为前几轮迭代的值方差很大,而我们对迭代次数进行了限制,因此较难收敛。下一节将介绍可以减小方差的时序差分法。

强化学习系列7:无模型的蒙特卡洛法相关推荐

  1. 强化学习总结(3-4)——无模型的价值函数的预测,蒙特卡洛和TD时序差分方法

    文章目录 强化学习总结(3-4) 无模型 预测价值函数 蒙特卡洛 时序差分(TD)学习 强化学习总结(3-4) ​ 最近呢,搞完有模型的强化学习之后,接下来就开始搞无模型的强化学习,发现还是无模型的强 ...

  2. 强化学习系列(1) 基本概念

    第一节 强化学习的基本概念 1. 背景介绍 强化学习(Reinforce Learning)又称增强学习,再励学习.是一个多学科交叉的概念. 它也是机器学习的一个重要分支,主要用来解决连续决策的问题. ...

  3. 强化学习系列(五):蒙特卡罗方法(Monte Carlo)

    一.前言 在强化学习系列(四):动态规划中,我们介绍了采用DP (动态规划)方法求解environment model 已知的MDP(马尔科夫决策过程),那么当environment model信息不 ...

  4. 强化学习系列(一):强化学习简介

    一.强化学习是什么? 首先,我们思考一下学习本身,当一个婴儿在玩耍时可能会挥舞双手,左看右看,没有人来指导他的行为,但是他和外界直接通过了感官进行连接.感知给他传递了外界的各种信息,包括知识等.学习的 ...

  5. 基于强化学习的自动化剪枝模型

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 来源丨AI科技评论 编辑丨极市平台 导读 GitHub上最新开源的一 ...

  6. 强化学习系列之翻译OpenAI用户手册(一)

    强化学习系列文章 第一章 强化学习入门 第二章 翻译OpenAI用户手册(一) 第三章 翻译OpenAI用户手册(二) 第四章 翻译OpenAI用户手册(三) 目录 用户手册 1.简介 1.1 这是什 ...

  7. 强化学习系列(十三):Policy Gradient Methods

    这是PG的基础篇,在深度强化学习系列中,有结合例子和监督学习的深刻理解PG的进阶篇. 一.前言 之前我们讨论的所有问题都是先学习action value,再根据所得的action value 来选择a ...

  8. 强化学习系列(1):强化学习(Reinforcement Learning)

    强化学习前世今生 也可以直接查看本博主强化学习专栏的简介: https://blog.csdn.net/gsww404/article/details/79763003 [直接点击查看完整版] 如今机 ...

  9. 强化学习系列文章(二十三):AirSim Python API图像与图像处理

    强化学习系列文章(二十三):AirSim Python API图像与图像处理 参考网址:https://microsoft.github.io/AirSim/image_apis/#segmentat ...

  10. Caffe学习系列(17):模型各层特征和过滤器可视化

    转载自: Caffe学习系列(17):模型各层特征和过滤器可视化 - denny402 - 博客园 http://www.cnblogs.com/denny402/p/5105911.html cif ...

最新文章

  1. SSO CAS 探究
  2. LINUX操作系统手机刷机包制作、修改方法
  3. 数字图像处理--几种图像均值滤波的java实现
  4. JAXB自定义绑定– Java.util.Date / Spring 3序列化
  5. 一组数字中算出最相近的组合_据说在金字塔里发现的这组数字,貌似是通往宇宙的密码...
  6. 微信造梦西游服务器错误,造梦西游ol常见问题解答
  7. 【最全】微信支付宝小程序蓝牙API开锁全流程
  8. 京东已删除订单恢复方法
  9. Go开发 之 单端口转发到多个端口
  10. Latex 定制合并表格
  11. 华为机试---Word Maze迷宫游戏
  12. 3.3 构建神经网络小结
  13. 交通 流量 时间序列预测,神经网络 机器学习 BPNN
  14. 用MATLAB做矩阵运算
  15. 倍福--通知方式实现ADS通信
  16. java jlabel图片大小_java – 调整图片大小以适应JLabel
  17. 配置本地时间服务器(集群)
  18. Piggy Back_KEY
  19. Linuc云面板---旗鱼云梯操作使用说明
  20. 好用的iPhone 数据恢复软件精选

热门文章

  1. 佩戴骨传导耳机对耳朵有损害?不仅无损相比传统耳机优点有很多
  2. 北京的十大尾货批发市场【接近生活】
  3. 声学混响中说的RT60是什么意思?
  4. 算法项目开展的数据准备及标注规范
  5. discuzx管理员、超级版主、版主管理手册
  6. Word控件Spire.Doc 【文本】教程(10) ;在 word 文档中的字符或句子周围应用边框
  7. mysql table crashed_快速解决MySQL:Table xxx is marked as crashed and should be repaired五个办法...
  8. 医疗器械计算机培训,深度学习,AI医疗器械“学然后知不足”
  9. 著名弹跳训练法 练成可提高30cm
  10. 论文读书笔记-ranking comments on the social web