HOME 首页
SERVICE 服务产品
XINMEITI 新媒体代运营
CASE 服务案例
NEWS 热点资讯
ABOUT 关于我们
CONTACT 联系我们
创意岭
让品牌有温度、有情感
专注品牌策划15年

    openai社区(openanolis 社区)

    发布时间:2023-03-13 00:40:31     稿源: 创意岭    阅读: 124        问大家

    大家好!今天让创意岭的小编来大家介绍下关于openai社区的问题,以下是小编对此问题的归纳整理,让我们一起来看看吧。

    ChatGPT国内免费在线使用,一键生成原创文章、方案、文案、工作计划、工作报告、论文、代码、作文、做题和对话答疑等等

    只需要输入关键词,就能返回你想要的内容,越精准,写出的就越详细,有微信小程序端、在线网页版、PC客户端

    官网:https://ai.de1919.com

    本文目录:

    openai社区(openanolis 社区)

    一、一个pytorch的bug,居然能让整个Python社区崩溃?

    明敏 发自 凹非寺

    量子位 报道 | 公众号 QbitAI

    到底是怎样的一个bug,能让95%的Pytorch库中招,就连特斯拉AI总监深受困扰?

    还别说,这个bug虽小,但有够“狡猾”的。

    这就是最近Reddit上热议的一个话题,是一位网友在使用再平常不过的Pytorch+Numpy组合时发现。

    最主要的是,在代码能够跑通的情况下,它甚至还会影响模型的准确率!

    除此之外,网友热议的另外一个点,竟然是:

    而是它到底算不算一个bug?

    这究竟是怎么一回事?

    事情的起因是一位网友发现,在PyTorch中用NumPy来生成随机数时,受到数据预处理的限制,会多进程并行加载数据,但最后每个进程返回的随机数却是相同的。

    他还举出例子证实了自己的说法。

    如下是一个示例数据集,它会返回三个元素的随机向量。这里采用的批量大小分别为2,工作进程为4个。

    然后神奇的事情发生了:每个进程返回的随机数都是一样的。

    这个结果会着实让人有点一头雾水,就好像数学应用题求小明走一段路程需要花费多少时间,而你却算出来了负数。

    发现了问题后,这位网友还在GitHub上下载了超过10万个PyTorch库,用同样的方法产生随机数。

    结果更加令人震惊:居然有超过95%的库都受到这个问题的困扰!

    这其中不乏PyTorch的官方教程和OpenAI的代码,连特斯拉AI总监Karpathy也承认自己“被坑过”!

    但有一说一,这个bug想要解决也不难:只需要在每个epoch都重新设置seed,或者用python内置的随机数生成器就可以避免这个问题。

    到底是不是bug?

    如果这个问题已经可以解决,为什么还会引起如此大的讨论呢?

    因为网友们的重点已经上升到了“哲学”层面:

    这到底是不是一个bug?

    在Reddit上有人认为:这不是一个bug。

    虽然这个问题非常常见,但它并不算是一个bug,而是一个在调试时不可以忽略的点。

    就是这个观点,激起了千层浪花,许多人都认为他忽略了问题的关键所在。

    这不是产生伪随机数的问题,也不是numpy的问题,问题的核心是在于PyTorch中的DataLoader的实现

    对于包含随机转换的数据加载pipeline,这意味着每个worker都将选择“相同”的转换。而现在NN中的许多数据加载pipeline,都使用某种类型的随机转换来进行数据增强,所以不重新初始化可能是一个预设。

    另一位网友也表示这个bug其实是在预设程序下运行才出现的,应该向更多用户指出来。

    并且95%以上的Pytorch库受此困扰,也绝不是危言耸听。

    有人就分享出了自己此前的惨痛经历:

    我认识到这一点是之前跑了许多进程来创建数据集时,然而发现其中一半的数据是重复的,之后花了很长的时间才发现哪里出了问题。

    也有用户补充说,如果 95% 以上的用户使用时出现错误,那么代码就是错的。

    顺便一提,这提供了Karpathy定律的另一个例子:即使你搞砸了一些非常基本代码,“neural nets want to work”。

    你有踩过PyTorch的坑吗?

    如上的bug并不是偶然,随着用PyTorch的人越来越多,被发现的bug也就越来越多,某乎上还有PyTorch的坑之总结,被浏览量高达49w。

    其中从向量、函数到model.train(),无论是真bug还是自己出了bug,大家的血泪史还真的是各有千秋。

    所以,关于PyTorch你可以分享的经验血泪史吗?

    欢迎评论区留言讨论~

    参考链接:

    [1]https://tanelp.github.io/posts/a-bug-that-plagues-thousands-of-open-source-ml-projects/

    [2]https://www.reddit.com/r/MachineLearning/comments/mocpgj/p_using_pytorch_numpy_a_bug_that_plagues/

    [3]https://www.zhihu.com/question/67209417/answer/866488638

    — 完 —

    二、特斯拉自动驾驶仪3D技术将成为即将爆发的新引擎

    摘要

    1. 特斯拉即将发布的3D更新将增加AI辅助驾驶功能。

    2. 未能意识到特斯拉在自动驾驶技术上的竞争优势的分析师和投资者,将会突然觉醒。

    3.大多数金融模型仍将特斯拉视为传统的 汽车 制造商,但这在未来将不再适用。

    分析师和投资者系统性地低估了特斯拉(Tesla)在自动驾驶领域的竞争地位。对竞争环境的评估过于依赖于对演示视频中自动驾驶 汽车 性能的定性判断,以及其他公关、营销和品牌塑造活动。从 历史 上看,被指派到特斯拉的卖方分析师大多是 汽车 分析师,这意味着他们没有时间或精力深度学习和研究机器人技术。这意味着特斯拉的自主优势正在被低估,或者根本无法在市场上定价。

    在我撰写关于特斯拉的文章的三年中,我一直坚持认为数据规模比几乎所有其他事情都重要。我也一次又一次地指出,认为特斯拉在自动驾驶方面的进展将是平稳而持续的,而不是磕磕绊绊、断断续续的。我推测,深度学习研发有两个阶段。数据收集和标记阶段可能相对快速。速度取决于公司在野外拥有的机器人数量以及它雇佣的数据标签工人数量。

    接下来是一个缓慢而不可预测的阶段,人工智能科学家和工程师致力于构建一个系统,以适当的时间、合适的力度摄取标签数据并输出有用的机器人行为,比如转向、加速和刹车。获取数据就像给油箱加油。AI科学家和工程师的工作就像制造引擎一样。从里程表的角度来看,进展可能是什么都没有,然后,在一瞬间,点火开关被打开, 汽车 就启动了。

    AI非线性发展的一个显著例子就是OpenAI在经典视频 游戏 Montezuma's Revenge上的突破。这张图表说明了一切:

    在这种情况下,数据是从 游戏 中收集并自动标记,因此数据集创建阶段要比科学和工程阶段快得多。此外,蒙特祖玛(Montezuma)的复仇在AI社区的整体进展也不是顺利和持续的。

    特斯拉在路上有超过90万个机器人。在美国,其所有竞争对手的合计机器人数量不到2000辆,而且鉴于大多数测试都在美国进行,因此全球总数可能不会高很多。深度神经网络的性能可预测地随着数据的变化而变化,这样的数据优势可以产生2倍到30倍的性能优势。

    一个重要的警告是,数据需要手动或自动地标记。正如我所写的那样,特斯拉有许多很有前途的选择来自动标记数据,并使用其庞大的车队来使手动数据标记更加高效。(也就是说,在同样的人力资源中获得更多的神经网络性能。)特斯拉的AI科学家和工程师面临的挑战是,寻求这些选择,并让它们在商业规模上像在概念的学术证明中那样发挥作用。换句话说,就是制造一个能使用充足的燃料运行的引擎。

    走向3D

    显然,特斯拉AI团队目前最重要的工作是将计算机视觉从2D范式转换为3D范式。埃隆·马斯克(Elon Musk)在特斯拉第三行播客中首次描述了这一概念:

    马斯克最近详细阐述了这一转变所涉及的工作:

    “Whole Mars

    @WholeMarsBlog

    回复@elonmusk @romanhistory1和@HardcoreHistory

    自动驾驶仪的重写怎么样了?

    你们叫它 PlaidNet么?

    Elon Musk

    @elonmusk

    顺利。团队很出色,和他们一起工作是一种荣耀。几乎所有的东西都需要重写,包括我们的标签软件,所以从训练到推理的每一步都是“3D”的。

    2020年7月2日凌晨4:54”

    2020年7月2日

    回复了@elonmusk @WholeMarsBlog和其他两个博客

    反向召唤有什么更新吗?

    Elon Musk

    @elonmusk

    当我们转换到新的软件栈时,许多功能将同时发生。最有可能的是,它将在2到4个月内发布。接下来的问题是,什么样的功能被证明足够安全,可以让用户使用。

    从2D到3D的转变意味着什么?就我所能猜测到的来说,这与传感器数据表示为神经网络有关。

    LiDAR激光脉冲通过在光线撞击物体并返回传感器时创建一个点来创建周围物体的3D表示。世界的3D表示称为点云。

    2018年,来自康奈尔大学的计算机视觉研究人员(包括王燕和赵卫麟)发表了一份预印本,显示可以使用相机来创建3D点云,更重要的是,使用这种形式的表示方式不是2D图像提高了神经网络使用相机预测深度的能力。相机可以通过立体视觉获得点,这也是人类和其他哺乳动物在一定距离下感知深度的方式。事实证明,使LiDAR(激光雷达)如此有效的不仅仅在于激光器,还有将LiDAR(激光雷达)输入解析为点云的常见做法。Wang等人将利用相机生成点云的方法称为“伪LiDAR(激光雷达)”。自2018年以来,其他研究人员也在此基础上开展了研究。

    如今,至少在某些学术基准上,伪LiDAR及其相关方法(如伪LiDAR ++和ViDAR(代表可视LiDAR或视频LiDAR))在3D对象检测和深度估计上与匹配LiDAR非常接近。据我了解,伪LiDAR ++的准确度大约是流行的KITTI Vision基准上LiDAR的三分之一。

    今年早些时候,特斯拉的AI高级总监安德烈·卡帕西(Andrej Karpathy)公开透露,特斯拉目前正在研究一种用于深度估算的伪LiDAR方法。回到2019年的自治日(Autonomy Day ),卡帕西演示了通过立体视觉获得的3D深度信息:

    在他最近的演讲中,Karpathy分享了3D表示与2D表示中获得的准确性的一小部分。这些可视化显示了路缘检测,左侧是“ground truth”(可能来自LiDAR),右侧是使用2D表示的基于摄像头的检测,中间是使用3D表示的基于摄像头的检测:

    如果这一定性的结果真正代表了特斯拉的整体性能提升,那么3D更新必将给特斯拉的AI辅助驾驶软件带来巨大的改进。从外部来看,这种改善会出现突发性和断续性。

    钱来了

    谈到特斯拉和自治(autonomy)方面,大多数分析师和投资者采取的是“我看到就相信”的态度。当然,这是他们的权利,但在我看来,这意味着低估了特斯拉在2021年及以后的收益和现金流。在实现完全的自动驾驶之前,特斯拉将继续大力推进AI辅助驾驶。特斯拉已经可以在红绿灯和停车标志前自动停车:

    AI辅助驾驶可以说是特斯拉使用者最喜欢的功能,也是特斯拉和其他 汽车 之间最明显的区别。与之竞争的 汽车 制造商在实施无线软件更新这样的基础技术方面进展缓慢,据我所知,还没有一家公司像特斯拉那样,公开宣布计划围绕其 汽车 生产建立一个深度学习渠道。我相信,2021年以后,差异化软件将为特斯拉 汽车 带来更多需求。

    对于没有其他附加组件的Model 3 Standard Range Plus,售价8,000美元的“完全自动驾驶功能”选项为购买价格的17%。这是一笔高利润收入,因为下载软件的边际成本可以忽略不计。马斯克多次表示,随着功能的增加,价格将会上涨。此外,特斯拉计划以每月订购的形式销售该软件。这必将扩大客户基础。

    AI辅助驾驶软件带来的收入不断增长,意味着分析师们应该考虑特斯拉的预期利润率,而不是仅与其业内同行进行比较。此外,特斯拉在软件方面的优势证明了乐观的增长假设。

    摩根士丹利(Morgan Stanley)的亚当·乔纳斯(Adam Jonas)最近发布了特斯拉2030年 汽车 销量为600万辆的看涨预测,认为特斯拉的股价将上涨2070美元。在我看来,考虑到特斯拉正步入 汽车 公司与人工智能(AI)和机器人公司之间的灰色地带,这种2030年的销量水平是合理的。目前尚不清楚,竞争对手如何能将 汽车 制造能力、软件和人工智能能力迅速合并,以减缓特斯拉目前的高速增长轨迹。因此,即使股价在1400美元左右,我仍然认为该股仍有很大的上涨空间。

    我们还可以考虑 汽车 销售以外的问题。我预计,在“3D更新”向客户推出后,会有更多的分析师和投资者开始认真考虑机器人(robotaxis)出租车。虽然鉴于这种不确定性,很难知道如何为机器人出租车(robotaxis)的机会定价。然而,私人市场投资者已经通过Waymo (GOOG, GOOGL)和Cruise (GM)成功做到了这一点。为什么特斯拉无法在公众市场上做到这一点呢?

    注:我/我们是long TSLA。这篇文章是我自己写的,表达了我自己的观点。我没有因此得到补偿(除了寻求阿尔法)。我和本文中提到的任何公司都没有业务关系。

    英文原文:https://seekingalpha.com/article/4357831-tesla-autopilot-3d-update-will-be-significant-stock-catalyst?li_source=LI&li_medium=liftigniter-widget

    (未经同意,请勿转载)

    三、程序员们说说看:TensorFlow到底难不难学?

    强化学习的进展速度远远低于深度学习。 虽然OpenAI Five和谷歌的AlphaGo等有值得注意的新闻突破,但实际情况下的强化学习实践并未发生。

    正如谷歌AI的团队在这篇博文中提到的那样,开发这类算法需要大量的实验而没有任何明确的方向。 不幸的是,大多数现有的框架都没有这种灵活性。 如果你在这个领域工作或研究过,你就知道重现现有方法有多困难(如果不是不可能的话)。

    因此,为了帮助加速研究,并希望让社区更多地参与强化学习,Google AI团队开放了一个名为Dopamine的TensorFlow框架,旨在通过使其更灵活和可重复性来创建研究。 根据团队的官方文档,他们的设计原则是:

    简单的实验:帮助新用户运行基准实验

    灵活的开发:为新用户提供新的创新想法

    紧凑和可靠:为一些较旧和更流行的算法提供实现

    可重复:确保结果可重复

    意识到新人们根据基准检查结果的重要性,研究人员还发布了整个培训数据。 它可用作Python pickle文件,JSON文件和用户可以可视化每个训练迭代的网站。

    我们对此有所了解

    请注意,DeepMind对多巴胺的研究与Google AI的这项工作无关。 虽然两者都在很大程度上植根于强化学习,但Google AI通过公开采购的方式参与了整个社区。 它肯定有助于它以TensorFlow为基础,这是深度学习社区中每个人都熟悉的框架。

    强化学习可能是一个令人生畏的主题,但我鼓励大家尝试一下。 这个领域仍然具有潜力,并将在未来几年取得很大进展。 这是一个很好的入门资源,您也可以参考我们的文章了解初学者。

    如果你想更加了解TensorFlow,或者说想实践一下人工智能项目,谷歌的另一款工具或许可以帮到你,也就是谷歌的AIY Projects 项目。

    在2017 年上半年,谷歌宣布了一个新的开源计划--AIY Projects(AIY计划),其目标是让每个Maker(创客)都能DIY自己的 AI 人工智能产品,让更多人能学习、探索并体验人工智能。 AIY 全称是 Artificial Intelligence Yourself ,顾名思义就是利用 AI 来进行的 DIY 功能套件。借助 AIY 项目,创客可以利用人工智能来实现更像人与人交流的人机交互。谷歌目前为 AIY Projects 推出了两款硬件产品--AIY Voice Kit 和 AIY Vision Kit。

    AIY Vision Kit(视觉套件)是一套简单的计算机视觉系统,可运行 3 种基于 TensorFlow 的类神经网路模型应用程序。

    这次 AIY 计划推出两款新品,Edge TPU 是谷歌专用的 ASIC 芯片,专为在 Edge 运行 TensorFlow Lite ML 模型而设计, 用来处理 AI 预测部分。它的特点是比训练模型的计算强度要小。而且 Edge TPU 还可以自己运行计算,不需要与多台强大计算机相连,因此应用程序可以更快、更可靠地工作。它们可以在传感器或网关设备中与标准芯片或微控制器共同处理 AI 工作。 针对Edge TPU的新设备是:AIY Edge TPU Dev 开发板和 AIY Edge TPU 加速器,二者皆采用 Google 的 Edge TPU 芯片。

    四、TensorForce是怎样炼成的

    TensorForce是怎样炼成的

    本文将围绕一个实际的问题进行介绍:应用强化学习的社区可以如何从对脚本和单个案例的收集更进一步,实现一个强化学习 API——一个用于强化学习的 tf-learn 或 skikit-learn?在讨论 TensorForce 框架之前,我们将谈一谈启发了这个项目的观察和思想。如果你只想了解这个 API,你可以跳过这一部分。我们要强调一下:这篇文章并不包含对深度强化学习本身的介绍,也没有提出什么新模型或谈论最新的最佳算法,因此对于纯研究者来说,这篇文章可能并不会那么有趣。

    开发动机

    假设你是计算机系统、自然语言处理或其它应用领域的研究者,你一定对强化学习有一些基本的了解,并且有兴趣将深度强化学习(deep RL)用来控制你的系统的某些方面。

    对深度强化学习、DQN、vanilla 策略梯度、A3C 等介绍文章已经有很多了,比如 Karpathy 的文章对策略梯度方法背后的直观思想就进行了很好的描述。另外,你也能找到很多可以帮助上手的代码,比如 OpenAI 上手智能体、rllab以及 GitHub 上许多特定的算法。

    但是,我们发现在强化学习的研究框架开发和实际应用之间还存在一个巨大的鸿沟。在实际应用时,我们可能会面临如下的问题:

    •强化学习逻辑与模拟句柄的紧密耦合:模拟环境 API 是非常方便的,比如,它们让我们可以创建一个环境对象然后将其用于一个 for 循环中,同时还能管理其内部的更新逻辑(比如:通过收集输出特征)。如果我们的目标是评估一个强化学习思想,那么这就是合理的,但将强化学习代码和模拟环境分开则要艰难得多。它还涉及到流程控制的问题:当环境就绪后,强化学习代码可以调用它吗?或者当环境需要决策时,它会调用强化学习智能体吗?对于在许多领域中实现的应用强化学习库,我们往往需要后者。

    •固定的网络架构:大多数实现案例都包含了硬编码的神经网络架构。这通常并不是一个大问题,因为我们可以很直接地按照需求加入或移除不同的网络层。尽管如此,如果有一个强化学习库能够提供声明式接口的功能,而无需修改库代码,那么情况就会好得多。此外,在有的案例中,修改架构(出人意外地)要难得多,比如当需要管理内部状态的时候(见下文)。

    •不兼容状态/动作接口:很多早期的开源代码都使用了流行的 OpenAI Gym 环境,具有平坦的状态输入的简单接口和单个离散或连续动作输出。但 DeepMind Lab 则使用了一种词典格式,一般具有多个状态和动作。而 OpenAI Universe 则使用的是命名关键事件(named key events)。理想情况下,我们想让强化学习智能体能处理任意数量的状态和动作,并且具有潜在的不同类型和形状。比如说,TensorForce 的一位作者正在 NLP 中使用强化学习并且想要处理多模态输入,其中一个状态在概念上包含两个输入——一张图像和一个对应的描述。

    •不透明的执行设置和性能问题:写 TensorFlow 代码的时候,我们很自然地会优先关注逻辑。这会带来大量重复/不必要的运算或实现不必要的中间值。此外,分布式/异步/并行强化学习的目标也有点不固定,而分布式 TensorFlow 需要对特定的硬件设置进行一定程度的人工调节。同样,如果最终有一种执行配置只需要声明可用设备或机器,然后就能在内部处理好其它一切就好了,比如两台有不同 IP 的机器可以运行异步 VPG。

    明确一下,这些问题并不是要批评研究者写的代码,因为这些代码本来就没打算被用作 API 或用于其它应用。在这里我们介绍的是想要将强化学习应用到不同领域中的研究者的观点。

    TensorForce API

    TensorForce 提供了一种声明式接口,它是可以使用深度强化学习算法的稳健实现。在想要使用深度强化学习的应用中,它可以作为一个库使用,让用户无需担心所有底层的设计就能实验不同的配置和网络架构。我们完全了解当前的深度强化学习方法往往比较脆弱,而且需要大量的微调,但这并不意味着我们还不能为强化学习解决方案构建通用的软件基础设施。

    TensorForce 并不是原始实现结果的集合,因为这不是研究模拟,要将原始实现用在实际环境的应用中还需要大量的工作。任何这样的框架都将不可避免地包含一些结构决策,这会使得非标准的事情变得更加恼人(抽象泄漏(leaky abstractions))。这就是为什么核心强化学习研究者可能更倾向于从头打造他们的模型的原因。使用 TensorForce,我们的目标是获取当前最佳研究的整体方向,包含其中的新兴见解和标准。

    接下来,我们将深入到 TensorForce API 的各个基本方面,并讨论我们的设计选择。

    创建和配置智能体

    这个示例中的状态和动作是更一般的状态/动作的短形式(short-form)。比如由一张图像和一个描述构成多模态输入按如下方式定义。类似地,也可以定义多输出动作。注意在整个代码中,单个状态/动作的短形式必须被持续不断地用于与智能体的通信。

    配置参数依赖于所用的基本智能体和模型。

    TensorForce 目前提供了以下强化学习算法:

    •随机智能体基线(RandomAgent)

    •带有 generalized advantage estimation 的 vanilla 策略梯度(VPGAgent)

    •信任区域策略优化(TRPOAgent)

    •深度 Q 学习/双深度 Q 学习(DQNAgent)

    •规范化的优势函数(NAFAgent)

    •对专家演示的深度 Q 学习(DQFDAgent)

    •Asynchronous Advantage Actor-Critic(A3C)(可以隐含地通过 distributed 使用)

    最后一项的意思是说并没有 A3CAgent 这样的东西,因为 A3C 实际上描述的是一种异步更新的机制,而不是一种特定的智能体。因此,使用分布式 TensorFlow 的异步更新机制是通用 Model 基类的一部分,所有智能体都衍生于此。正如论文《Asynchronous Methods for Deep Reinforcement Learning》中描述的那样,A3C 是通过为 VPGAgent 设置 distributed flag 而隐含地实现的。应该指出,A3C 并不是对每种模型而言都是最优的分布式更新策略(对一些模型甚至完全没意义),我们将在本文结尾处讨论实现其它方法(比如 PAAC)。重要的一点是要在概念上将智能体和更新语义的问题与执行语义区分开。

    我们还想谈谈模型(model)和智能体(agent)之间的区别。Agent 类定义了将强化学习作为 API 使用的接口,可以管理传入观察数据、预处理、探索等各种工作。其中两个关键方法是 agent.act(state) 和 agent.observe(reward, terminal)。agent.act(state) 返回一个动作,而 agent.observe(reward, terminal) 会根据智能体的机制更新模型,比如离策略记忆回放(MemoryAgent)或在策略批处理(BatchAgent)。注意,要让智能体的内在机制正确工作,必须交替调用这些函数。Model 类实现了核心强化学习算法,并通过 get_action 和 update 方法提供了必要的接口,智能体可以在相关点处内在地调用。比如说,DQNAgent 是一个带有 DQNModel 和额外一行(用于目标网络更新)的 MemoryAgent 智能体。

    神经网络配置

    强化学习的一个关键问题是设计有效的价值函数。在概念上讲,我们将模型看作是对更新机制的描述,这有别于实际更新的东西——在深度强化学习的例子中是指一个(或多个)神经网络。因此,模型中并没有硬编码的网络,而是根据配置不同的实例化。

    在上面的例子中,我们通过编程创造了一个网络配置作为描述每一层的词典列表。这样的配置也可以通过 JSON 给出,然后使用一个效用函数将其变成一个网络构建器(network constructor)。

    默认的激活层是 relu,但也还有其它激活函数可用(目前有 elu、selu、softmax、tanh 和 sigmoid)。此外也可以修改层的其它性质.

    我们选择不使用已有的层实现(比如来自 tf.layers),从而能对内部运算施加明确的控制,并确保它们能与 TensorForce 的其余部分正确地整合在一起。我们想要避免对动态 wrapper 库的依赖,因此仅依赖于更低层的 TensorFlow 运算。

    我们的 layer 库目前仅提供了非常少的基本层类型,但未来还会扩展。

    到目前为止,我们已经给出了 TensorForce 创建分层网络的功能,即一个采用单一输入状态张量的网络,具有一个层的序列,可以得出一个输出张量。但是在某些案例中,可能需要或更适合偏离这样的层堆叠结构。最显著的情况是当要处理多个输入状态时,这是必需的,使用单个处理层序列无法自然地完成这一任务。

    我们目前还没有为自动创建对应的网络构建器提供更高层的配置接口。因此,对于这样的案例,你必须通过编程来定义其网络构建器函数,并像之前一样将其加入到智能体配置中。

    内部状态和 Episode 管理

    和经典的监督学习设置(其中的实例和神经网络调用被认为是独立的)不同,强化学习一个 episode 中的时间步取决于之前的动作,并且还会影响后续的状态。因此除了其每个时间步的状态输入和动作输出,可以想象神经网络可能有内部状态在 episode 内的对应于每个时间步的输入/输出。下图展示了这种网络随时间的工作方式:

    这些内部状态的管理(即在时间步之间前向传播它们和在开始新 episode 时重置它们)可以完全由 TensorForce 的 agent 和 model 类处理。注意这可以处理所有的相关用例(在 batch 之内一个 episode,在 batch 之内多个 episode,在 batch 之内没有终端的 episode)。

    在这个示例架构中,稠密层的输出被送入一个 LSTM cell,然后其得出该时间步的最终输出。当向前推进该 LSTM 一步时,其内部状态会获得更新并给出此处的内部状态输出。对于下一个时间步,网络会获得新状态输入及这个内部状态,然后将该 LSTM 又推进一步并输出实际输出和新的内部 LSTM 状态,如此继续……

    对于带有内部状态的层的自定义实现,该函数不仅必须要返回该层的输出,而且还要返回一个内部状态输入占位符的列表、对应的内部状态输出张量和一个内部状态初始化张量列表(这些都长度相同,并且按这个顺序)。

    预处理状态

    我们可以定义被应用于这些状态(如果指定为列表的词典,则可能是多个状态)的预处理步骤.

    这个 stack 中的每一个预处理器都有一个类型,以及可选的 args 列表和/或 kwargs 词典。比如 sequence 预处理器会取最近的四个状态(即:帧)然后将它们堆叠起来以模拟马尔可夫属性。随便一提:在使用比如之前提及的 LSTM 层时,这显然不是必需的,因为 LSTM 层可以通过内部状态建模和交流时间依赖。

    探索

    探索可以在 configuration 对象中定义,其可被智能体应用到其模型决定所在的动作上(以处理多个动作,同样,会给出一个规范词典)。比如,为了使用 Ornstein-Uhlenbeck 探索以得到连续的动作输出,下面的规范会被添加到配置中。

    用 Runner 效用函数使用智能体

    让我们使用一个智能体,这个代码是在我们测试环境上运行的一个智能体,我们将其用于连续积分——一个为给定智能体/模型的工作方式验证行动、观察和更新机制的最小环境。注意我们所有的环境实现(OpenAI Gym、OpenAI Universe、DeepMind Lab)都使用了同一个接口,因此可以很直接地使用另一个环境运行测试。

    Runner 效用函数可以促进一个智能体在一个环境上的运行过程。给定任意一个智能体和环境实例,它可以管理 episode 的数量,每个 episode 的最大长度、终止条件等。Runner 也可以接受 cluster_spec 参数,如果有这个参数,它可以管理分布式执行(TensorFlow supervisors/sessions/等等)。通过可选的 episode_finished 参数,你还可以周期性地报告结果,还能给出在最大 episode 数之前停止执行的指标。

    正如在引言中说的一样,在一个给定应用场景中使用 runner 类取决于流程控制。如果使用强化学习可以让我们合理地在 TensorForce 中查询状态信息(比如通过一个队列或网络服务)并返回动作(到另一个队列或服务),那么它可被用于实现环境接口,并因此可以使用(或扩展)runner 效用函数。

    更常见的情况可能是将 TensorForce 用作驱动控制的外部应用库,因此无法提供一个环境句柄。对研究者来说,这可能无足轻重,但在计算机系统等领域,这是一个典型的部署问题,这也是大多数研究脚本只能用于模拟,而无法实际应用的根本原因。

    另外值得提及的一点是声明式的中心配置对象使得我们可以直接用超参数优化为强化学习模型的所有组件配置接口,尤其还有网络架构。

    进一步思考

    我们希望你能发现 TensorForce 很有用。到目前为止,我们的重点还是让架构先就位,我们认为这能让我们更持续一致地实现不同的强化学习概念和新的方法,并且避免探索新领域中的深度强化学习用例的不便。

    在这样一个快速发展的领域,要决定在实际的库中包含哪些功能是很困难的。现在的算法和概念是非常多的,而且看起来在 Arcade Learning Environment (ALE) 环境的一个子集上,每周都有新想法得到更好的结果。但也有一个问题存在:许多想法都只在易于并行化或有特定 episode 结构的环境中才有效——对于环境属性以及它们与不同方法的关系,我们还没有一个准确的概念。但是,我们能看到一些明显的趋势:

    •策略梯度和 Q 学习方法混合以提升样本效率(PGQ、Q-Prop 等):这是一种合乎逻辑的事情,尽管我们还不清楚哪种混合策略将占上风,但是我们认为这将成为下一个「标准方法」。我们非常有兴趣理解这些方法在不同应用领域(数据丰富/数据稀疏)的实用性。我们一个非常主观的看法是大多数应用研究者都倾向于使用 vanilla 策略梯度的变体,因为它们易于理解、实现,而且更重要的是比新算法更稳健,而新算法可能需要大量的微调才能处理潜在的数值不稳定性(numerical instabilities)。一种不同的看法是非强化学习研究者可能只是不知道相关的新方法,或者不愿意费力去实现它们。而这就激励了 TensorForce 的开发。最后,值得考虑的是,应用领域的更新机制往往没有建模状态、动作和回报以及网络架构重要。

    •更好地利用 GPU 和其他可用于并行/一步/分布式方法的设备(PAAC、GA3C 等):这一领域的方法的一个问题是关于收集数据与更新所用时间的隐含假设。在非模拟的领域,这些假设可能并不成立,而理解环境属性会如何影响设备执行语义还需要更多的研究。我们仍然在使用 feed_dicts,但也在考虑提升输入处理的性能。

    •探索模式(比如,基于计数的探索、参数空间噪声……)

    •大型离散动作空间、分层模型和子目标(subgoal)的分解。比如 Dulac-Arnold 等人的论文《Deep Reinforcement Learning in Large Discrete Action Spaces》。复杂离散空间(比如许多依赖于状态的子选项)在应用领域是高度相关的,但目前还难以通过 API 使用。我们预计未来几年会有大量成果。

    •用于状态预测的内部模块和基于全新模型的方法:比如论文《The Predictron: End-To-End Learning and Planning》。

    •贝叶斯深度强化学习和关于不确定性的推理

    总的来说,我们正在跟踪这些发展,并且将会将此前错过的已有技术(应该有很多)纳入进来;而一旦我们相信一种新想法有变成稳健的标准方法的潜力,我们也会将其纳入进来。在这个意义上,我们并没有与研究框架构成明确的竞争,而是更高程度的覆盖。

    以上就是关于openai社区相关问题的回答。希望能帮到你,如有更多相关问题,您也可以联系我们的客服进行咨询,客服也会为您讲解更多精彩的知识和内容。


    推荐阅读:

    pop软件安卓版(pop安卓版下载)

    chat.openia

    pop下载安卓(pop聊天软件官网)

    2022年销售工作计划怎么写(2022年销售工作计划怎么写呢)

    浙江文化特色元素(浙江文化特色元素简笔画)