当前位置: 首页 > 编程日记 > 正文

不止Markov决策过程,全景式分析强化学习研究内容

作者 | 肖智清

编辑 | 刘静

来源 | CSDN(ID:CSDNnews)

强化学习作为通用人工智能的希望,吸引了很多人工智能爱好者学习和研究。Markov决策过程是最知名的强化学习模型,强化学习教程也常以Markov决策过程作为起点。但是,强化学习并不只有Markov决策过程这一种模型。本文全景式地分析强化学习的研究内容,展示Markov决策过程以外的广阔天地。

正强化与负强化

强化学习是一类能够最大化奖励、最小化惩罚的机器学习算法。强化学习这一概念在历史上来源于行为心理学,来描述生物为了趋利避害而改变自己行为的学习过程。这一概念后来被引入到人工智能领域中。

强化可以分为正强化和负强化。例如,我在写论文的过程中会有很多行为。如果某些行为能够让我的论文更容易被录用,甚至还能得最佳论文,获得很多引用,那么我会在以后更倾向采用这样的行为。这里的论文录用、论文获奖、论文被引就是正强化。如果某些行为会导致论文被拒,或是被查出学术不端行为,毕不了业了,那么我会在以后避免采用这样的行为。这里的论文悲剧、查重事故、毕不了业就是负强化。

在强化学习问题的建模过程中,正强化可以用奖励来量化,而负强化可以用代价来量化。

Jack Michael的论文《Positive and negative reinforcement, a distinction that is no longer necessary》(1975)论证了正强化和负强化的等价性。这意味着,奖励和代价可任取其一,最大化奖励和最小化代价没有区别。

智能体/环境接口

智能体/环境接口是强化学习最常见的建模方法,它把任务中的所有元素划分为智能体和环境两个部分:决策和学习的部分归为智能体,把其他部分归为环境。

考虑写论文的例子:我学习如何写论文,也决定要怎么写。我的学习和决策部分就是智能体。但是我自己整个人却不全是智能体。比如如果我生病了,那我就不写论文了。我的健康状况就属于环境的部分。

用智能体环境接口将智能体和环境分开后,智能体和环境之间只需要通过三个要素来交互。这三个要素是:动作、观测、奖励。

前面已经论证,奖励可以等价于负的代价,奖励一定是数值的,比如说是一个实数。与之相对,动作和观测不一定是数值。

例如,观测可以是“看到了帅气的小哥哥”或是“看到了漂亮的小姐姐”这样的事件,动作可以是“上前向小哥哥要微信”这样的动作。

图   智能体/环境接口

快问快答

问:强化学习问题一定要使用智能体/环境接口来研究吗?

答:不一定。我们也可以在不划分智能体和环境的情况下对任务进行整体优化。比如我们知道某些参数能够驱动整个系统,那么我可以用Monte Carlo方法评估不同参数下的系统性能,再用进化算法求解最优参数。这样就在没有使用智能体/环境接口的情况下完成了强化学习。

问:既然强化学习可以采用智能体/环境接口也可以不采用智能体/环境接口,那为什么绝大多数求解使用智能体/环境接口呢?

答:智能体/环境接口把主观可以控制的部分和客观不能改变的部分分开,便于进一步分析和求解问题。

序贯决策与时间指标

智能体和环境可以交互多次,引入序贯决策问题。

对于序贯决策问题,我们可以引入时间指标来标记决策的顺序。

如果决策机会是可数的(有限次数或是无限可数次数),那么我们可以把决策时机和自然数一一对应。比如说第一次决策时机记为t=0,第二次决策时机记为t=1,依此类推。这时的智能体/环境接口就成为离散时间智能体/环境接口。

如果决策机会是不可数的,那么我们可以把决策时机和其等势的集合(如非负实数集)一一对应。时间指标规范化到实数集或其连续子集的时候智能体/环境接口就成为连续时间智能体/环境接口。

快问快答

问:强化学习问题一定是序贯决策问题么?

答:不一定。比如单次赌博机问题就不是序贯决策问题。非序贯决策问题不需要引入时间指标。

问:决策时机一定可以规范化为自然数集或是非负实数集么?

答:不一定。例如,对于半Markov过程,决策间隔是随机的。并且决策间隔的值会影响后续结果,所以模型不能忽略决策间隔。例如,我投了会议论文,下次决策的机会就是可以回复审稿人意见的时候。审稿人什么时候发回意见是不确定的,并且审稿人发回什么意见是和审稿人什么时候把审稿意见传上网是有关系的。

强化学习任务还可以根据智能体的数量划分为单智能体任务和多智能体任务。当任务中有多个智能体的时候,多个智能体并不一定同时有决策机会。在某个时刻,可能只有某些智能体有资格决策,其他智能体可能只能观察,或是连观察的资格都没有。

例如,几个人一起玩吃鸡游戏。某些玩家可能刚开局就落地成盒,后面就不用决策了。某些玩家能坚持到最后,有更多的决策机会。

环境的可观测性与环境模型

智能体获得观测后,有可能会知道环境信息。如果智能体能够通过观测完全了解环境,那么称该任务是完全可观测的;如果智能体通过观测完全不能了解环境,那么该任务是完全不可观测的;如果智能体通过观测能够部分了解环境,则该任务是部分可观测的。

强化学习算法可以分为有模型算法和无模型算法两类。

有模型算法是在求解过程中利用环境模型的算法。环境模型可以是事先给定的(比如AlphaGo算法、动态规划算法),也可以通过学习得到(比如Dyna算法、WorldModels算法)。

无模型算法不需要依赖环境模型的实现,实现更加简单。

无论算法是有模型算法还是无模型算法,可以假设环境具有某种驱动的形式。最常见的假设是认为从状态和动作到观测和奖励是以概率形式驱动的,可以表示为Pr[O,R|S,A]。

快问快答

问:环境一定是以概率形式驱动的吗?

答:不一定。环境还可能以其他形式驱动,比如以组合形式驱动。例如对于井字棋问题,就可以建模为组合问题,用alpha-beta算法求解。如果将本来的组合形式驱动的任务强行建模为用概率形式驱动的任务,则可能求不到最优解。对于围棋,AlphaGo算法并不一定能得到最优解。AlphaGo只是得到了相对比较好的解。

深度强化学习的新机会

从1950年算起,强化学习已经有接近70年的研究历史。在这并不短暂的研究历史中,绝大多数的研究都是和深度学习无关的,其算法是非深度强化学习算法。在诸多非深度强化学习算法中,资格迹算法实现简洁、性能优异,一度成为旗舰强化学习算法。

2013年,DeepMind发明了DQN算法,成功将深度学习和强化学习结合起来,开启了深度强化学习的新纪元。此后数年,强化学习的成果日新月异,很多非常困难的问题都被深度强化学习算法解决。

深度强化学习能够获得如此巨大的成功,原因在于深度学习可以表示非常复杂的解。

非深度强化学习算法能求解有数千个参数的解,而深度强化学习算法的解的参数数量可以远远超过这个数。具体而言,无模型深度强化算法的可以求解出有数亿参数的解,而有模型深度强化学习算法可以求解出有数千亿个参数的解。一般认为,有模型算法能够比无模型算法支持更复杂的解。如果对无模型算法强行使用过多的参数个数,会导致训练无法启动。

样本复杂性是强化学习算法的一个非常重要的性能指标。有观点认为,有模型算法之所以能够比无模型算法获得更复杂的解,正是因为有模型算法的样本利用率更高。

例如:围棋是一个非常困难的问题,它的解非常复杂,需要搭配非常深的神经网络。AlphaGo这样的有模型算法就充分依赖给定的模型,利用MCTS算法提高了样本利用率。

结语

诸多强化学习教程都是从学习Markov决策过程开始的。但是强化学习模型远不只有Markov决策过程这一种。

在本文中,我们已经知道强化学习不一定要用智能体环境接口,时间指标不一定是自然数集或非负实数集,环境不一定是概率驱动的,从观测不一定能完全知道状态,多个智能体不总是同时有资格决策,等等。所有这一切,都超出了Markov决策过程的模型假设。

强化学习的模型如此众多,在选择模型时要遵循两大准则:其一,模型要体现要解决的问题。模型往往是真实场景的简化。如果一个模型的的解答不足以充分解决要解决的真实问题,那么这个模型是不够的。其二,模型要能够妥善求解。如果一个模型太复杂,以至于完全无法从这个复杂至极的模型中获得任何有用的知识,那么这个模型也是没有什么用的。

作者:肖智清,清华大学工学博士。著有《神经网络与PyTorch实战》《强化学习:原理与Python实战》。scipy、sklearn等开源项目源码贡献者。近7年发表SCI/EI论文十余篇,多个顶级期刊和会议审稿人。在国内外多项程序设计和数据科学竞赛上获得冠军。

(*本文为AI科技大本营转载文章,转载请联系原作者)

精彩推荐

开幕倒计时3天!2019 中国大数据技术大会(BDTC)即将震撼来袭!豪华主席阵容及百位技术专家齐聚,十余场精选专题技术和行业论坛,超强干货+技术剖析+行业实践立体解读。

推荐阅读

  • 一张图生成定制版二次元人脸头像,还能“模仿”你的表情

  • 激辩:机器究竟能否理解常识?

  • 阿里正式开源通用算法平台Alink,“双11”将天猫推荐点击率提升4%

  • 最新单步目标检测框架,引入双向网络,精度和速度均达到不错效果

  • 从拨号到 5G :互联网登录完全指南

  • 测试小白必读!从0基础做到「大厂测试」,要掌握什么技能?

  • 科技公司最爱的50款开源工具,你都用过吗?

  • OceanBase 的前世今生

  • 想做好区块链数据分析?先来看看如何解决“去匿名化”这个大难题

  • 把700元的单片机改造成以太坊节点, 9步get起新技能

  • 你点的每个“在看”,我都认真当成了AI

相关文章:

Windows下创建进程简介

正在执行的应用程序称为进程,进程不仅仅是指令和数据,它还有状态。状态是保存在处理器寄存器中的一组值,如当前执行指令的地址、保存在内存中的值,以及唯一定义进程在任一时刻任务的所有其他值。进程与应用程序的一个重要的区别在…

jQuery中鲜为人知的的几个方法

转来学习一下 jQuery中鲜为人知的的几个方法 jQuery近些年来仍旧是web开发中最受欢迎的类库,虽然大家褒贬不一,但是仍旧不失为一款最流行的Javascript,在今天这篇文章中,我们将介绍几个jQuery的相关方法,无论你是入门级…

Linux下创建进程简介

在博文https://blog.csdn.net/fengbingchun/article/details/108940548中简单介绍了Windows下通过函数CreateProcess创建进程的过程,这里简单介绍下Linux下通过fork函数创建进程的过程。很早之前在https://blog.csdn.net/fengbingchun/article/details/45690745中也…

热更新 FrameWork

工作中遇到想要绕过AppStore直接更新App的要求!这里友情提示下,看了很多资料只是是实现了功能,但在项目中并没有真正用到!资料大多都显示会被拒,这个说的是个人级的,好像企业级的不会这样,仅仅是项目需要做…

陆首群:评人工智能如何走向新阶段?

作者 | 陆首群,中国开源软件推进联盟名誉主席 出品 | AI科技大本营(ID:rgznai100) 编者按:近来,业内关于深度学习算法的潜力是否已达天花板的争论陆续发出。有人认为,基于深度学习算法的应用还有深度开拓空…

Mysql INSERT、REPLACE、UPDATE的区别

用于操作数据库的SQL一般分为两种,一种是查询语句,也就是我们所说的SELECT语句,另外一种就是更新语句,也叫做数据操作语句。言外之意,就是对数据进行修改。在标准的SQL中有3个语句,它们是INSERT、UPDATE以及…

软件调试的艺术笔记:GDB

很久之前,在https://blog.csdn.net/fengbingchun/article/details/41413381中简单整理过gdb中常用的一些命令,不齐全,这里按照《软件调试的艺术》一书中关于gdb的介绍再做次整理。《软件调试的艺术》于2009年由人民邮电出版社出版。 1. 预备…

App Store 审核被拒整理

整理以前和现在遇到的审核被拒第一:2.2 DetailsWe discovered one or more bugs in your app when reviewed on iPhone running iOS 8.1.3 on both Wi-Fi and cellular networks. Specifically, we were not able to complete the In App Purchase. When tapped on …

只服这篇“神文”:基于老子哲学、相对论的超级人工智能模型

作者 | Anonymous authors译者 | TroyChang出品 | AI科技大本营(ID:rgznai100)在此前我们为大家介绍 ICLR 2020 论文投稿情况时,提到了一篇“神作”在论文中作者们提出一个 ASI 概念(Artificial Super Intelligence&am…

Navicat Premium使用教程【比较详细】

Navicat Premium使用教程简介:Navicat Premium是众所周知的数据库操作软件。本文比较详细。1、打开Navicat Premium,点击连接,选择MySQL,创建新连接。输入安装MySQL是的用户名和密码。点击确定。2、admin数据连接已经创建成功。下…

如何用Neo4j和Scikit-Learn做机器学习任务?| 附超详细分步教程

作者 | Mark Needham译者 | Tianyu、Shawnice编辑 | Jane出品 | AI科技大本营(ID:rgznai100)图算法不是一个新兴技术领域,在开源库中已经有很多功能强大的算法实现。近两年,业内的学者与科学家都在积极探索可以弥补深度…

Docker在Ubuntu16.04和Windows10家庭版上安装操作步骤

之前在 https://blog.csdn.net/fengbingchun/article/details/109559500 中对Docker作了简单的介绍,这里介绍下Docker在Ubuntu16.04 x86_64 64位上和Windows10 x86_64 64位家庭版上的安装过程。 在Ubuntu上安装Docker(或Docker引擎),Ubuntu必须是64位的…

iOS 不同机型屏幕适配

// .pch 文件中写 // 判断是iPhone机型 /** 4s 960 * 640* 5/5s 1136 x 640* 6/6s/7/8 4.7英寸 1334 x 750* 6p/6sp/7p/8p 5.5英寸 1920 x 1080* X 5.8英寸 2436 x 1125}*/ #define IS_IPHONE_4s [UIScreen instancesRespondToSelector:selector(currentMode)] ? \ CGSizeEqua…

北京中天荣泰视觉检测 仿真

www.romtek.cnhttp://jobs.zhaopin.com/191485013250433.htm?ssidkeyy&ff01&ss101转载于:https://www.cnblogs.com/pengkunfan/p/4316018.html

Docker客户端常用命令整理

之前在 https://blog.csdn.net/fengbingchun/article/details/109584460 中介绍过在Windows10家庭版和Ubuntu16.04上安装Docker的操作步骤,这里整理下Docker客户端常用命令。 在Windows10家庭版上运行Docker后,通过VMware就不能打开Ubuntu16.04虚拟机了…

深度学习入门笔记,三流程序员如何凭借实力逆袭高薪?你不服不行!

最近经常有朋友提及,想要入门深度学习,该如何学习?关于深度学习,网上的资料很多,不过貌似大部分都不太适合初学者。 我曾经是一名三流程序员,每天的工作内容就是在前人留下的 bug 上写新的bug,我…

Swift编程语言

The Swift Programming Language中文手册1.【精校版】The Swift Programming Language--欢迎使用Swift--关于Swift2.【精校版】The Swift Programming Language-欢迎使用Swift-Swift 初见3.The Swift Programming Language--语言指南--基础部分4.The Swift Programming Languag…

ondblog 修改informix日志模式

-N No Logging 没有日志-U Unbuffered Logging 非缓冲日志-B Buffered Logging 缓冲日志-A Unbuffered Logging, Mode ANSI ANSI模式No Logging 没有日志----“没有日志”模式只向逻辑日志写很少的信息,它只记录执行的DDL语句,这些语句影响到的行并…

iOS RunLoop详解

一、简介 CFRunLoopRef源码RunLoop是一个对象,这个对象在循环中用来处理程序运行过程中出现的各种事件(比如说触摸事件、UI刷新事件、定时器事件、Selector事件),从而保持程序的持续运行;而且在没有事件处理的时候&…

开源库jemalloc简介

jemalloc是通用的malloc(3)实现,它强调避免碎片和可扩展的并发支持。它的源码位于https://github.com/jemalloc/jemalloc,最新稳定版本为5.2.1。 glibc的内存分配算法是基于dlmalloc实现的ptmalloc;tcmalloc是Google开发的内存分配器&#x…

改善深度学习训练的trick总结 | CSDN博文精选

扫码参与CSDN“原力计划”作者 | ZesenChen来源 | CSDN博客精选在深度学习中,同样一个模型用不同的初始化,数据处理,batch size,学习率,优化器都能得到不同性能的参数。我根据自己参与过的比赛中经常用到的一些trick进…

jQuery中的Ajax----03

为什么80%的码农都做不了架构师?>>> $.ajax(0方式是jQuery最底层的Ajax实现。 它的结构为: $.ajax(options) 该方法只有1个参数,但在这个对象里包含了$.ajax()方法所需要的请求设置以及回调函数等信息。参数以key/value的形式存在&#xff0…

Docker容器中数据两种持久化存储方式:卷和挂载宿主目录

镜像使用的是分层存储,容器也是如此。每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为容器存储层。容器存储层的生存周期和容器一样,容器消亡时&a…

CFRunLoopRef 的内部逻辑(向 ibireme学习)

据苹果在文档里的说明,RunLoop 内部的逻辑大致如下:/// 用DefaultMode启动 void CFRunLoopRun(void) {CFRunLoopRunSpecific(CFRunLoopGetCurrent(), kCFRunLoopDefaultMode, 1.0e10, false); }/// 用指定的Mode启动,允许设置RunLoop超时时间 int CFRunL…

倒计时 3 天!「2019 嵌入式智能国际大会」全日程大公开!

立即抢购:https://t.csdnimg.cn/otBk还有3天,大伙期待的「2019嵌入式智能国际大会」正式开幕了!2019年12月6日-7日,我们在深圳市人才研修院见!大会以“万物互联泛在智能”为主题,邀请30位海内外顶级专家作为…

Fckeditor PHP/ASP File Upload Vul

目录 1. 漏洞描述 2. 漏洞触发条件 3. 漏洞影响范围 4. 漏洞代码分析 5. 防御方法 6. 攻防思考 1. 漏洞描述 FCKeditor是目前最优秀的可见即可得网页编辑器之一,它采用JavaScript编写。具备功能强大、配置容易、跨浏览器、支持多种编程语言、开源等特点。它非常流行…

iOS App上架流程(2016详细版),真心很详细。

一、前言:作为一名iOSer,把开发出来的App上传到App Store是必要的。下面就来详细讲解一下具体流程步骤。二、准备:一个已付费的开发者账号(账号类型分为个人(Individual)、公司(Company&#xf…

飞机的“黑色十分钟”能被人工智能消灭吗?

【导读】近年来,“AI的应用和落地”逐渐成了具化的关键词,它和很多事物很多行业结合在一起,形成了奇妙的“化学反应”。例如,在日常生活中,AI可以推送我们喜欢的新闻或视频,可以在拍照的时候识别场景提升照…

Jenkins简介及在Windows上的简单使用示例

Jenkins是一款开源CI(Continuous Integration,持续集成)&CD(Continuous Delivery,持续交付)软件,用于自动化各种任务,包括构建、测试和部署软件,源码在https://github.com/jenkinsci/jenkins ,License为…

IOS开发之数据sqlite使用

一、引入工具包引入工具包libsqlite3.dylib,该工具包为C语言工具包。 二、代码操作数据库1、创建并且链接数据库 - (void) _connectDB{//1>获取沙盒路径作为数据库创建时候的初始化路径NSString * pathNSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDom…