提交 663bfc64 编写于 作者: W wizardforcel

2020-12-17 16:28:37

上级 62de467f
......@@ -110,7 +110,7 @@
第 22 章,“通过强化学习创建智能体”
本章将定义**强化学习****RL**),并涵盖 RL 模型中的组件。 它将详细介绍用于构建 RL 系统的技术。 最后,它将演示如何构建可以通过与环境交互进行学习的学习代理
本章将定义**强化学习****RL**),并涵盖 RL 模型中的组件。 它将详细介绍用于构建 RL 系统的技术。 最后,它将演示如何构建可以通过与环境交互进行学习的学习智能体
第 23 章,“人工智能和大数据”
......
......@@ -16,7 +16,7 @@
# 什么是 AI?
如何定义 AI 可能会有很大差异。 从哲学上讲,什么是“智能”? 一个人如何感知智能又定义了它的人为对应物。 对 AI 领域的广泛而乐观的定义可能是:“计算机科学领域,它研究机器如何执行通常需要有知觉的代理的任务。” 从这样的定义可以说,像计算机乘以两个数字这样简单的东西就是“人工智能”。 这是因为我们设计了一种能够接受输入并独立产生逻辑输出的机器,而该逻辑输出通常需要有生命的实体进行处理。
如何定义 AI 可能会有很大差异。 从哲学上讲,什么是“智能”? 一个人如何感知智能又定义了它的人为对应物。 对 AI 领域的广泛而乐观的定义可能是:“计算机科学领域,它研究机器如何执行通常需要有知觉的智能体的任务。” 从这样的定义可以说,像计算机乘以两个数字这样简单的东西就是“人工智能”。 这是因为我们设计了一种能够接受输入并独立产生逻辑输出的机器,而该逻辑输出通常需要有生命的实体进行处理。
更具怀疑性的定义可能更狭窄,例如:“研究机器如何紧密模仿人类智能的计算机科学领域”。 根据这样的定义,怀疑论者可能会认为我们今天所拥有的不是人工智能。 到目前为止,他们已经能够指出计算机无法执行的任务的示例,因此声称如果计算机不能令人满意地执行这些功能,它们将无法“思考”或展现人工智能。
......@@ -173,23 +173,23 @@
# 建立理性智能体
人工智能的许多研究都集中在构建理性主体上。 什么是理性代理? 在此之前,让我们在 AI 的上下文中定义*合理性*一词。 合理性是指遵守一组规则并遵循其逻辑含义以实现理想的结果。 这需要以使执行该操作的实体获得最大利益的方式执行。 因此,如果在给定的一组规则下采取行动以实现其目标,则该行动者被称为理性行动。 它只是根据可用信息感知并采取行动。 当将机器人发送到未知地形时,该系统在 AI 中被大量用于设计机器人。
人工智能的许多研究都集中在构建理性主体上。 什么是理性智能体? 在此之前,让我们在 AI 的上下文中定义*合理性*一词。 合理性是指遵守一组规则并遵循其逻辑含义以实现理想的结果。 这需要以使执行该操作的实体获得最大利益的方式执行。 因此,如果在给定的一组规则下采取行动以实现其目标,则该行动者被称为理性行动。 它只是根据可用信息感知并采取行动。 当将机器人发送到未知地形时,该系统在 AI 中被大量用于设计机器人。
我们如何定义*理想的*是什么? 答案是,这取决于代理商的目标。 该代理应该是智能且独立的。 我们希望赋予适应新情况的能力。 它应该了解其环境,然后采取相应行动,以实现符合其最大利益的结果。 最大的利益取决于它要实现的总体目标。 让我们看看如何将输入转换为动作:
我们如何定义*理想的*是什么? 答案是,这取决于智能体的目标。 该智能体应该是智能且独立的。 我们希望赋予适应新情况的能力。 它应该了解其环境,然后采取相应行动,以实现符合其最大利益的结果。 最大的利益取决于它要实现的总体目标。 让我们看看如何将输入转换为动作:
![](img/B15441_01_07.png)
图 7:将输入转化为行动
我们如何定义理性代理人的表现指标? 也许有人会说它与成功的程度成正比。 设置代理以完成任务,因此性能度量取决于该任务完成的百分比。 但是我们必须考虑什么构成了整体的合理性。 如果只是结果,我们不考虑导致结果的行动。
我们如何定义理性智能体的表现指标? 也许有人会说它与成功的程度成正比。 设置智能体以完成任务,因此性能度量取决于该任务完成的百分比。 但是我们必须考虑什么构成了整体的合理性。 如果只是结果,我们不考虑导致结果的行动。
做出正确的推断是理性的一部分,因为主体必须理性地行动以实现其目标。 这将有助于它得出可以连续使用的结论。
但是,在没有可证明的正确事情要做的情况下呢? 在某些情况下,代理不知道要做什么,但它仍然必须做一些事情。
但是,在没有可证明的正确事情要做的情况下呢? 在某些情况下,智能体不知道要做什么,但它仍然必须做一些事情。
让我们设置一个方案,使最后一点更加清楚。 想象一下,一辆无人驾驶汽车以每小时 60 英里的速度行驶,突然有人越过它。 对于本示例,假设给定汽车行驶的速度,则只有两种选择。 汽车要么撞向护栏,要么就知道会杀死汽车乘员,要么撞向行人并杀死他们。 正确的决定是什么? 该算法如何知道该怎么做? 如果您在开车,您会做什么吗?
现在,我们将学习理性代理的最早示例之一-通用问题解决器。 就像我们将看到的那样,尽管它的名称很高大,但它确实无法解决任何问题,但是由于它,它在计算机科学领域是一个巨大的飞跃。
现在,我们将学习理性智能体的最早示例之一-通用问题解决器。 就像我们将看到的那样,尽管它的名称很高大,但它确实无法解决任何问题,但是由于它,它在计算机科学领域是一个巨大的飞跃。
# 通用问题解决器
......@@ -208,7 +208,7 @@
1. 此后,我们需要定义运算符。 如果我的交通工具是汽车,并且汽车的燃油不足,那么我们需要确保可以向加油站付款。 我们需要确保您可以在商店购买牛奶。
操作员要注意条件以及影响条件的一切。 它由行动,前提条件和采取行动引起的变化组成。 在这种情况下,操作就是向杂货店捐款。 当然,这首先要取决于您有钱,这是前提。 通过给他们钱,您正在改变您的金钱状况,这将导致您得到牛奶。
运算符要注意条件以及影响条件的一切。 它由行动,前提条件和采取行动引起的变化组成。 在这种情况下,操作就是向杂货店捐款。 当然,这首先要取决于您有钱,这是前提。 通过给他们钱,您正在改变您的金钱状况,这将导致您得到牛奶。
如果您可以像我们刚才那样解决问题,GPS 将会起作用。 限制在于它使用搜索过程来执行其工作,这对于任何有意义的现实应用而言都过于复杂且耗时。
......@@ -216,7 +216,7 @@
# 建立智能体
有很多方法可以将智能传递给代理。 最常用的技术包括机器学习,存储的知识,规则等。 在本节中,我们将重点关注机器学习。 在这种方法中,我们通过数据和训练来向代理赋予情报。
有很多方法可以将智能传递给智能体。 最常用的技术包括机器学习,存储的知识,规则等。 在本节中,我们将重点关注机器学习。 在这种方法中,我们通过数据和训练来向智能体赋予情报。
让我们看看智能体如何与环境交互:
......
......@@ -93,7 +93,7 @@
**5 级(全自动)**
无人驾驶系统可以控制并在人类可以应付的任何道路上和任何条件下操作汽车。 汽车的“操作员”只需输入目的地。 目前尚无此级别的产品,但是有几家公司已经关闭,到本书出版时可能已经存在。
无人驾驶系统可以控制并在人类可以应付的任何道路上和任何条件下操作汽车。 汽车的“驾驶员”只需输入目的地。 目前尚无此级别的产品,但是有几家公司已经关闭,到本书出版时可能已经存在。
现在,我们将回顾在该领域工作的一些领先公司:
......
......@@ -174,7 +174,7 @@
* 亚马逊 S3
* Azure Blob 存储
还可以在数据库内部地处理数据以进行机器学习。 SQL Server 和 SQL Azure 等数据库正在添加特定的机器学习功能,以支持机器学习管道。 Spark 具有 Spark Streaming 内置的功能。 它可以从 HDFS,Kafka 和其他来源读取数据。
还可以在数据库内部地处理数据以进行机器学习。 SQL Server 和 SQL Azure 等数据库正在添加特定的机器学习功能,以支持机器学习管道。 Spark 具有 Spark Streaming 内置的功能。 它可以从 HDFS,Kafka 和其他来源读取数据。
还有其他替代方法,例如 Apache Storm 和 Apache Heron。 不管管道中有什么其他内容,通常都在交互式 Jupyter 笔记本电脑或 R Studio 中完成数据的初始探索。
......
......@@ -56,7 +56,7 @@
现在让我们定义术语*总体*。 总体是一组可能的候选解决方案。 在 GA 中,单个最佳解决方案不会在任何给定阶段维护,而是会保留一组潜在解决方案,其中一个可能是最佳解决方案。 但是其他解决方案在搜索过程中也起着重要作用。 由于跟踪解决方案的总体,因此不太可能陷入局部最优状态。 陷入局部最优是其他优化技术面临的经典问题。
现在,我们了解了 GA 的数量和随机性,下面我们来谈谈运营商。 当创建下一代个体时,算法会尝试确保它们来自当前世代中最适合的个体。
现在,我们了解了 GA 的数量和随机性,下面我们来谈谈运算符。 当创建下一代个体时,算法会尝试确保它们来自当前世代中最适合的个体。
*突变*是实现此目的的一种方法。 遗传算法对当前的一个或多个个体进行随机更改,以产生新的候选解。 这种变化称为突变。 现在,这种变化可能会使该个体变得比现有个体更好或更糟。
......@@ -149,7 +149,7 @@ def create_toolbox(num_bits):
toolbox.register("population", tools.initRepeat, list, toolbox.individual)
```
现在,我们需要注册遗传算子。 注册我们之前定义的`evaluation`函数,它将用作适应函数。 我们希望个体(有点模式)有`45`个:
现在,我们需要注册遗传运算符。 注册我们之前定义的`evaluation`函数,它将用作适应函数。 我们希望个体(有点模式)有`45`个:
```py
# Register the evaluation operator
......@@ -163,7 +163,7 @@ def create_toolbox(num_bits):
toolbox.register("mate", tools.cxTwoPoint)
```
使用`mutFlipBit`注册名为`mutate`的变异算子。 我们需要使用`indpb`指定每个属性发生突变的概率:
使用`mutFlipBit`注册名为`mutate`的变异运算符。 我们需要使用`indpb`指定每个属性发生突变的概率:
```py
# Register a mutation operator
......@@ -816,14 +816,14 @@ class RobotController(object):
self.matrix_exc = copy.deepcopy(self.matrix)
```
定义条件运算符
定义条件控制器
```py
def _conditional(self, condition, out1, out2):
out1() if condition() else out2()
```
定义左转弯算子
定义左转弯控制器
```py
def turn_left(self):
......@@ -832,7 +832,7 @@ class RobotController(object):
self.direction = (self.direction - 1) % 4
```
定义正确的车削算子
定义正确的右转控制器
```py
def turn_right(self):
......@@ -1169,11 +1169,11 @@ Endorphin 在电影《王者归来》中首次亮相,这是用来使特别棘
后两个示例严重依赖计算机算法来获得市场领先的结果。
博弈论一直是经济学家试图了解市场的一种标准工​​具,但是越来越多的人为和计算机化的代理人进行了模拟。 GP 被越来越多地用作这些社会系统模拟的一部分。
博弈论一直是经济学家试图了解市场的一种标准工​​具,但是越来越多的人为和计算机化的智能体进行了模拟。 GP 被越来越多地用作这些社会系统模拟的一部分。
GP 算法广泛用于金融交易,时间序列预测和经济建模领域; 一整本书要列出它的所有应用。
在本节中,我们将从头开始,并访问一些示例。 在这一领域特别杰出的研究人员是陈胜雄。 Chen 写了 60 多篇关于在金融和经济学中使用 GP 的论文。 他最近的一些论文研究了股票市场中的代理人建模(Chen 和 Liao,2005),博弈论(Chen,Duffy 和 Yeh,2002),标准普尔 500 指数交易规则的演变(Yu 和 Chen,2004)。 并预测了恒生指数(Chen,Wang 和 Zhang,1999 年)。
在本节中,我们将从头开始,并访问一些示例。 在这一领域特别杰出的研究人员是陈胜雄。 Chen 写了 60 多篇关于在金融和经济学中使用 GP 的论文。 他最近的一些论文研究了股票市场中的智能体建模(Chen 和 Liao,2005),博弈论(Chen,Duffy 和 Yeh,2002),标准普尔 500 指数交易规则的演变(Yu 和 Chen,2004)。 并预测了恒生指数(Chen,Wang 和 Zhang,1999 年)。
**其他应用**
......
......@@ -9,7 +9,7 @@
* 顶级云提供商
* 亚马逊网络服务:
* 亚马逊 SageMaker
* Alexa,Lex 和 Polly – 对话代理
* Alexa,Lex 和 Polly – 对话智能体
* Amazon Comprehend – 自然语言处理
* Amazon Rekognition – 图片和视频
* 亚马逊翻译
......@@ -220,7 +220,7 @@ SageMaker 部署支持一次性和批量预测。 批量预测对可以存储在
在前面的章节中,我们讨论了 Alexa 及其在家庭中越来越普遍的存在。 现在,我们将深入研究为 Alexa 提供支持的技术,并允许您创建自己的对话机器人。
Amazon Lex 是用于建立对话代理的服务。 Amazon Lex 和其他聊天机器人是我们这一代人的尝试通过图灵测试,我们在前面的章节中已经进行了讨论。 任何人将与 Alexa 的对话与人类对话混淆都需要一段时间。 但是,亚马逊和其他公司在使这些对话越来越自然的过程中不断取得进步。 Amazon Lex,使用与 Amazon Alexa 相同的技术,使开发人员可以快速构建复杂的自然语言,会话代理或“聊天机器人”。 对于简单的情况,无需任何编程就可以构建其中的一些聊天机器人。 但是,可以使用 AWS Lambda 作为集成技术将 Lex 与 AWS 堆栈中的其他服务集成。
Amazon Lex 是用于建立对话智能体的服务。 Amazon Lex 和其他聊天机器人是我们这一代人的尝试通过图灵测试,我们在前面的章节中已经进行了讨论。 任何人将与 Alexa 的对话与人类对话混淆都需要一段时间。 但是,亚马逊和其他公司在使这些对话越来越自然的过程中不断取得进步。 Amazon Lex,使用与 Amazon Alexa 相同的技术,使开发人员可以快速构建复杂的自然语言,会话智能体或“聊天机器人”。 对于简单的情况,无需任何编程就可以构建其中的一些聊天机器人。 但是,可以使用 AWS Lambda 作为集成技术将 Lex 与 AWS 堆栈中的其他服务集成。
稍后,我们将整整一章专门介绍如何创建聊天机器人,因此我们将在本节中简短介绍。
......@@ -538,7 +538,7 @@ Natural 语言 API 具有预训练的模型,该模型使 API 的用户可以
* 实体情感分析
* 语法分析
**Dialogflow**:Dialogflow 是开发服务,允许用户创建对话代理。 它可以用来构建聊天机器人,以实现自然而丰富的交互。 它允许服务的用户一次开发代理,然后将它们部署到各种平台,包括:
**Dialogflow**:Dialogflow 是开发服务,允许用户创建对话智能体。 它可以用来构建聊天机器人,以实现自然而丰富的交互。 它允许服务的用户一次开发智能体,然后将它们部署到各种平台,包括:
* 谷歌助手
* Facebook Messenger
......
......@@ -68,7 +68,7 @@ $ pip3 install easyAI
# 建立一个玩 Last Coin Standing 的机器人
在此游戏中,有一堆硬币,每个玩家轮流从该堆中取出许多硬币。 可从堆中取出的硬币数量有上限和下限。 游戏的目的是避免拿最后一枚硬币。 该配方是`easyAI`库中给出的“骨头游戏”配方的一种变体。 让我们看看如何构建一个可以与用户对战的游戏。
在此游戏中,有一堆硬币,每个玩家轮流从该堆中取出许多硬币。 可从堆中取出的硬币数量有上限和下限。 游戏的目的是避免拿最后一枚硬币。 该秘籍是`easyAI`库中给出的“骨头游戏”秘籍的一种变体。 让我们看看如何构建一个可以与用户对战的游戏。
创建一个新的 Python 文件,并导入以下包:
......@@ -212,7 +212,7 @@ if __name__ == "__main__":
# 建立一个玩井字棋的机器人
井字棋(Nights and Crosss)是,也许是世界上最著名的游戏之一。 让我们看看如何构建一个可以与用户对战的游戏。 这是`easyAI`库中给出的井字棋食谱的一个较小变体。
井字棋(Nights and Crosss)是,也许是世界上最著名的游戏之一。 让我们看看如何构建一个可以与用户对战的游戏。 这是`easyAI`库中给出的井字棋秘籍的一个较小变体。
创建一个新的 Python 文件并导入以下包:
......@@ -328,7 +328,7 @@ if __name__ == "__main__":
# 建立两个机器人来互相玩 Connect Four™
Connect Four™ 是,这是一款流行的两人游戏,以 Milton Bradley 商标出售。 它也以其他名称(例如“连续四个”或“四个向上”)而闻名。 在此游戏中,玩家轮流将光盘放入由六行七列组成的垂直网格中。 目标是连续获取四张光盘。 这是`easyAI`库中提供的“连接四个”配方的变体。 让我们看看如何构建它。 在此配方中,我们将创建两个可以相互对抗的机器人,而不是与计算机对抗。 每个人将使用不同的算法来查看哪个获胜。
Connect Four™ 是,这是一款流行的两人游戏,以 Milton Bradley 商标出售。 它也以其他名称(例如“连续四个”或“四个向上”)而闻名。 在此游戏中,玩家轮流将光盘放入由六行七列组成的垂直网格中。 目标是连续获取四张光盘。 这是`easyAI`库中提供的“连接四个”秘籍的变体。 让我们看看如何构建它。 在此秘籍中,我们将创建两个可以相互对抗的机器人,而不是与计算机对抗。 每个人将使用不同的算法来查看哪个获胜。
创建一个新的 Python 文件并导入以下包:
......@@ -487,7 +487,7 @@ if __name__ == '__main__':
# 建立两个机器人来互相对抗 Hexapawn
**Hexapawn** 是一款两人游戏,尺寸为`N×M`。 棋子存在于棋盘的两侧,目标是将棋子一直推进到棋盘的另一端。 国际象棋的标准典当规则适用。 这是`easyAI`库中提供的 Hexapawn 配方的变体。 将创建两个机器人,并使其相互对峙。 让我们创建代码。
**Hexapawn** 是一款两人游戏,尺寸为`N×M`。 棋子存在于棋盘的两侧,目标是将棋子一直推进到棋盘的另一端。 国际象棋的标准典当规则适用。 这是`easyAI`库中提供的 Hexapawn 秘籍的变体。 将创建两个机器人,并使其相互对峙。 让我们创建代码。
创建一个新的 Python 文件并导入以下包:
......
......@@ -79,9 +79,9 @@ Google Duplex 是一个很好的聊天机器人听起来很自然的有力例子
在开发代码之前,让我们设定一个基准并访问一些与聊天机器人相关的有用定义。
**代理**
**智能体**
代理是一个可以处理所有对话并路由所有必要的操作的系统。 这是一种自然语言理解模块,需要经常接受训练以适应特定于使用的需求。
智能体是一个可以处理所有对话并路由所有必要的操作的系统。 这是一种自然语言理解模块,需要经常接受训练以适应特定于使用的需求。
**意图**
......@@ -173,7 +173,7 @@ Webhook 是,HTTP 推送 API 或 Web 回调。 它也称为反向 API,因为
**适应性**
自适应聊天机器人是一种可以理解并适应收到的所有语音的聊天机器人。 即使对于未明确编程的语音,也应该有一个优美的响应,以使聊天机器人用户重回正轨,或者利用此机会将聚会转移给实时操作员。
自适应聊天机器人是一种可以理解并适应收到的所有语音的聊天机器人。 即使对于未明确编程的语音,也应该有一个优美的响应,以使聊天机器人用户重回正轨,或者利用此机会将会议转移给实时操作员。
**个性化设置**
......@@ -212,7 +212,7 @@ Google 在机器学习和**自然语言处理**(**NLP**)中有着广泛的
1. 使用 Google 帐户在[这里](https://dialogflow.com)免费注册。
2. 为了使聊天机器人正常工作,您需要接受 DialogFlow 所请求的所有权限。 这样,您就可以管理 GCP 服务中的数据,并与 Google 助手集成。
3. 您可以通过[这里](https://console.dialogflow.com)访问 DialogFlow 控制台。
4. 最后,通过选择主要语言(以后可以添加其他语言)和 Google Project 标识符来创建新代理。 要启用结算和其他设置,需要使用 Google Cloud Console 中的项目名称。 如果您没有现有项目,请不要担心:创建一个新项目。
4. 最后,通过选择主要语言(以后可以添加其他语言)和 Google Project 标识符来创建新智能体。 要启用结算和其他设置,需要使用 Google Cloud Console 中的项目名称。 如果您没有现有项目,请不要担心:创建一个新项目。
现在您已经注册并可以使用,让我们开始设置 DialogFlow。
......@@ -238,7 +238,7 @@ DialogFlow 中的开发利用了我们之前讨论的两个主要概念-意向
图 3:DialogFlow 聊天机器人实体创建
让我们从仅使用意图的基本示例开始。 首先,我们将创建代理,然后通过 DialogFlow 接口定义一些意图。 可以通过编程方式创建这些意图,但是为了使示例保持简单,我们将使用图形化界面来创建意图。 首先,让我们设置后备意图。 如果没有其他意图被调用,则将被调用:
让我们从仅使用意图的基本示例开始。 首先,我们将创建智能体,然后通过 DialogFlow 接口定义一些意图。 可以通过编程方式创建这些意图,但是为了使示例保持简单,我们将使用图形化界面来创建意图。 首先,让我们设置后备意图。 如果没有其他意图被调用,则将被调用:
![](img/B15441_16_04.png)
......@@ -320,7 +320,7 @@ print("Fulfillment text:",
在 DialogFlow 中,当调用某些启用了 Webhook 的意图时,将使用 Webhook 从后端获取数据。 来自该意图的信息将传递到 webhook 服务,然后返回响应。
为此,可以使用 **ngrok** 。 ngrok 软件是可用于调用 Webhook 的 Web 隧道工具。 它允许使用本地服务器测试 API 和 Webhooks。 本教程本节中将使用的另一个工具是 **Flask** 。 Flask 是一个轻量级的 Web 框架,可用于创建可调用外部应用的 Webhook 服务。 在我们的示例中,将被调用的外部应用是 DialogFlow 代理。 要使用 Flask,我们首先需要安装它:
为此,可以使用 **ngrok** 。 ngrok 软件是可用于调用 Webhook 的 Web 隧道工具。 它允许使用本地服务器测试 API 和 Webhooks。 本教程本节中将使用的另一个工具是 **Flask** 。 Flask 是一个轻量级的 Web 框架,可用于创建可调用外部应用的 Webhook 服务。 在我们的示例中,将被调用的外部应用是 DialogFlow 智能体。 要使用 Flask,我们首先需要安装它:
```py
$ pip3 install Flask
......
......@@ -911,4 +911,4 @@ for i in range(num_test):
# 总结
在本章中,我们学习了神经网络。 我们讨论了如何构建和训练神经网络。 我们讨论了感知器,并在此基础上构建了分类器。 我们了解了单层神经网络以及多层神经网络。 我们讨论了如何将神经网络用于构建向量量化器。 我们使用循环神经网络分析了序列数据。 然后,我们使用神经网络构建了光学字符识别引擎。 在下一章中,我们将学习强化学习,并了解如何构建智能学习代理。
\ No newline at end of file
在本章中,我们学习了神经网络。 我们讨论了如何构建和训练神经网络。 我们讨论了感知器,并在此基础上构建了分类器。 我们了解了单层神经网络以及多层神经网络。 我们讨论了如何将神经网络用于构建向量量化器。 我们使用循环神经网络分析了序列数据。 然后,我们使用神经网络构建了光学字符识别引擎。 在下一章中,我们将学习强化学习,并了解如何构建智能学习智能体。
\ No newline at end of file
# 22 通过强化学习创建智能体
在本章中,我们将学习**强化学习****RL**)。 我们将讨论 RL 的前提。 我们将讨论 RL 和监督学习之间的区别。 我们将通过一些真实的 RL 实例来了解 RL 如何以各种形式表现出来。 我们将学习 RL 的组成部分以及所涉及的各种概念。 然后,我们将在 Python 中创建一个环境,以了解其在实际中的工作方式。 然后,我们将使用这些概念来构建学习代理
在本章中,我们将学习**强化学习****RL**)。 我们将讨论 RL 的前提。 我们将讨论 RL 和监督学习之间的区别。 我们将通过一些真实的 RL 实例来了解 RL 如何以各种形式表现出来。 我们将学习 RL 的组成部分以及所涉及的各种概念。 然后,我们将在 Python 中创建一个环境,以了解其在实际中的工作方式。 然后,我们将使用这些概念来构建学习智能体
在本章中,我们将介绍以下主题:
......@@ -21,9 +21,9 @@
我们在生活中的每一个地方都使用这种学习过程。 我们收集了有关周围环境的所有知识,然后了解我们如何对此做出反应。 让我们考虑一个演说家的例子。 每当好的演说家在公开场合发表演讲时,他们就会知道人群对他们的发言有何反应。 如果人群没有响应,那么演说者会实时更改语音以确保人群参与。 如我们所见,演说者正试图通过他/她的行为来影响环境。 可以说,演说者*从与人群的互动中学习*,以便采取行动并达到一定的目标。 这种学习过程–观察环境,采取行动,评估该行动的后果,适应和再次采取行动–是人工智能中许多主题所基于的最基本的思想之一。 让我们牢记这一点来谈论 RL。
RL 是指学习操作方法并将情况映射到某些动作以最大化回报的过程。 在大多数机器学习范式中,学习代理会被告知要采取哪些行动才能获得一定的结果。 在加强学习的情况下,不会告知学习代理要采取什么行动。 取而代之的是,它必须通过尝试找出哪些行动会产生最高的回报。 这些行动往往会影响立即的报酬以及下一个情况。 这意味着所有后续奖励也将受到影响。
RL 是指学习操作方法并将情况映射到某些动作以最大化回报的过程。 在大多数机器学习范式中,学习智能体会被告知要采取哪些行动才能获得一定的结果。 在加强学习的情况下,不会告知学习智能体要采取什么行动。 取而代之的是,它必须通过尝试找出哪些行动会产生最高的回报。 这些行动往往会影响立即的报酬以及下一个情况。 这意味着所有后续奖励也将受到影响。
思考 RL 的一种好方法是理解我们定义的是学习问题而不是学习方法。 因此,可以说可以解决问题的任何方法都可以视为 RL 方法。 RL 的两个显着特征-反复试验学习和延迟奖励。 RL 代理使用这两个功能从中学习其行为的后果。
思考 RL 的一种好方法是理解我们定义的是学习问题而不是学习方法。 因此,可以说可以解决问题的任何方法都可以视为 RL 方法。 RL 的两个显着特征-反复试验学习和延迟奖励。 RL 智能体使用这两个功能从中学习其行为的后果。
# 强化学习与监督学习
......@@ -37,7 +37,7 @@ RL 是指学习操作方法并将情况映射到某些动作以最大化回报
让我们看看 RL 在现实世界中出现的位置。 这将帮助我们了解它的工作原理以及使用此可以构建哪些可能的应用,除非:
**游戏**:让我们考虑一下棋类游戏,例如围棋或象棋。 为了确定最佳动作,玩家需要考虑各种因素。 可能性的数量如此之大,以至于无法进行暴力搜索。 如果我们要使用传统技术制造一台可以玩这种游戏的机器,则需要指定许多规则来涵盖所有这些可能性。 RL 完全绕过了这个问题。 我们不需要手动指定任何逻辑规则。 学习代理仅通过示例学习并与自己玩游戏。
**游戏**:让我们考虑一下棋类游戏,例如围棋或象棋。 为了确定最佳动作,玩家需要考虑各种因素。 可能性的数量如此之大,以至于无法进行暴力搜索。 如果我们要使用传统技术制造一台可以玩这种游戏的机器,则需要指定许多规则来涵盖所有这些可能性。 RL 完全绕过了这个问题。 我们不需要手动指定任何逻辑规则。 学习智能体仅通过示例学习并与自己玩游戏。
有关此主题的更详尽讨论,请参阅第 2 章,“人工智能基本用例”中的“游戏”部分。
......@@ -45,11 +45,11 @@ RL 是指学习操作方法并将情况映射到某些动作以最大化回报
有关此主题的更多信息,请跳至第 2 章,“人工智能基本用例”中的“装运和仓库管理”部分。
**工业控制器**:考虑调度电梯的情况。 一个好的调度程序将花费最少的电量,并为最多的人员服务。 对于此类问题,RL 代理可以学习如何在模拟环境中执行此操作。 然后,他们可以利用这些知识来制定最佳计划。
**工业控制器**:考虑调度电梯的情况。 一个好的调度程序将花费最少的电量,并为最多的人员服务。 对于此类问题,RL 智能体可以学习如何在模拟环境中执行此操作。 然后,他们可以利用这些知识来制定最佳计划。
**婴儿**:机器在使用 RL 方面没有垄断权; 刚开始的几个月里,新生儿经历了几乎相同的过程。 他们通过反复尝试来学习,直到学会平衡为止。 有趣的是,婴儿发现了走路(或跑步!)是最有效的方式之后,发现了不同的运动方法。
如果仔细观察这些示例,您将看到一些共同的特征。 所有这些都涉及与环境的交互。 即使环境不确定,学习代理(无论是机器,婴儿还是其他设备)也旨在实现某个目标。 代理的动作将改变该环境的未来状态。 随着代理继续与环境交互,这会在以后的时间影响可用的机会。
如果仔细观察这些示例,您将看到一些共同的特征。 所有这些都涉及与环境的交互。 即使环境不确定,学习智能体(无论是机器,婴儿还是其他设备)也旨在实现某个目标。 代理的动作将改变该环境的未来状态。 随着代理继续与环境交互,这会在以后的时间影响可用的机会。
在讨论了 RL 是什么之后,并涵盖了一些真实的示例,现在让我们开始研究 RL。 我们将从讨论 RL 系统的构建块开始。
......@@ -61,7 +61,7 @@ RL 是指学习操作方法并将情况映射到某些动作以最大化回报
图 1:RL 的构成
通常,RL 代理执行以下步骤:
通常,RL 智能体执行以下步骤:
1. 有一组与代理和环境有关的状态。 在给定的时间点,代理会观察输入状态以感知环境。
2. 有策略规定需要采取什么措施。 这些策略具有决策功能。 使用这些策略根据输入状态确定操作。
......@@ -73,7 +73,7 @@ RL 系统可以同时执行多个事情–通过执行试错搜索来学习,
# 创建环境
我们将使用名为 **OpenAI Gym** 的程序包来构建 RL 代理[您可以在此处了解更多有关的信息](https://gym.openai.com)。 可以通过运行以下命令使用`pip`进行安装:
我们将使用名为 **OpenAI Gym** 的程序包来构建 RL 智能体[您可以在此处了解更多有关的信息](https://gym.openai.com)。 可以通过运行以下命令使用`pip`进行安装:
```py
$ pip3 install gym
......@@ -319,6 +319,6 @@ $ python3 balancer.py --input-env cartpole
在本章中,我们了解了 RL 系统。 我们讨论了 RL 的前提以及如何设置它。 我们讨论了 RL 和监督学习之间的区别。 我们浏览了一些真实的 RL 示例,并了解了各种系统如何以不同形式使用它。
我们讨论了 RL 的构建块以及诸如代理,环境,策略,奖励等概念。 然后,我们在 Python 中创建了一个环境,以查看其运行情况。 最后,我们使用这些概念来构建 RL 代理
我们讨论了 RL 的构建块以及诸如代理,环境,策略,奖励等概念。 然后,我们在 Python 中创建了一个环境,以查看其运行情况。 最后,我们使用这些概念来构建 RL 智能体
在下一章中,我们将进入一个截然不同的主题,并学习大数据技术如何帮助我们使机器学习系统更强大,更高效。
\ No newline at end of file
......@@ -73,7 +73,7 @@ Google 提供这些答案的基本技术之一就是通常所说的大数据。
为了让 Google 提供结果,它需要知道可用的内容。 并没有神奇的中央存储库,它具有所有网页和网站,因此 Google 会不断搜索新的网站和页面,并将它们添加到其已知页面列表中。 此发现过程称为爬网。
有些页面在 Google 的网站列表中,因为 Google 以前已经对其进行了爬网。 当 Google 跟踪从已知页面到新页面的链接时,就会发现某些页面。 网站所有者或代理商提交网站以使 Google 知道该网站及其站点地图时,还会发现其他页面。
有些页面在 Google 的网站列表中,因为 Google 以前已经对其进行了爬网。 当 Google 跟踪从已知页面到新页面的链接时,就会发现某些页面。 网站所有者或智能体提交网站以使 Google 知道该网站及其站点地图时,还会发现其他页面。
## 索引
......
......@@ -545,7 +545,7 @@ The benefits of batch normalization are as follows:
* **减少内部协变量偏移**:批量规范化有助于我们通过归一化值来减少内部协变量偏移。
* **更快的训练**:如果从正态/高斯分布中采样值 ,则网络将更快地训练。 批量规范化有助于将值白化到我们网络的内部层。 总体训练速度更快,但是由于涉及额外的计算,因此每次迭代都会变慢。
* **更高的准确性**:批量规范化提供了更好的准确性。
* **较高的学习率**:通常,当我们训练神经网络时,我们使用较低的学习率,这需要很长时间才能收敛网络。 通过批量规范化,我们可以使用更高的学习率,从而使我们的网络更快地达到全最低水平。
* **较高的学习率**:通常,当我们训练神经网络时,我们使用较低的学习率,这需要很长时间才能收敛网络。 通过批量规范化,我们可以使用更高的学习率,从而使我们的网络更快地达到全最低水平。
* **减少了丢弃法的需求**:当我们使用丢弃时,我们会破坏网络内部层中的一些基本信息。 批量规范化充当一个正则化器,这意味着我们可以训练网络而无需退出层。
在批量规范化中,我们将规范化应用于所有隐藏层,而不是仅将其应用于输入层。
......
......@@ -1917,7 +1917,7 @@ for epoch in range(epochs):
save_rgb_img(img, "results2/gen_{}_{}.png".format(epoch, i))
```
此处,`save_rgb_img()`实用程序功能,在“训练第一阶段 StackGAN 部分”中定义。
此处,`save_rgb_img()`工具功能,在“训练第一阶段 StackGAN 部分”中定义。
12. 最后,保存模型或其权重值:
......
......@@ -444,7 +444,7 @@ P(more than 10 trains) = 0.49668918740243756
P(more than 11 trains) = 0.3780218948425254
```
使用新的数据集,观察到 9 列以上火车的概率约为 62% (这证实了我们的最初选择),但是现在观察到 10 列以上火车的概率约为 50%。 由于我们不想冒险支付罚款(高于代理商的费用),因此最好派出一组 10 名代理商。 为了进一步确认,我们决定从分布中抽取 2,000 个值,如下所示:
使用新的数据集,观察到 9 列以上火车的概率约为 62% (这证实了我们的最初选择),但是现在观察到 10 列以上火车的概率约为 50%。 由于我们不想冒险支付罚款(高于智能体的费用),因此最好派出一组 10 名智能体。 为了进一步确认,我们决定从分布中抽取 2,000 个值,如下所示:
```py
syn = poisson.rvs(mu, size=2000)
......@@ -493,7 +493,7 @@ syn = poisson.rvs(mu, size=2000)
强化学习的一个非常经典的例子是学习如何玩游戏的代理。 在情节期间,代理会在所有遇到的状态下测试动作并收集奖励。 一种算法会纠正该策略,以减少非积极行为(即那些奖励为正的行为)的可能性,并增加在情节结束时可获得的预期总奖励。
强化学习有许多有趣的应用,而不仅限于游戏。 例如,推荐系统可以根据用户提供的二进制反馈(例如,拇指向上或向下)来校正建议。 强化学习和监督学习之间的主要区别是环境提供的信息。 实际上,在有监督的情况下,校正通常与校正成比例,而在强化学习中,必须考虑一系列操作和将来的奖励来进行分析。 因此,校正通常基于预期奖励的估计,并且其效果受后续操作的值影响。 例如,一个受监督的模型没有记忆,因此它的修正是即时的,而强化学习代理必须考虑情节的部分推出,以便确定一个动作是否实际上是负面的。
强化学习有许多有趣的应用,而不仅限于游戏。 例如,推荐系统可以根据用户提供的二进制反馈(例如,拇指向上或向下)来校正建议。 强化学习和监督学习之间的主要区别是环境提供的信息。 实际上,在有监督的情况下,校正通常与校正成比例,而在强化学习中,必须考虑一系列操作和将来的奖励来进行分析。 因此,校正通常基于预期奖励的估计,并且其效果受后续操作的值影响。 例如,一个受监督的模型没有记忆,因此它的修正是即时的,而强化学习智能体必须考虑情节的部分推出,以便确定一个动作是否实际上是负面的。
强化学习是机器学习的一个有趣的分支。 不幸的是,该主题超出了本文的讨论范围,因此我们不对其进行详细讨论(您可以在《Python 强化学习实用指南》中找到更多详细信息)。
......
......@@ -595,7 +595,7 @@ ica.fit(faces['data'])
50 (out of 350) independent components extracted by FastICA
在这种情况下,次要特征不太占优势,因为存在更多的重叠分布,并且每个特征都集中在一个更原子的本征面上。 当然,如果没有完整的领域知识,就无法定义组件的最佳数量。 例如,对于 Olivetti 人脸数据集,识别特定的子元素(例如,眼镜的位置)或更完整的人脸表情可能会有所帮助。 在前一种情况下,更多的组件会产生更集中的解决方案(即使它们在全范围内的区别性较小),而在后一种情况下,数量较少的组件(例如上一个示例)会产生更完整的结果,可以评估不同的影响因素。 就信号而言,组件的数量应等于预期的重叠因子的数量(假设其独立性)。 例如,音频信号可以包含在机场讲话的人的录音,并带有宣布飞行的背景声音。 在这种情况下,方案可以由三个部分组成:两个声音和噪音。 由于噪声将部分分解为主要成分,因此最终数量将等于 2。
在这种情况下,次要特征不太占优势,因为存在更多的重叠分布,并且每个特征都集中在一个更原子的本征面上。 当然,如果没有完整的领域知识,就无法定义组件的最佳数量。 例如,对于 Olivetti 人脸数据集,识别特定的子元素(例如,眼镜的位置)或更完整的人脸表情可能会有所帮助。 在前一种情况下,更多的组件会产生更集中的解决方案(即使它们在全范围内的区别性较小),而在后一种情况下,数量较少的组件(例如上一个示例)会产生更完整的结果,可以评估不同的影响因素。 就信号而言,组件的数量应等于预期的重叠因子的数量(假设其独立性)。 例如,音频信号可以包含在机场讲话的人的录音,并带有宣布飞行的背景声音。 在这种情况下,方案可以由三个部分组成:两个声音和噪音。 由于噪声将部分分解为主要成分,因此最终数量将等于 2。
......@@ -781,7 +781,7 @@ print(Xl[200])
在本章中,我们介绍了可用于降维和字典学习的不同技术。 PCA 是一种非常知名的方法,涉及查找与方差较大的方向相关联的数据集的大部分导入成分。 该方法具有对角化协方差矩阵并立即测量每个特征的重要性的双重效果,从而简化了选择并最大化了剩余的解释方差(可以用较小的数字来解释的方差量) 组件)。 由于 PCA 本质上是一种线性方法,因此它通常不能与非线性数据集一起使用。 因此,已经开发了基于内核的变体。 在我们的示例中,您了解了 RBF 内核如何将非线性可分离的数据集投影到子空间,在该子空间中 PCA 可以确定判别分量。
稀疏 PCA 和字典学习是广泛使用的技术,当需要提取可以混合(以线性组合方式)的建筑原子以生成样本时,可以使用这些技术。 在许多情况下,目标是找到一个所谓的“过度完成的字典”,这相当于说我们期望比构造每个样本的实际原子更多的原子(这就是为什么表示稀疏的原因)。 尽管 PCA 可以提取不相关的成分,但很少能够找到统计上独立的成分。 因此,我们引入了 ICA 的概念,该技术是为了从可以被认为是独立原因(例如,声音或视觉元素)之和的样本中提取重叠源而开发的。 具有特殊功能的另一种方法是 NNMF,它既可以生成稀疏表示,又可以生成类似于样本特定部分的一组组件(例如,对于人脸,它们可以表示眼睛,鼻子等)。 最后一部分介绍了 LDA 的概念,LDA 是一种主题建模技术,可以在给定文档主体(即文档属于每个特定主题的概率)的情况下查找主题组合。
稀疏 PCA 和字典学习是广泛使用的技术,当需要提取可以混合(以线性组合方式)的构建原子以生成样本时,可以使用这些技术。 在许多情况下,目标是找到一个所谓的“过度完成的字典”,这相当于说我们期望比构造每个样本的实际原子更多的原子(这就是为什么表示稀疏的原因)。 尽管 PCA 可以提取不相关的成分,但很少能够找到统计上独立的成分。 因此,我们引入了 ICA 的概念,该技术是为了从可以被认为是独立原因(例如,声音或视觉元素)之和的样本中提取重叠源而开发的。 具有特殊功能的另一种方法是 NNMF,它既可以生成稀疏表示,又可以生成类似于样本特定部分的一组组件(例如,对于人脸,它们可以表示眼睛,鼻子等)。 最后一部分介绍了 LDA 的概念,LDA 是一种主题建模技术,可以在给定文档主体(即文档属于每个特定主题的概率)的情况下查找主题组合。
在下一章中,我们将介绍一些基于无监督范式的神经模型。 特别地,将讨论可以在没有协方差矩阵的特征分解(或 SVD)的情况下提取数据集主成分的深度置信网络,自编码器和模型。
......
......@@ -32,7 +32,7 @@
* Matplotlib 2.0+
* Seaborn 0.9+
* TensorFlow 1.5+
* Keras 2+(仅适用于数据集实用程序功能)
* Keras 2+(仅适用于数据集工具功能)
[可以在 GitHub 存储库中找到这些示例](https://github.com/PacktPublishing/HandsOn-Unsupervised-Learning-with-Python/tree/master/Chapter09)
......@@ -662,7 +662,7 @@ with graph.as_default():
minimize(loss=loss_g, var_list=variables_g)
```
通常,第一步是声明占位符,该占位符与 DCGAN 相同。 但是,由于已经针对 64×64 图像优化了模型(特别是卷积或转置卷积的序列),因此我们将使用`tf.image.resize_images()`方法来调整原始样本的大小。 此操作将导致有限的质量损失; 因此,在生产应用中,我强烈建议您使用针对原始输入尺寸优化的模型。 在生成器和注释器都声明之后(如我们在上一个示例中讨论的那样,由于需要分别优化损失函数,因此我们需要两个实例共享相同的变量),我们可以设置损失。 在这种情况下,它们的计算非常简单且快速,但是我们为此付出了代价,并为此网络可以应用更小的校正。 实际上,在这种情况下,我们并没有直接最小化批评者损失函数; 相反,我们首先使用算子`optimizer_c`计算并应用梯度,然后使用算子`training_step_c`裁剪所有评论者变量。 因为我们只想调用此运算符,所以已在使用指令`tf.control_dependencies([optimizer_c])`定义的上下文中声明了它。 这样,当请求一个会话来计算`traning_step_c`时,TensorFlow 将注意首先运行`optimizer_c`,但是只有在结果准备好后,才会执行 main 命令(简单地裁剪变量)。 正如我们在理论中所解释的那样,此步骤对于保证评论者仍然具有 L-Lipschitz 函数是必要的,因此,允许使用从 Kantorovich-Rubinstein 定理得到的简化 Wasserstein 距离表达式。
通常,第一步是声明占位符,该占位符与 DCGAN 相同。 但是,由于已经针对 64×64 图像优化了模型(特别是卷积或转置卷积的序列),因此我们将使用`tf.image.resize_images()`方法来调整原始样本的大小。 此操作将导致有限的质量损失; 因此,在生产应用中,我强烈建议您使用针对原始输入尺寸优化的模型。 在生成器和注释器都声明之后(如我们在上一个示例中讨论的那样,由于需要分别优化损失函数,因此我们需要两个实例共享相同的变量),我们可以设置损失。 在这种情况下,它们的计算非常简单且快速,但是我们为此付出了代价,并为此网络可以应用更小的校正。 实际上,在这种情况下,我们并没有直接最小化批评者损失函数; 相反,我们首先使用运算符`optimizer_c`计算并应用梯度,然后使用运算符`training_step_c`裁剪所有评论者变量。 因为我们只想调用此运算符,所以已在使用指令`tf.control_dependencies([optimizer_c])`定义的上下文中声明了它。 这样,当请求一个会话来计算`traning_step_c`时,TensorFlow 将注意首先运行`optimizer_c`,但是只有在结果准备好后,才会执行 main 命令(简单地裁剪变量)。 正如我们在理论中所解释的那样,此步骤对于保证评论者仍然具有 L-Lipschitz 函数是必要的,因此,允许使用从 Kantorovich-Rubinstein 定理得到的简化 Wasserstein 距离表达式。
当图形完全定义后,可以创建一个会话并初始化所有变量,如下所示:
......
......@@ -79,7 +79,7 @@ bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
sudo pip install --upgrade /tmp/tensorflow_pkg/tensorflow-1.4.0-cp27-cp27m-macosx_10_12_intel.whl
```
老实说,如果您在此过程中遇到任何错误,则搜索错误消息应该是修复该错误的最佳方法,因为我们打算在本书中重点介绍从我们长期积累的技巧和知识,从数小时的构建和调试实用的移动 TensorFlow 应用中获取,它们在其他地方不易获得。 运行`sudo pip install`命令时,您可能会看到的一个特定错误是`Operation not permitted`错误。 要解决此问题,您可以通过重新启动 Mac 并点击`Cmd + R`键来禁用 Mac 的**系统完整性保护****SIP**) 要进入恢复模式,请在实用程序终端下,在重新启动 Mac 之前运行`csrutil disable`。 如果您对禁用 SIP 不满意,可以按照 TensorFlow 文档尝试使用更复杂的安装方法之一,例如 VirtualEnv。
老实说,如果您在此过程中遇到任何错误,则搜索错误消息应该是修复该错误的最佳方法,因为我们打算在本书中重点介绍从我们长期积累的技巧和知识,从数小时的构建和调试实用的移动 TensorFlow 应用中获取,它们在其他地方不易获得。 运行`sudo pip install`命令时,您可能会看到的一个特定错误是`Operation not permitted`错误。 要解决此问题,您可以通过重新启动 Mac 并点击`Cmd + R`键来禁用 Mac 的**系统完整性保护****SIP**) 要进入恢复模式,请在工具终端下,在重新启动 Mac 之前运行`csrutil disable`。 如果您对禁用 SIP 不满意,可以按照 TensorFlow 文档尝试使用更复杂的安装方法之一,例如 VirtualEnv。
如果一切顺利,则应该能够在终端窗口,Python 或最好在 IPython 上运行,然后运行`import tensorflow as tf``tf.__version__`将 1.4.0 作为输出。
......
......@@ -490,7 +490,7 @@ pod 'TensorFlow-experimental'
![](img/b89b3444-a6a9-45b4-bb02-ddf8388a6992.png)
图 2.6:添加实用程序文件,模型文件,标签文件和图像文件
图 2.6:添加工具文件,模型文件,标签文件和图像文件
6.`ViewController.m`重命名为`ViewController.mm`,因为我们将在该文件中混合使用 C++ 代码和 Objective-C 代码来调用 TensorFlow C++ API 并处理图像输入和推断结果。 然后,在`@interface ViewController`之前,添加以下`#include`和函数原型:
......@@ -679,7 +679,7 @@ pod 'TensorFlow-experimental'
![](img/8236a55a-15fe-41a1-9ff7-c7280ae6c43f.png)
图 2.10:添加实用程序文件,模型文件,标签文件和图像文件
图 2.10:添加工具文件,模型文件,标签文件和图像文件
6. 使用以下代码创建一个名为`RunInference.h`的新文件(一个窍门是,我们必须在下一步中使用 Objective-C 类作为`RunInferenceOnImage`方法的包装,以便我们的 Swift 代码进行间接调用) 。否则,将发生构建错误):
......
......@@ -670,7 +670,7 @@ obs, reward, done, info = env.step(0)
环境决定何时将`done`返回`True`时会有一些延迟-尽管前两个步骤已经返回了大于 15 度的度数(当极点与垂直线成 15 度以上时,情节结束了) ,您仍然可以对环境执行 0 操作。 第三步将`done`返回为`True`,并且环境中的另一步骤(最后一步)将导致警告,因为环境已经完成了该情节。
对于 CartPole 环境,每个`step`调用返回的`reward`值始终为 1,信息始终为{}。 这就是关于 CartPole 模拟环境的全部知识。 现在我们了解了 CartPole 的工作原理,让我们看看可以在每种状态(观察)下制定什么样的策略,我们可以让该策略告诉我们要采取的操作(步骤),以便我们可以保持杆直立。换句话说,就是尽可能长的时间,这样我们才能最大化我们的回报。 请记住,强化学习中的一项策略只是一项功能,该功能以代理商所处的状态为输入,并输出代理商接下来应采取的行动,以实现价值最大化或长期回报。
对于 CartPole 环境,每个`step`调用返回的`reward`值始终为 1,信息始终为{}。 这就是关于 CartPole 模拟环境的全部知识。 现在我们了解了 CartPole 的工作原理,让我们看看可以在每种状态(观察)下制定什么样的策略,我们可以让该策略告诉我们要采取的操作(步骤),以便我们可以保持杆直立。换句话说,就是尽可能长的时间,这样我们才能最大化我们的回报。 请记住,强化学习中的一项策略只是一项功能,该功能以智能体所处的状态为输入,并输出智能体接下来应采取的行动,以实现价值最大化或长期回报。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册