强化学习笔记-05 蒙特卡罗方法Monte Carlo Method

news2024/11/27 12:52:39

本文是博主对《Reinforcement Learning- An introduction》的阅读笔记,不涉及内容的翻译,主要为个人的理解和思考。

上一节介绍了通过动态规划法来解决强化Markov decision process MDP环境下的学习问题, 动态规划法假设环境是完全可知,即对于状态动作间的转换概率p(s’,r|s,a)是完全可知,或者说给定状态state和运作action,可以确定性地知道下一状态。

但对于环境不可知的情况下,这时可以用蒙特卡罗方法来解决,其是通过从实际环境中去采样(experience)一系列状态、行动来获得真实奖励,此时状态动作的价值可以通过平均奖励来估计。

整体蒙特卡罗的学习还是基于通用policy两迭代过程(GPI),分为Policy Evaluation (Prediction)和Policy Improvement。Policy Evaluation阶段固定Policy,完成价值函数value function的估计。而在Policy Improvement中,通过价值函数估计来优化policy。对于蒙特卡罗方法,其关键在于价值函数value function的估计。完成价值函数估计后,优化policy便顺理成章了。

1. 蒙特卡罗方法

A. Policy Evaluation

前面分析了价值函数存在状态价值函数和动作价值函数两种,但是对于环境未知的情况下,已知状态的价值函数,却无法推导出Policy函数,因为无法确定当前状态和动作的下一状态。因此蒙特卡罗需要预估的是动作价值函数即q(s,a),其估计值为当前状态和动作下未来收益的平均值:

q(s,a)=mean(G(s,a))

蒙特卡罗方法将训练过程分成多轮,每一轮称为一个episode,在每一轮会从某个初始状态S_o和初始动作A_o开始,并从环境中采样一系列状态、动作、奖励序列:

S_o,A_o,R_1,S_1,A_1,...,S_{T-1},A_{T-1},R_{T},S_{T}

其中G(s,a)表示状态s和动作a首次出现之后的累积收益,即:

G(s=S_t,a=A_t)=\sum^{T}_{i=t}\gamma^{i-t} R_i

B. Policy Improvement

\pi(a|s)=\begin{cases} 1& \text{ if } a= \text{argmax}_a\ q(s,a)\\ 0& \text{ if } a\neq \text{argmax}_a\ q(s,a) \end{cases}

policy函数可以直接根据价值函数q(s,a)来计算,但是因为蒙特卡罗方法根据policy函数来采样一系列状态动作,如果\pi(a|s)太硬,会导致某些状态动作一直没有机会被采样,换而言之,可能丢失探索(explore)最优解的机会,因此一种思路是采用ε-greedy的方法,下式中\Lambda (s)表示状态s下可能采取的动作a的数量。

\pi(a|s)=\begin{cases} 1-\varepsilon +\frac{\varepsilon }{\Lambda (s)}& \text{ if } a= \text{argmax}_a\ q(s,a)\\ \frac{\varepsilon }{\Lambda (s)}& \text{ if } a\neq \text{argmax}_a\ q(s,a) \end{cases}

另一种方法是选择初始状态和动作时,让每一对状态和动作都有一定概率选择,称为exploring starts。

2. off-policy蒙特卡罗方法

前文我们讨论了强化学习方法存在explore和exploit的权衡,一方面需要往更优的方向去寻找,另一方面需要探索新的方向。我们之前方法是根据ε-greedy等方法调整policy函数,来兼顾explore和exploit,这种通过目标policy函数来产出下轮训练数据的方法,称为on-policy方法。

另一种更为直观的方法是将explore和exploit过程分别拆分两个policy函数,其中优化policy函数称为target policy,而另外一个专门用于生成状态和动作对,用于探索的决策函数称为behavior policy,下轮训练数据不通过目标policy函数产出,因此称为off-policy方法。off-policy方法描述了一种更为通用的强化学习方法。

另一个问题是在off-policy中,target policy函数和behavior policy函数会存在分布不一致,这个不一致会带来预估的偏差,因此多数的off-policy策略引入重要性采样,来调整target policy函数和behavior policy函数间的偏差。

A. 重要性采样Importance-sampling

对于蒙特卡罗方法,这个偏差主要在通过policy函数\pi(s|a)产出的采样序列生成概率上不同,假设由初始状态S_t,通过决策函数确定动作A_t,最终生成一系列的序列:

S_t,A_t,R_{t+1},S_{t+1},A_{t+1},...,S_{T-1},A_{T-1},R_{T},S_{T}

其生成概率可以表示为:

P(R_{t+1},S_{t+1},A_{t+1},...,S_{T-1},A_{T-1},R_{T},S_{T}|S_t,A_t\sim \pi)=\Pi^{T-1}_{k=t} \pi(A_k|S_k)P(S_{k+1}|S_k,A_k)

target policy函数\pi_\tau (s|a)和behavior policy函数\pi_b (s|a)间偏差可以表示为:

\rho(A_k,S_k)=\frac{\Pi^{T-1}_{k=t} \pi_\tau (A_k|S_k)P(S_{k+1}|S_k,A_k)}{\Pi^{T-1}_{k=t} \pi_b(A_k|S_k)P(S_{k+1}|S_k,A_k)}=\frac{\Pi^{T-1}_{k=t} \pi_\tau (A_k|S_k)}{\Pi^{T-1}_{k=t} \pi_b(A_k|S_k)}

此时我们修正累积收益的偏差:

G_\rho(A_k,S_k)=\rho(A_k,S_k)G(A_k,S_k)

B. 带权重的重要性采样weighted importance sampling

通过重要性采样,我们会在原有累积收益上乘上了一个偏差因子,这个偏差因子可能会因为target policy函数和behavior policy函数间的偏差而变得很大,从而导致同真实观察reward间的偏差太大,很难帮助target policy函数的学习,因此weighted importance sampling是在计算价值函数时,将偏差因子的也代入:

q(s,a)=\frac{mean(\rho(A_k,S_k)G(A_k,S_k))}{mean(\rho(A_k,S_k))}

但这种方式显示是有偏的,其价值函数估计更偏向于behavior policy,但是其预估更为稳定。

C. behavior policy的函数的选择:

实际上对于蒙特卡罗方法来说,对于behavior policy的函数可以用任何软函数,需要满足两个条件:

  • 可以保证target policy函数收敛
  • 所有状态-动作都有机会被选择

D. 方法

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/533493.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

APP测试常见功能测试点汇总,赶紧来记笔记

目录 1、安装和卸载 2、运行 3、注册和登录 4、日历控件 5、权限设置 6、软件更新  7、网络环境 8、兼容性测试:   9、异常测试   1、安装和卸载 安装和卸载是任何一款APP中都属于最基本功能。一旦出错,就属于优先级为紧要的BUG。因此APP…

三十六、链路追踪、配置中心

1、链路追踪 在一次调用链路中,可能设计到多个微服务,如果在线上,某个微服务出现故障,如何快速定位故障所在额微服务呢。 可以使用链路追踪技术 1.1链路追踪介绍 在大型系统的微服务化构建中,一个系统被拆分成了许多微…

Ambari-2.7.7源码编译

0 说明 本文基于Ambari-2.7.7版本进行源码编译。所需的编译资料统一提供如下: 链接:https://pan.baidu.com/s/1F2D7zBGfKihxTBArnOilTw 提取码:8m17 1 前提条件 1.1 下载ambari源码包 wget https://github.com/apache/ambari/releases/t…

【代码调试】《Multi-scale Positive Sample Refinement for Few-shot Object Detection》

论文地址:https://arxiv.org/abs/2007.09384#:~:textMulti-Scale%20Positive%20Sample%20Refinement%20for%20Few-Shot%20Object%20Detection.,previous%20attempts%20that%20exploit%20few-shot%20classification%20techniques%20 代码地址:https://git…

什么是低代码开发?低代码开发可以解决哪些问题?

一、什么是低代码开发? 低代码可以理解为是一种全新的应用开发理念。主要以可视化、参数化的系统配置方式来进行程序应用的开发,因此可以大幅度减少代码编写的工作,从而提高开发效率。 低代码平台则是通过对于业务场景进行高度抽象、提炼&a…

复习之Linux中的名词解释

1.什么是Linux? 严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统。因此LinuxLinux内核GNU软件 2.什么是Shell? Shell是系统的用户界面&…

Redis学习---01(Redis安装超详细)

一、Nosql非关系型数据库 (1)小tips: 数据库的发展: 单机时代memcached 缓存Mysql读写分离(一部分数据库只写,一些数据库只用来读)分库分表 水平拆分Mysql集群 (2) Nosql的特点: 对于数据量大,变化比较…

如何安装Tomcat并在IDEA中配置

下载 1.如果你使用的是Spring框架的6版本请下载Tomcat10版本 Apache Tomcat - Apache Tomcat 10 Software Downloads 2.如果你使用的是Spring框架的6以下请下载Tomcat9版本或以下都行,如果不知道你使用的是什么推荐下载Tomcat9版本使用 Apache Tomcat - Apache …

第三方直播云平台(保利威和阿里云)直播集成demo

第三方直播云平台&#xff08;保利威和阿里云&#xff09;直播集成文档整理。 保利威&#xff1a; 保利威帮助中心 js demo <div id"player"></div> <script src"//player.polyv.net/resp/live-h5-player/latest/liveplayer.min.js">…

通俗易懂的入门正则表达式

背景 其实在使用正则表达式之前&#xff0c;我们在查找文件之类的&#xff0c;已经用过类似正则表达式的符号&#xff0c;例如&#xff1a; // 匹配多个任意字符 ls *.js // 只匹配一个任意字符 ls ?.js这种方法很有用但也是有限的&#xff0c;而正则表达式则更加的完整、强…

Linux - 第14节 - 网络编程套接字(三)

1.Linux远程控制的网络程序 1.1.Linux远程控制的网络程序&#xff08;普通版&#xff09; 创建serverTcp.cc文件&#xff0c;写入下图一所示的代码&#xff0c;创建clientTcp.cc文件&#xff0c;写入下图二所示的代码&#xff0c;创建log.hpp文件&#xff0c;写入下图三所示的…

Dart整理笔记 | Dart参考手册

Dart SDK 安装 如果是使用Flutter 开发&#xff0c;Flutter SDK自带&#xff0c;无需单独安装Dart SDK。 如果需要独立调试运行Dart代码&#xff0c;需要独立安装Dart SDK。 官方文档&#xff1a;https://dart.dev/get-dart windows(推荐): http://www.gekorm.com/dart-wind…

秒级数据写入,毫秒查询响应,天眼查基于 Apache Doris 构建统一实时数仓

导读&#xff1a; 随着天眼查近年来对产品的持续深耕和迭代&#xff0c;用户数量也在不断攀升&#xff0c;业务的突破更加依赖于数据赋能&#xff0c;精细化的用户/客户运营也成为提升体验、促进消费的重要动力。在这样的背景下正式引入 Apache Doris 对数仓架构进行升级改造&a…

浅聊一下Linuxptp

浅聊一下Linuxptp 文章目录 浅聊一下Linuxptp1.什么是Linuxptp2.安装Linuxptp3.源码解析一下1.8个带main函数的源文件1.hwstamp_ctl.c2.nsm.c3.phc2sys.84.phc_ctl.85.pmc.86.ptp4l.c7.timemaster.c8.ts2phc.c 2.clock.c文件 4.自己实践 1.什么是Linuxptp LinuxPTP&#xff08…

HIS系统是什么意思?HIS系统的主要功能有哪些?

HIS系统是什么意思&#xff1f; HIS系统即医院信息系统(全称为Hospital information System) &#xff0c;是指利用计算机软硬件技术和网络通信技术等现代化手段&#xff0c;对医院及其所属各部门的人流、物流、财流进行综合管理&#xff0c;对在医疗活动各阶段产生的数据进行采…

构造函数(包括默认构造函数) ,析构函数的使用与特性

文章目录 一、构造函数二、默认构造函数&#xff08;也是构造函数&#xff09;默认构造函数的种类&#xff1a;1.无参类型2.全缺省类型3.编译器自动生成的4.汇总 三、析构函数 一、构造函数 构造函数是一个特殊的成员函数&#xff0c;名字与类名相同,创建类类型对象时由编译器自…

opencv_c++学习(七)

一、图像颜色空间变换 一、图像颜色空间介绍 RGB颜色模型 具体的体现样式如下&#xff1a; 在opencv中有可以实现数据类型的转换接口&#xff0c;如下&#xff1a; Mat:convertTo (OutputArray m, int rtype, alpha, double 1, double beta)实现如下&#xff1a; a.conve…

Python-字典与集合

学习内容&#xff1a;Python基础入门知识 专栏作者&#xff1a;不渴望力量的哈士奇不渴望力量的哈士奇擅长Python全栈白宝书[更新中],⑤ - 数据库开发实战篇,网安之路,等方面的知识,不渴望力量的哈士奇关注云原生,算法,python,集成测试,去中心化,web安全,智能合约,devops,golan…

如何使用jenkins、ant、selenium、testng搭建自动化测试框架

如果在你的理解中自动化测试就是在eclipse里面讲webdriver的包引入&#xff0c;然后写一些测试脚本&#xff0c;这就是你所说的自动化测试&#xff0c;其实这个还不能算是真正的自动化测试&#xff0c;你见过每次需要运行的时候还需要打开eclipse然后去选择运行文件吗&#xff…

NR RLC(二)相关参数及format

欢迎关注同名微信公众号“modem协议笔记”。 实际查看RLC部分log难免要翻协议&#xff0c;查阅最多的就是相关参数的含义&#xff0c;反而RLC具体过程就没有像当初阅读时那样特别关注了。其实清楚RLC参数含义&#xff0c;看38.322就没那么困难。而RLC具体过程往往要用到相关参…