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

赠书 | 干货!用 Python 动手学强化学习

01

了解强化学习

新闻报道中很少将强化学 习与机器学习、深度学习、人工智能这些关键词区分开来,所以我们要先介绍什么是强化学习,再讲解其基本机制。

强化学习与机器学习、人工智能这些关键词之间的关系;

强化学习相对于其他机器学习方法的优点和弱点;

那么,下面就正式开始学习之旅吧。

1.强化学习与各关键词之间的关系

图 1-1 所示为与强化学习相关的关键词之间的关系。

图 1-1 各关键词之间的关系

首先,机器学习是实现人工智能的一种技术。不同的人对人工智能的定义有不同的理解,这里不进行深入说明。不过,对于“机器学习是实现人工智能的一种技术”这一点,人们意见一致。

顾名思义,机器学习是让“机器”进行“学习”的方法。这里的“机器”叫作模型,实际上是含有参数的数学式。对模型的参数进行调整,使之与给定的数据拟合的行为叫作“学习”(图 1-2)。

图 1-2 机器学习的机制

深度学习是机器学习中的一种模型。将神经网络模型叠加成多层模型(使之变深),就形成了深度神经网络(Deep Neural Network,DNN)。通过某些学习方法让 DNN 进行学习,就叫作深度学习。

对模型的参数进行调整,使之与数据拟合的学习方法一共有 3 种,分别是监督学习无监督学习强化学习

■ 监督学习

事先给定数据和答案(标签),然后对模型的参数进行调整,让输出(标签)与给定的数据一致。

■ 无监督学习

事先仅给定数据,然后对模型的参数进行调整,以提取数据的特征(结构或表征)。

■ 强化学习

事先给定一个可以根据行动得到奖励的环境(任务),然后对模型的参数进行调整,以便让不同状态下的行动与奖励联系起来

监督学习是最容易理解且使用最广泛的学习方法。这里我们以图像分类为例来介绍一下。首先准备一个数据集,在这个数据集中,每张图像都有对应的标签,用来表明这张图像是哪种动物(这称为监督数据)。然后,为了在输入图像后让模型输出正确的标签,对模型的参数进行调整。我们可以使用谷歌公开的 Teachable Machine 在浏览器上尝试进行图像分类。

这里介绍一下 Teachable Machine 的用法。用网络摄像头对着某样物体,并按下某种颜色的按钮,此时拍摄的这张照片就可以与所按下的按钮的颜色对应起来。这里的颜色就是标签。在图 1-3 中,我们设置“企鹅 = 绿色”,让模型进行学习。在图 1-4 中,我们设置“猫 = 紫色”,让模型进行学习。这样一来,当图像为企鹅时,模型输出绿色;当图像为猫时,模型输出紫色。这个例子说明,为了让模型能够根据输入的图像输出正确的标签,Teachable Machine 会调整内在的模型参数。

图 1-3 在 Teachable Machine 上让模型学习“企鹅 = 绿色”

图 1-4 在 Teachable Machine 上让模型学习“猫 = 紫色”

无监督学习不会事先给定标签。因为给定的只有数据,所以叫作“无监督”。由于没有标签,所以模型学习的是数据内部的结构(structure)和表征(representation)等。比如,在输入某个样本后,模型会根据该样本在全体数据中的位置调整参数,输出表示该数据的表征(向量)。

这里具体解释一下什么是“学习数据的结构”。一个相近的例子是生物学中分类框架的构建。人类归属于人属,并和黑猩猩、大猩猩一样归属于人科。这样的分类并不是从一开始就确定的,而是在对各种各样的动物进行观察的基础上,通过积累经验而总结出来的。也就是说,这个结构是仅根据数据推测出来的,这就是一种无监督学习。这种推测结构的无监督学习方法包括聚类等。

那么,什么是“学习数据的表征”呢?较为相近的例子是数据压缩。压缩后的数据之所以可以代表原来的数据,是因为压缩后的数据中包含了原数据的一些特征。自编码器(autoencoder)就是一种获取压缩表征的方法。

自编码器能够根据压缩后的向量(图 1-5 中的 Z)复原原始数据。负责压缩的是编码器(encoder),负责复原的是解码器(decoder)。图 1-5 展示的是将音频数据用编码器压缩,再用解码器复原的过程。编码器和解码器都是模型,都会对参数进行调整,调整的目的分别是压缩音频和把压缩后的向量复原为原始音频。

图 1-5 将音频数据用编码器压缩,再用解码器复原

(引自“MusicVAE:Creating a palette for musical scores with machine learning”)

自编码器的学习结束之后,可以从编码器中得到音频数据的压缩表征。使用压缩表征可以实现很多有趣的事情。比如,将多个音频数据用编码器压缩,然后混合,再用解码器复原,就可以得到全新的音频。借助 Beat Blender,我们可以听到 4 种打击乐混合的声音(图 1-6)。

图 1-6 Beat Blender

(引自 Beat Blender 网站)

图 1-6 中左侧正方形的 4 个角代表 4 种打击乐。移动正方形中白色的点可以改变合成率。将白点按轨迹移动,可以听到不同合成率下的声音。

近几年涌现出很多使用 DNN 来获取压缩表征的方法。当然,这也是因为 DNN 是一种擅长从数据中提取特征的模型。我们会在第 6 章介绍将压缩表征用于强化学习的方法。

强化学习与前面两种机器学习方法不同,它给定的是环境,而不是数据。我们可以把环境理解为到达某种状态即可获取奖励的空间,其中定义了“行动”以及与行动对应的“状态”的变化。简单来说,强化学习就像游戏一样。比如,在游戏中,按下按钮后角色会跳跃,那么“按下按钮”就相当于行动,“角色跳跃”就相当于状态的变化。到达终点之后,就可以获得“奖励”。

实际上,强化学习中使用的“环境”以游戏为主。本书使用的 OpenAI Gym 库就收集了很多用作强化学习环境的游戏(图 1-7)。在研究领域,Atari 2600 游戏机的游戏经常被用于测试强化学习模型的性能。

图 1-7 OpenAI Gym 中收集的 Atari 2600 中的游戏

(引自 Gym 网站)

强化学习需要对模型的参数进行调整,以便从环境中获取奖励。此时,模型是一个接收“状态”并输出“行动”的函数。借助 Metacar,我们可以在浏览器上体验强化学习模型的机制(图 1-8)。Metacar 在浏览器上准备了一个汽车行驶的环境,我们可以在这个环境中进行模型的学习。另外,还可以查看模型学习结果,也就是模型对哪种状态下的哪种行动的评价较高。

图 1-8 Metacar 中的模型识别到的状态及相应的行动评价

本节整理了与强化学习相关的关键词。强化学习是一种机器学习方法。机器学习方法包括监督学习、无监督学习和强化学习 3 种,我们通过示例分别介绍了它们的机制。下一节将介绍各机器学习方法和强化学习的不同。

2.强化学习的优点和弱点

强化学习在根据行动给予奖励(≈正确答案)这一点上和监督学习非常相似。二者的不同点在于,强化学习不是根据单次的立即奖励进行优化的,其优化的目的是使整体奖励最大化。假设 1 天能得到 1000 元,但如果等待 3 天,就能得到 10 000 元。在这种情况下,行动分为“等待”与“不等待”。因为监督学习评价的是单次的行动结果,所以会选择“不等待”,每天得到 1000 元就是最优的选择。而强化学习把从环境开始到结束的整个期间(这个例子中是 3 天)叫作一个回合(episode),它的目的是使这一个回合内的整体奖励最大化,所以在强化学习中,“等待 3 天,得到 10 000 元”才是最优的选择(第 3 章会详细介绍回合无限长的情况)。

也就是说,强化学习是根据能否让整体奖励最大化来评价行动的。至于如何进行评价,需要模型自己去学习。总结一下,强化学习的模型需要学习两项内容,分别是行动的评价方法和基于评价方法对行动进行选择的方法(策略)。

能对行动的评价方法进行学习是强化学习的一个优点。比如,对于围棋和象棋这样复杂的游戏,我们很难评价现在这一步下得有多好。但是,强化学习可以自己去学习评价方法。因此,对于人类通过感官和直觉来判断的过程,强化学习也是可以学习的。

但是,这也意味着行动的评价方法完全交给了模型。因为我们没有提 供“标签”这样的正确答案,模型进行什么样的判断完全基于模型自己。这个弱点和无监督学习的弱点是一致的。因此,强化学习有可能学习到违反人类直觉的评价方法,并采取违反人类直觉的行动。针对这个问题,我们将在第 5 章详细介绍。

在能使用监督学习的情况下,最好优先使用监督学习。这是因为,监督学习给定了标签,所以模型的举动是可控的。单纯增加数据,就能提高 精度——这种非常简单的可扩展性是监督学习的优点。虽然强化学习和无监督学习也有各自的优点,但是这些模型的举动在一定程度上不如监督学 习模型方便预测,而且在想要提升模型的效果时,也不是简单增加数据就 可以的。因此,在实际工作中,它们并不像监督学习那么受欢迎。针对强化学习的弱点,第 6 章将介绍克服的方法。第 7 章将介绍如何将强化学习 应用于实际工作中。

本节介绍了强化学习的特点。强化学习与监督学习不同,不关注单次行动带来的立即奖励,而是关注连续的行动能够获得的整体奖励。要想使 整体奖励最大化,就需要学习行动的评价方法和行动的选择方法(策略)。对于那些难以对行动进行评价的游戏和任务,通过学习行动的评价方法, 就可以攻略游戏和解决任务。此外,我们还介绍了强化学习无法对学习到 的行动进行控制的弱点。

文章节选《用Python动手学强化学习》

作者:[日]久保隆宏

译者:梁垿 程引

赠书福利

你对深度学习感兴趣吗?

欢迎与我们分享

AI科技大本营将选出优质留言

携手【图灵出版社】送出

《用Python动手学强化学习》一本

截止 2021 年 7 月 27 日 14:00

更多精彩推荐
大手笔 !Julia Computing 获 2400 万美元融资,前 Snowflake CEO 加入董事会芯片开发语言:Verilog 在左,Chisel 在右深度学习实现场景字符识别模型|代码干货

相关文章:

php如何调用c接口无错版

1.首先是要安装好PHP 2.进入PHP的下载解压目录下的ext目录 #cd /root/php-5.3.6/ext #./ext_skel --extnamehmc 说明: ./ext_skel --extnamemodule_name module_name是你自己可以选择的扩展模块的名字,例如我选择的hmc。执行工具后会自动在ext目录下建…

onchange事件只生效一次的问题

今天遇到一个file表单元素,对onchange事件的响应问题,发现仅响应一次,网上查到解决方法,在这里转载一下文件选择框的onchange事件只在第一次改变时生效,以后再选择文件不会触发onchange事件。解决方法1:用j…

WSFC2016 SMB多通道与网络调校

SMB多通道是微软Windows Server 2012时新增的一项功能,微软SMB3.0协议的一部分,主要用于SMB文件传输时,检测到多张可通信网卡,自动使用多张网卡进行传输,提高吞吐量,链路容错。 Windows Server 2012和之前的…

一个常用的正则表达验证类

这是 風語深蓝很早以前写的一个正则表达式验证工具类,包含了一些常见的校验和支持自定义的正则表达式匹配,可以选择完全匹配,也可以获取所有匹配项。曾用它仿造Eclispe下的正则表达式插件写过一个工具。因为最近突然有几个朋友都在问这方面的…

Signal和slot的声明和连接

信号(SIGNAL)和槽(SLOT)是Qt编程的一个重要部分。这个机制可以在对象之间彼此并不了解的情况下将它们的行为联系起来。Signal和slot的声明(一)在Qt程序设计中,凡是包含signal和slot的类中都要加上Q_OBJECT的定义,下面的例子给出了…

重磅!深度学习知识总结和调参技巧开放下载了

近年来,人工智能正在进入一个蓬勃发展的新时期,这主要得益于深度学习和CV领域近年来的发展和成就。在这其中,卷积神经网络的成功也带动了更多学术和商业应用的发展和进步。为了避免“内卷”,更多人选择学习进阶,但是仍…

Oracle优化器:星型转换

Oracle 8i中引入了星型转换(star transformation)的优化器新特性以便更有效地处理星型查询。星型查询语句多用于基于星型模型设计的数据仓库应用中。星型模型的称谓源于该种模型以图形化表现时看起来形似一颗海星。这颗星的中央会由一个或多个事实表(fact tables)组成&#xff…

php安装模式mod_php和Fastcgi的选择与对比

安装php又面临到了模式的选择,以前都是选择mod_php模式,因为这样安装比较方便哈,今天突然关心起FastCGI这种模式,败毒了一把,找到了一些关于mod_php和Fastcgi的选择与对比这方面的讨论,现在发出来留一个记号…

暴雨之后,评估与重建可以用这个数据集

作者:神经星星来源:HyperAI超神经场景描述:连续多日的暴雨给郑州和河南部分城市,带来了严重的洪涝灾害,牵动了全国人民的心。灾难面前,现阶段的科技和具体解决方案,也能发挥出关键作用。关键词&…

从jQuery的缓存到事件监听

很久以前&#xff0c;我还在cnblogs里面逛的时候就提出过一个问题&#xff08;刚找了半天没找到&#xff09;。不知道大家有没有发现&#xff0c;用jQuery选择器"选择"之后的DOM上会添加jQuery*********属性。 <DIV idd1 jQuery1294122065250"1">abc…

对一些品种数量校正

update sphwph set shl1-1 where spidSPH00002323 and piciJHAYMA00017433_5 and hwHWI00000022 update sphwph set shl-11 where spidSPH00002323 and piciJHAYMA00021159_2 and hwHWI00000022 3月7日调拨后少了398 update sphwph set shl0398 where piciJHAYMA00024241_1 an…

收藏喜+1!值得使用的100个Python小技巧

目前Python可以说是非常流行&#xff0c;在目前的编程语言中&#xff0c;Python的抽象程度是最高的&#xff0c;是最接近自然语言的&#xff0c;很容易上手。你可以用它来完成很多任务&#xff0c;比如数据科学、机器学习、Web开发、脚本编写、自动化等。下面&#xff0c;给大家…

一款基jquery超炫的动画导航菜单

今天给大家分享一款基jquery超炫的动画导航菜单。这款导航菜单&#xff0c;初始时页面中间一个按钮&#xff0c;单击按钮&#xff0c;菜单从左侧飞入页中。再次单击按钮&#xff0c;导航飞入左侧消息。动画效果很非常炫。一起看下效果图&#xff1a; 在线预览 源码下载 实现的…

如何用C#动态编译、执行代码

在开始之前&#xff0c;先熟悉几个类及部分属性、方法&#xff1a;CSharpCodeProvider、ICodeCompiler、CompilerParameters、CompilerResults、Assembly。  一、CSharpCodeProvider    提供对C#代码生成器和代码编译器的实例的访问。如果要动态生成VB代码&#xff0c;可…

【解决】MySql 5.6 运行崩溃错误

【解决】MySql 5.6 运行崩溃错误 最近弄了一台云主机&#xff0c;配置是20G磁盘空间&#xff0c;1G运行内存的Linux服务器。在上面安装了LAMP&#xff08;RHEL7.2Apache2.4MySql5.6PHP5.6&#xff09;&#xff0c;然后搭建wordpress网站&#xff0c;可是网站运行没多久&#xf…

制作安全网站的checklist

原作者charlee、原始链接 http://tech.idv2.com/2008/04/19/secure-website-checklist/ fcicq最近在IPA上看到一篇安全相关的文章&#xff0c;它的最末尾有个checklist&#xff0c;于是催我把它翻译了。前几天比较忙&#xff0c;周末没什么事儿了&#xff0c;就翻译一下吧。 原…

百变冰冰!手把手教你实现CVPR2021最新妆容迁移算法

作者&#xff1a;小潘师兄来源&#xff1a;AI算法与图像处理简介在本文中&#xff0c;我们从不同的角度将妆容迁移问题分解为两步提取-分配过程。为此&#xff0c;我们提出了一种基于风格的可控GAN模型&#xff0c;该模型由三个部分组成&#xff0c;每个部分分别对应于目标风格…

Vlan 4096的限制原因

为什么80%的码农都做不了架构师&#xff1f;>>> VLAN配置的最大可能值为4094&#xff0c;它的由来如下所述&#xff1a; IEEE802.1q协议也就是“Virtual Bridged Local Area Networks”&#xff08;虚拟桥接局域网&#xff0c;简称虚拟局域网&#xff09;协议&#…

Hive 数据模型

Hive 数据模型 Hive 数据表有五种类型&#xff1a;内部表&#xff0c;外部表&#xff0c;分区表&#xff0c;桶表&#xff0c;视图表&#xff0c;默认以 tab 分隔 * MySQL (Oracle) 表默认以逗号分隔&#xff0c;因此&#xff0c;要想导入 MySQL(Oracle) 数据&#xff0c;需要设…

完整中英文世界国家级联下拉列表插件【前端版】

为什么80%的码农都做不了架构师&#xff1f;>>> 这个小东西是之前小项目上临时增加功能的产物&#xff0c;那时候在网上找了很久都没有能用的插件&#xff0c;要么是数据残缺少得可怜&#xff0c;还有就是实现手段非常低效不可维护那种&#xff0c;各种奇拔问题&am…

何时使用margin和padding?

margin和padding的意义相信大家都很清楚&#xff0c;可是在具体应用中&#xff0c;到底应该使用哪一个&#xff0c;就比较难于判断了。 这篇文章 说得挺清楚的&#xff0c;在这里翻译一下&#xff0c;供参考。 何时应当使用margin 需要在border外侧添加空白时。 空白处不需要…

10年IT老兵给新人程序员的几点建议

【CSDN 编者按】对于很多计算机专业的同学而言&#xff0c;“进大厂”已经成为毕业后职业道路的首选。但是面试官最喜欢什么样的应届生你知道吗&#xff1f;在校期间应该为找工作做哪些准备&#xff1f;除了技术好&#xff0c;在职场中还有哪些必备软实力&#xff1f;今天&…

asp.net文件上传下载的简单实现

使用FileUpload上传&#xff1a; protected void btnUpload_Click(object sender, EventArgs e) { if (FileUpload1.HasFile) { /*通过文件扩展名判断文件类型*/ string fileExt System.IO.Path.Ge…

JAVA数组的定义及用法

数组是有序数据的集合&#xff0c;数组中的每一个元素具有同样的数组名和下标来唯一地确定数组中的元素。 1. 一维数组 1.1 一维数组的定义 type arrayName[]; type[] arrayName; 当中类型(type)能够为Java中随意的数据类型&#xff0c;包含简单类型组合类型&#xff0c;数组名…

英特尔公布新技术路线图,将为 AWS、高通代工芯片

编译|刘春霖出品|AI科技大本营(ID:rgznai100)图源|IC photo今天英特尔宣布其旗下的工厂将开始制造高通芯片&#xff0c;并公布了公司有史以来最详细的制程工艺和封装技术路线图&#xff0c;希望在 2025 年前赶上台积电、三星电子。除了公布其近十多年来首个全新晶体管架构 Ribb…

epoll相关资料整理

http://www.cppblog.com/converse/archive/2008/10/13/63928.htmlepoll相关资料整理 学习epoll有一段时间了,最近终于有一个服务器采用了epoll模型,从中积累了一些epoll的资料.个人感觉目前可以找到的epoll相关的资料太少了,因为epoll仅被linux 2.6以上版本内核所支持,它的应用…

18.绝对路径和相对路径

什么是绝对路径&#xff08;Absolute Pathname&#xff09;&#xff1f; 1.绝对路径必定由“/”开头 2.绝对路径是为档案/文件的所在位置做指向 3.在任何时候&#xff0c;都可以用绝对路径来找到我们想要的文件 PS&#xff1a;绝对路径只对当前所在目录有效。 什么是相对路径&a…

IE的box模型显示bug

原作者charlee、原始链接http://tech.idv2.com/2007/01/02/ie-box-model-bug/以及本声明。 box模型即由<div>等块元素的 margin、padding、border、width、height 等属性构成的显示模型&#xff0c;它是CSS布局的基础。通过设置<div>的各种属性&#xff0c;可以得到…

AI 能匹敌程序员了吗?OpenAI 新研究展​示 NLP 大模型的局限性

作者&#xff1a;Ben Dickson来源&#xff1a;数据实战派Codex在一篇新论文中&#xff0c;OpenAI 的研究人员展示了 Codex 的详细信息&#xff0c;它是一种生成软件源代码的深度学习模型。Codex 可以为 OpenAI 和 GitHub 联合开发的 “AI 配对程序员” 工具 Copilot 提供支持。…

MSLicensing​中断远程桌面连接

---------------------------中断远程桌面连接---------------------------客户端无法建立跟远程计算机的连接。导致这个错误的可能的原因是:1) 远程计算机上的远程连接可能没有启用。2) 已超出远程计算机上的连接最大数。3) 建立连接时出现了一个网络错误。------------------…