淘优惠

淘优惠

神经网络算法通俗理解 人工智能基于神经网络的优化计算

热门文章 0

淘宝搜:【天降红包222】领超级红包,京东搜:【天降红包222】
淘宝互助,淘宝双11微信互助群关注公众号 【淘姐妹】

神经网络算法三大类,神经网络算法的基本原理,神经网络算法有哪些,神经网络算法是什么意思

AI选自OpenAI

作者:JAKOB FOERSTER

机器之心编译

使用线性网络进行非线性计算是一种特立独行的思路,近日,OpenAI 发布了一篇博客,介绍了该机构在深度线性网络上的新研究,该方法没有使用激活函数,仍在 MNIST 上实现了 99% 的训练准确率和 96.7% 的测试准确率,新的研究再次点燃了人们的讨论热潮。让我们看看他们是如何做到的。

我们展示了深度线性网络(使用浮点运算实现)实际上并不是线性的,它可以执行非线性计算。我们利用这一点使用进化策略在线性网络中寻找参数,使我们能够解决重要问题。

神经网络通常由一个线性层和非线性函数(比如 tanh 和修正线性单元 ReLU)堆栈而成。如果没有非线性,理论上一连串的线性层和单一的线性层在数学上是等价的。因此浮点运算是非线性的,并足以训练深度网络。这很令人惊讶。

背景

计算机使用的数字并不是完美的数学对象,而是使用有限个比特的近似表示。浮点数通常被计算机用于表示数学对象。每一个浮点数由小数和指数的组合构成。在 IEEE 的 float32 标准中,小数分配了 23 个比特,指数分配了 8 个比特,还有一个比特是表示正负的符号位 sign。

按照这种惯例和二进制格式,以二进制表示的最小非零正常数是 1.0..0 x 2^-126,以下用 min 来指代。而下一个可表示的数是 1.0..01 x 2^-126,可以写作 min+0.0..01 x 2^-126。很显然,第一和第二个数之间的 gap 比 0 和 min 之间的 gap 小了 2^20 倍。在 float32 标准中,当一个数比最小的可表示数还小的时候,则该数字将被映射为零。因此,近邻零的所有包含浮点数的计算都将是非线性的。(而反常数是例外,它们在一些计算硬件上可能不可用。在我们的案例中通过设置归零(flush to zero,FTZ)解决这个问题,即将所有的反常数当成零。)

因此,虽然通常情况下,所有的数字和其浮点数表示之间的区别很小,但是在零附近会出现很大的 gap,而这个近似误差可能带来很大影响。

这会导致一些奇怪的影响,一些常用的数学规则无法发挥作用。比如,(a + b) x c 不等于 a x c + b x c。

比如,如果你设置 a=0.4 x min,b=0.5 x min,c=1 / min。

  • 则:(a+b) x c=(0.4 x min + 0.5 x min) x 1 / min=(0 + 0) x 1 / min=0。
  • 然而:(a x c) + (b x c)=0.4 x min / min + 0.5 x min x 1 / min=0.9。

再比如,我们可以设置 a=2.5 x min,b=-1.6 x min,c=1 x min。

  • 则:(a+b) + c=(0) + 1 x min=min
  • 然而:(b+c) + a=(0 x min) + 2.5 x min=2.5 x min。

在这种小尺度的情况下,基础的加法运算变成非线性的了!

使用进化策略利用非线性

我们想知道这种内在非线性是否可以作为计算非线性的方法,如果可以,则深度线性网络能够执行非线性运算。挑战在于现代微分库在非线性尺度较小时会忽略它们。因此,使用反向传播利用非线性训练神经网络很困难或不可能。

我们可以使用进化策略(ES),无需依赖符号微分(symbolic differentiation)法就可以评估梯度。使用进化策略,我们可以将 float32 的零点邻域(near-zero)行为作为计算非线性的方法。深度线性网络通过反向传播在 MNIST 数据集上训练时,可获取 94% 的训练准确率和 92% 的测试准确率(机器之心使用三层全连接网络可获得 98.51% 的测试准确率)。相对而言,相同的线性网络使用进化策略训练可获取大于 99% 的训练准确率、96.7% 的测试准确率,确保激活值足够小而分布在 float32 的非线性区间内。训练性能的提升原因在于在 float32 表征中使用非线性的进化策略。这些强大的非线性允许任意层生成新的特征,这些特征是低级别特征的非线性组合。以下是网络结构:

在上面的代码中,我们可以看出该网络一共 4 层,第一层为 784(28*28)个输入神经元,这个数量必须和 MNIST 数据集中单张图片所包含像素点数相同。第二层与第三层都为隐藏层且每层有 512 个神经元,最后一层为输出的 10 个分类类别。其中每两层之间的全连接权重为服从正态分布的随机初始化值。nr_params 为加和所有参数的累乘。下面定义一个 get_logist() 函数,该函数的输入变量 par 应该可以是上面定义的 nr_params,因为定义添加偏置项的索引为 1、3、5,这个正好和前面定义的 nr_params 相符,但 OpenAI并没有给出该函数的调用过程。该函数第一个表达式计算第一层和第二层之间的前向传播结果,即计算输入 x 与 w1 之间的乘积再加上缩放后的偏置项(前面 b1、b2、b3 都定义为零向量)。后面两步的计算也基本相似,最后返回的 o 应该是图片识别的类别。不过 OpenAI 只给出了网络架构,而并没有给出优化方法和损失函数等内容。

除了 MNIST 验证以外,OpenAI 认为其他实验可以将这一工作扩展到循环神经网络中,或利用非线性计算来提升复杂机器学习任务中的表现,如语言建模和翻译。OpenAI 表示将在未来继续推进这一方向。

原文地址:https://blog.openai.com/nonlinear-computation-in-linear-networks/

本文为机器之心编译,转载请联系本公众号获得授权。


私人定制AI绘画——快速finetune stable diffusion教程

私人订制绘画,ai私人订制,私人定制图案,私人订制字画

网页布局过程: 1:准备好相关的网页元素,也就是大大小小的盒子2:利用CSS设置好盒子样式,将对不同的盒子摆放到对应的位置3:将内容填充到对应的盒子中盒子模型: 将html页面中的布局元素看作是一…...

编程日记 2023/2/7 6:09:10

3月26日|清华大学建筑节能学术周――公共建筑节能―工程实践助力实现双碳目标 【3月26日公开论坛】公共建筑节能 C 工程实践助力实现双碳目标 面向碳中和的公共建筑室内环境营造再认识 对“舒适”、“健康”和室内环境营造手段的再认识 1.对“舒适”的再认识 P…...

编程日记 2023/2/2 4:45:15

目录 一、远程登录 1.1 SSH登录方式 二、Xshell远程连接 2.1 远程连接 2.2 设置粘贴复制 三、Xftp远程连接 3.1 远程连接 3.2 解决乱码 3.3 传输文件 一、远程登录 通常在工作过程中,公司中使用的真实服务器或者是云服务器,都不允许除运维人员 之…...

编程日记 2023/2/7 22:00:33

阅读本文大概需要 1.86 分钟。最近看到一个消息,说是 2023 年全国硕士研究生招生考试将于 本月 24 日至 26 日举行,多地也陆续公布 2023 年考研的报考人数。从公布的报名数据来看,考研热度仍然不减。比如陕西省 2023 年考研报名人数为 17 万 …...

编程日记 2022/12/6 21:55:54

当前车辆日益复杂,车联网功能在各个细分领域都在不断增加,而更强大的智能功能也逐步增加。 所有这些高级功能都依赖于线束和控制器才能发挥作用。然而面对日益增加的车辆复杂性和产品开发周期缩短的压力,导致汽车制造商和系统集成商的成本和…...

编程日记 2023/2/4 18:06:47

Cassandra介绍 Cassandra是一个开源的、分布式、无中心节点、弹性可扩展、高可用、容错、一致性协调、面向列的NoSQL数据库。 Cassandra的主要组成部分主要有: ? 节点(Node):Cassandra节点是存储数据的地方。 ? 数据中心(Data center):数据中心是相关节点的集合。 ? 集群…...

编程日记 2023/2/3 1:39:25

文章目录零、本讲学习目标一、导入新课二、新课讲解(一)数据存储(二)共享参数1、共享参数概述2、利用共享参数读写文件步骤(三)案例演示:多窗口共享数据1、创建安卓应用2、准备图片素材3、主界面…...

编程日记 2023/2/9 15:10:31

前言 该项目写完也有一段时间了,为了避免以后忘记该项目的一些实现的原理,所以写下这篇博客来记录一下该项目的设计等 项目整体 MuziDB分为前端与后端,前后端交互通过socket进行交互,前端的作用就是读取用户输入并发送到后端进…...

编程日记 2023/2/7 21:33:29

很多初学者都听说python很火,可是为啥要学Python,下面谈谈我的感悟 python语言是我目前为止用的最爽的语言,因为它真的很优美.虽然c,c,java也非常的强大和伟大,但是每一种语言伟大的背后都是有一定的时代背景。 说起Python这门编…...

编程日记 2022/12/6 21:30:41

使用OpenCV标注图像用颜色线标注图像绘制圆绘制实心圆绘制矩阵绘制椭圆绘制带轮廓和填充半椭圆使用文本注释图像为图像和视频添加标注的目的不止一个,包含:向视频中添加信息在对象检测的情况下,在对象周围绘制边界框,用不同颜色的…...

编程日记 2023/2/7 0:59:12

一. 前言 在开发REST API接口时,视图中做的最主要有三件事: 将请求的数据(如JSON格式)转换为模型类对象操作数据库将模型类对象转换为响应的数据(如JSON格式) 序列化: 将程序中的一个数据结…...

编程日记 2023/2/6 17:10:33

本篇是硬件SPI口驱动74HC595。 IO口模拟时序软件驱动74HC595见这一篇文章:嵌入式开发CIO口扩展C74HC595 硬件连接如下: 只用了一个74HC595,如果需要多个74HC595级联,参考前面的链接,里面有电路,不需要额…...

编程日记 2023/2/3 15:23:45

作者:小刘在C站 每天分享云计算网络运维课堂笔记,疫情之下,你我素未谋面,但你一定要平平安安,一 起努力,共赴美好人生! 夕阳下,是最美的,绽放,愿…...

编程日记 2023/2/8 1:25:40

文章目录1. Animation1.1 创建Animation1.2 Animation 属性2. Animator2.1 Animator 组件2.2 Animation 状态2.3 状态控制参数2.4 代码中控制状态3. 代码控制动画的播放/暂停/继续播放1. Animation 1.1 创建Animation 选中需要添加动画的物体,打开Animation面板 …...

编程日记 2023/2/9 13:53:44

Transwarp ArgoDB是星环科技自主研发的高性能分布式分析型数据库,在PB级数据量上提供极致的数据分析能力。ArgoDB支持标准SQL语法和分布式事务,提供高并发高速数据写入、复杂查询、多模分析、数据联邦、隐私计算和动态脱敏等能力。基于星环科技ArgoDB数据…...

编程日记 2023/2/1 17:11:45

前言 本文章是用于总结尚硅谷MySQL教学视频的记录文章,主要用于复习,非商用 原视频连接:https://www.bilibili.com/video/BV1iq4y1u7vj/?p21&spm_id_frompageDriver&vd_sourcec4ecde834521bad789baa9ee29af1f6c https://www.bilib…...

编程日记 2022/12/6 20:54:56

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…...

编程日记 2023/2/2 21:39:22

Alex_McAvoy--------NVIDIA 7th SkyHackathon(二)开发套件的安装与测试 Alex_McAvoy--------NVIDIA 7th SkyHackathon(三)语音数据集的制作 Alex_McAvoy--------NVIDIA 7th SkyHackathon(四)Nemo ASR 模型训…...

编程日记 2022/12/6 20:44:50

经典回答 一个工作过几年的程序员肯定会有工作中遇到技术难点问题,虽然这个问题有可能对于别人不是技术难点,但只要对于当时的你是技术难点,只要让你抓耳挠腮毫无头绪就往往会在你的大脑中留下深刻的印象。 这个问题,我也比较难…...

编程日记 2023/2/7 9:11:14

JDK各个版本特性讲解-JDK9特性 lecture:波哥 一、JDK版本特性 JAVA8 及之前,版本都是特性驱动的版本更新,就是有重大的特性产生,然后进行更新 JAVA9开始,JDK开始以时间为驱动进行更新,以半年为周期,到时即更新,三年出一个长期支持版,其他都是短暂的版本 目前的长期支…...

编程日记 2023/2/9 11:40:51

努力是为了不平庸~ 学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。 足球(Football[英]、 Soccer[美])是一项以脚为主,控制和支配球,两支球队按照一定规则在同一块长方形…...

编程日记 2023/2/6 1:40:49

Qt-FFmpeg开发-打开本地摄像头【软解码 OpenGL显示YUV】 文章目录Qt-FFmpeg开发-打开本地摄像头【软解码 OpenGL显示YUV】1、概述2、实现效果3、FFmpeg打开摄像头解码流程4、查询可用摄像头5、设置摄像头打开参数6、主要代码6.1 解码代码5.2 OpenGL显示RGB图像代码7、完整源代码…...

编程日记 2023/2/6 13:40:13

内容一览:TVM 共有三种安装方法:从源码安装、使用 Docker 镜像安装和 NNPACK Contrib 安装。本文讲解如何通过 Docker 镜像 和 NNPACK Contrib 安装。 关键词:TVM Docker 基础教程 本文首发于微信公众号:HyperAI超神经 欢迎…...

编程日记 2023/2/8 15:31:03

?个人博客:https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 📣专栏定位:为学习吴恩达机器学习视频的同学提供的随堂笔记。 📚专栏简介:在这个专栏,我将整理吴恩达机器学习视频的所有内容的笔记&…...

编程日记 2023/2/8 4:09:15

2.1 学生管理系统实现步骤 案例需求 针对目前我们的所学内容,完成一个综合案例:学生管理系统!该系统主要功能如下: 添加学生:通过键盘录入学生信息,添加到集合中 删除学生:通过键盘录入要删…...

编程日记 2023/2/3 1:36:30

背景 安卓11改变了此前安卓系统对于文件管理的规则,在安卓11上,文件读写变成了特殊权限。应用默认只能读写自己的目录/android/data/包名 gradle配置 Android11系统对应用写入权限做了严格的限制。本文介绍如何获取文件读写权限。 项目中 build.gradle 的targetSdkVersion …...

编程日记 2023/2/9 9:17:02

👨?🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…...

编程日记 2023/2/3 1:36:52

1.CSRF漏洞原理 CSRF(Cro


第一章 强化学习及OpenAI Gym介绍-强化学习理论学习与代码实现(强化学习导论第二版)


本章内容将介绍强化学习的基本概念、工作原理和监督、非监督学习的不同,并说明如何使用开发和比较强化学习算法的工具Gym。

当我们思考学习的本质时,我们首先想到的是通过与环境交互来学习。当婴儿玩耍,挥舞手臂或四处张望时,他没有明确的老师,但他可以通过直接的感觉运动与环境联系。他可以通过这种联系获得大量关于因果关系,行为结果结果,以及如何实现目标的信息。在我们的生活中,这样的互动无疑是对环境和我们自己的主要知识来源。无论我们是学开车还是交谈,我们都可以敏锐地意识到我们的环境对我们所做的事情将作出什么样的反应,并且我们试图通过我们的行为来影响所发生的事情。从交互中学习是几乎所有学习和智能理论的基本思想。

在这里,我们探索了一种从交互中学习的计算方法。我们不直接对人或动物如何学习进行理论分析,而是探索理想化的学习情境,评估各种学习方法的效率。也就是说,我们采用人工智能研究人员或工程师的角度。我们去探索设计在科学或经济学领域可以有效解决学习问题,并通过数据分析和计算实验来评估这些设计。我们将这种方法称为强化学习,其与其他机器学习方法相比,更侧重于目标导向的交互学习。

强化学习就是学习怎么做,即如何建立情境-动作映射,以最大化数值奖励信号。学习器并没有被告知采取什么动作,而是通过不断尝试去发现能最大奖励的动作。在最有趣和最具挑战性的情况中,动作不仅影响瞬时报酬,还会影响下一场景,并由此影响后续的奖励。试错搜素和延迟奖励是强化学习最重要的两个特征。

强化学习与监督学习不同,后者是目前机器学习领域研究较多的一种学习方式。监督学习是从由专家提供的一组带标签的训练集中学习的。每个示例都是对一个情境和说明即标签的描述,该标签就是系统在该情境应该采取的正确动作,通常用于标识该情境所属的类别。这类学习的目的是让系统推断或概括它的响应,以便在未知训练集上也能正确工作。这是一种重要的学习,但仅凭这一点不足以从交互中学习。在交互问题中,代理需要在所有情境中采取正确的典型的可选动作,而获取这样的例子通常是不切实际的。在一个未知的领域,若要使学习收益最大化,代理必须能够从自己的经验中学习。

强化学习也不同于机器学习研究人员所说的无监督学习,后者通常是发现隐藏在未标记数据集合中的结构。监督学习和非监督学习这两个术语似乎囊括了机器学习的范式,但它们并没有。尽管人们可能会倾向于认为强化学习是一种无监督学习,因为它不依赖于正确行为的例子,但强化学习试图最大化奖励信号,而不是试图寻找隐藏的结构。在一个代理的经验中发现结构对于强化学习当然是有用的,但它本身并不能解决最大化奖励信号的强化学习问题。因此,我们认为强化学习是第三种机器学习范式,与监督学习、非监督学习以及其他范式并列,如图1所示。

图1 机器学习分支

平衡探索与开发是强化学习中其他学习算法所不具备的挑战之一。为了获得更过的收益,强化学习代理必须倾向于过去已经尝试过并且能够有效获益的动作,但是要发现这样的动作,它又必须去尝试以前没有选择的动作。代理必须充分利用它既有经验以获得收益,但它也必须探索,以便在未来做出更好的工作选择。进退两难的是,要保证任务不失败,不能单一地只探索或利用。代理必须尝试各种各样的动作,并逐步偏向选择那些看起来最好的行动。在随机任务中,每个动作都必须尝试多次,才能获得对期望回报的可靠估计。探索利用困境是数学家们几十年来研究的热点问题,至今仍未解决。现在,我们只是注意到,在有监督和无监督的学习中,甚至不存在探索和开发之间平衡的整个问题,至少在这些范式最纯粹的形式中是这样。

强化学习的另一个关键特征是,它明确地考虑了目标导向的代理与不确定环境交互的整个问题。这与许多只考虑子问题而不考虑子问题如何融入全局的方法相反。例如,我们已经提到,许多机器学习研究关注监督学习,但没有明确说明这种能力最终将如何发挥作用。其他研究人员已经提出了具有一般性目标的规划理论,但没有考虑规划在实时决策中的作用,也没有考虑规划所需的预测模型从何而来。虽然这些方法已经产生了许多有用的结果,它们一个重要的限制在于过于关注子问题。

? 直升机特技飞行;

? 在西洋双陆棋比赛中击败世界冠军;

? 管理投资组合;

? 控制发电站;

? 让一个人形机器人走路;

? 很多不同的雅达利游戏中玩得比人类更好。

除了代理和环境,强化学习系统一般有四个主要元素:策略,奖励信号,值函数,和一个可选的环境模型。

策略定义了学习代理在给定时间内的行为方式。粗略地说,策略是将环境中感知的状态映射为在这些状态下采取的行动。它对应于心理学中所谓的一系列刺激反应规则或关联。在某些情况下,策略可能是一个简单的函数或查找表,而在其他情况下,它可能涉及到大量的计算,如搜索过程。该策略是强化学习代理的核心,因为它本身就足以确定行为。一般来说,策略可能是随机的,指定了采取每个动作的概率。

奖励信号定义了强化学习问题的目标。在每一个时间步,环境发给代理的单一数字称为奖励。代理的唯一目标是最大化其长期获得的总奖励。因此,奖励信号定义了对代理而言的好坏事件。在生物系统中,我们可能认为奖励是类似于快乐或痛苦的经历。它们是代理所面临问题的直接精确的特征。奖励信号是改变策略的主要依据;如果策略选择的动作之后是得到了低回报,那么策略可能会被改变,以便在未来的情况下选择其他动作。总之,奖励信号可能是环境状态和所采取的行动的随机函数。

虽然奖励信号表明什么是直接意义上的好东西,但价值函数指明了长期内什么是好的。粗略地说,一个状态的价值是从该状态开始在未来可以预期累积的总奖励。鉴于奖励体现了环境状态的直接价值,价值则考虑了后续状态及奖励,从而反映了状态长期价值。例如,一个状态的瞬时奖励可能很低,但因为其后续状态具有高额奖励,因而也具有很高的价值,反之亦然。以人类作类比,奖励有点像快乐(如果是高的)和痛苦(如果是低的),而价值则对应于特定状态下一种更为精确和远见的对于满意与不满意的判断。

从某种意义上说,奖励是主要的,而价值作为奖励的预测是次要的。没有奖励就没有价值,估计价值的唯一目的是获得更多的奖励。然而,在制定和评估决策时,我们最关心的是价值。行动选择是基于价值判断的。我们寻求带来最高价值的动作,而不是最高奖励的,因为这些行动从长远来看对我们的回报最大。不幸的是,确定价值要比确定奖励难得多。奖励基本上是由环境直接给予的,但是价值必须通过一个代理在其整个生命周期中进行的一系列观察来评估和重新评估。事实上,我们所考虑的几乎所有强化学习算法中最重要的组成部分是一种有效估计值的方法。价值评估的中心作用可以说是我们在过去60年中学习强化学习的最重要的东西。

一些强化学习系统具有第四个也是最后一个要素,既环境模型。这是对环境的模拟,或者说,它对环境的行为做出推断。例如,给定一个状态和动作,该模型可以预测生成的下一个状态和下一个奖励。模型用于规划,规划指的是在实际经历之前考虑未来可能发生的情况来决定行动路线的任何方式。使用模型和规划解决强化学习问题的方法被称为基于模型的方法。更简单的无模型方法正好相反,它通过试错学习。

强化学习是一种理解和自动进行目标导向学习和决策的计算方法。它与其他计算方法不同之处在于它强调了代理通过与环境的直接交互进行学习,而不依赖于监督或完整的环境模型。在我们看来,第一个认真处理从与环境的交互中学习以实现长期目标中出现的计算问题的领域就是强化学习。

强化学习使用马尔可夫决策过程的正式框架来定义学习代理与其环境之间的交互作用,包括状态、动作和奖励。这个框架用简单的方法来表示人工智能问题的基本特征。这些特征包括因果性、不确定性和不确定性,以及目标的存在性。

奖励和价值函数的概念是大多数强化学习方法的主要特征。我们认为,在策略空间中,价值函数对于有效搜索是非常重要的。价值函数的使用区分了强化学习方法和根据整个策略的评估直接在策略空间中搜索的进化方法。

Gym是一个开发和比较强化学习算法的工具包。它对代理的结构没有任何假设,并且兼容于任何数值计算库(如TensorFlow或Theano)。

Gym库中包含许多可以用于制定强化学习算法的测试问题(即环境),这些环境有共享接口,允许编写通用的算法。

首先,需要安装Python 3.5+,只需使用pip安装gym:

这里需要更新pip至19.2.2版本,直接用以下命令即可:

图2 更新pip
图3 安装gym

安装成功后可查看安装路径(D:\Python35\Lib\site-packages)。

图4 安装路径

如果喜欢的话,也可以直接克隆gym git库,当需要更改gym或者添加新的环境时这非常有用。用以下进行下载和安装:

为了安装整个环境集,需要先安装部分系统包。

MuJoCo安装教程见。

Pip版本

要求Pip版本至少为1.5.0,可执行pip install --ignore-installed pip进行pip升级。

之后(mujoco-py需要单独安装)可以运行以下命令对所有环境进行完成安装:

下面是运行程序的简单案例,运行环境CartPole-v0 1000步,每一步都渲染环境,然后弹出的窗口将呈现经典的小车倒立摆问题。

图5 运行示例

一般情况下,我们会在卡杆离开屏幕之前结束模拟,稍后会详细介绍。现在,请忽略关于即使这个环境已经返回done=True仍然调用step()的警告。

图6 警告

如果想看到其他环境的运行效果,可以将上面的CartPole-v0替换为MountainCar-v0、MsPacman-v0(需要Atari依赖)或Hopper-v1(需要MuJoCo依赖)。

如果想要在每一步比随机行为做的更高,就需要知道采取的动作是如何在环境中进行交互的。

环境的step函数返回的值就是我们所需要的,实际上,每一步环境都会返回四个值:

  • observation(object):一个特定的环境对象,代表了从环境中得到的观测值,例如从摄像头获得的像素数据,机器人的关节角度和关节速度,或者棋盘游戏的棋盘状态。
  • reward(float):前一行为所获得的奖励。奖励大小因环境而异,但目标总是提高总奖励。
  • done(boolean):决定是否再次初始化环境。大多数(不一定所有)任务都被定义好了什么情况该结束这个回合。(举个例子,倒立摆倾斜地太远,或失去最后一条命)
  • info(dict):调试过程中诊断信息,有时它会对我们的强化学习学习过程很有用(例如,有时它会包含最后一个状态改变后的原始概率),然而在评估你的智能体的时候你是不会用到这些信息去驱动你的智能体学习的。

一个经典的强化学习智能体与环境交互的过程可以被描述成如下方式:每次迭代,智能体选择一个动作,这个动作输入到环境中去,智能体会得到下一个观察(也就是下一个状态)和奖励。

程序开始时先调用reset(),它会返回一个初始的观测值,一个合适的方式编写代码如下所示:

通过运行这段代码,可以输出以下视频和结果,可以清楚地看到在哪进行了reset。

图7 输出结果
图7 输出结果

在上面的例子中,我们一直在从环境的动作空间中随机抽取动作。但这些动作究竟是什么呢?每个环境都有一个action_space和一个observation_space。这些属性属于Space类型,它们描述了有效动作和观察的格式:

离散空间允许一个固定的非负数范围,所以在这种情况下有效的动作为0或1。Box空间表示一个n维的box,因此有效的观察值将是一个由4个数字组成的数组。可以通过以下来检查动作的边界范围:

这种方式可以很有效地帮助我们编写不同环境下的代码,Box和离散的space是最常见的space。你可以从space中进行采样,或者查看一些信息:

Gym配有多种从难到易的环境,也包含多种不同类型的数据,full list of environments中可以查看概览。

  • Classic control和toy text:完整的小规模任务,大多来自于强化学习文献,适合于入门。
  • Algorithmic:执行计算例如多位数加法和反转序列。一般认为这些任务对于计算机来说很容易,但是挑战在于纯粹从例子中去学习这些算法。这些任务有一个很好的特性,即通过改变序列长度很容易改变难度。
  • Atari:玩经典的Atari游戏。我们以一种易于安装的形式集成了学习环境(这对强化学习研究产生了很大的影响)。
  • 2D and 3D robots:控制仿真机器人。这些任务使用MuJoCo物理引擎,用于快速准确的仿真。包含了一些来自由UC Berkeley研究人员提供的benchmark环境。MuJoCo是一款私有软件,但也提供了免费试用许可证。1.2.8 注册gym的主要目的是提供大量的环境集合,这些环境暴露了一个公共接口,并进行了版本控制以便进行比较。要列出已安装可用的环境,只需询问gym.env .registry:

这将给出EnvSpec对象的列表。这些对象定义了特定任务的参数,包括要运行的试验数量和最大步数。例如,EnvSpec(Hopper-v1)定义了一个环境,其中的目标是让一个2D模拟机器人跳跃:EnvSpec(Go9x9-v0)在9x9棋盘上定义了围棋游戏。

这些环境id被视为不透明的字符串。为了确保将来进行有效比较,环境永远不会以影响性能的方式更改,只会被更新的版本替换。我们现在给每个环境加上一个v0后缀,以便将来的替换可以自然地称为v1、v2等。将

将自己的环境添加到注册表中非常容易,从而使它们对可用。make():只需在加载时注册它们。

强化学习(RL)是机器学习中涉及决策和电机控制的子领域。它研究代理如何在复杂、不确定的环境中学习如何实现目标。令人兴奋的原因有两个:

RL非常普遍,包括所有涉及到做出一系列决策的问题:例如,控制机器人的马达使其能够跑和跳;做出商业决策,如定价和库存管理;或玩视频游戏和棋盘游戏。RL甚至可以应用于具有顺序或结构化输出的监督学习问题。

RL算法已经开始在许多困难的环境中取得良好的效果。RL有着悠久的历史,但直到最近在深度学习方面取得的进展之前,它还需要许多针对特定问题的工程。DeepMind的Atari results、Pieter Abbeel小组的BRETT和AlphaGo都使用了深度RL算法,这些算法没有对环境做太多假设,因此可以应用于其他设置。

然而,RL的研究也受到两个因素的影响:

  • 需要更好的benchmas。在监督学习中,像ImageNet这样的大型标记数据集驱动了其进步。在RL中,类似的就是大量多样的环境集合。然而,现有的RL环境的开源集合没有足够的多样性,而且它们通常很难设置和使用。
  • 缺乏环境的标准化。在问题定义上的细微差别,如奖励函数或动作集合,可以极大地改变任务的难度。这个问题使得复制已发表的研究和比较不同论文的结果变得困难。

Gym正试图解决这两个问题。