提交 9edcf689 编写于 作者: W wizardforcel

2021-01-23 23:03:34

上级 20555ac9
......@@ -272,7 +272,7 @@ def get_screen():
return resize(screen).unsqueeze(0).to(device) # Resize, and add a batch dimension (BCHW)
```
在这里,我们定义了`get_screen`函数。 柱状环境渲染并返回一个屏幕(3D 像素数组)。 我们将要剪裁一个正方形的图像,其中心是小刀。 我们从`env.state[0]`获得了位置。 根据文档,第一个参数是购物车位置。 然后我们去掉顶部,底部,左侧和右侧,以使小柱位于中心。 接下来,我们将其转换为张量,进行一些转换,添加另一个尺寸,然后返回图像。
在这里,我们定义了`get_screen`函数。 柱状环境渲染并返回一个屏幕(3D 像素数组)。 我们将要剪裁一个正方形的图像,其中心是小刀。 我们从`env.state[0]`获得了位置。 根据文档,第一个参数是车位置。 然后我们去掉顶部,底部,左侧和右侧,以使小柱位于中心。 接下来,我们将其转换为张量,进行一些转换,添加另一个尺寸,然后返回图像。
```py
class DQN(nn.Module):
......
......@@ -8,7 +8,7 @@
**任务**
代理商必须在两个动作之间做出决定-向左或向右移动购物车-以便使与之相连的电线杆保持直立。 您可以在 [Gym 网站](https://gym.openai.com/envs/CartPole-v0)上找到具有各种算法和可视化效果的官方排行榜。
代理商必须在两个动作之间做出决定-向左或向右移动推车-以便使与之相连的杆子保持直立。 您可以在 [Gym 网站](https://gym.openai.com/envs/CartPole-v0)上找到具有各种算法和可视化效果的官方排行榜。
![cartpole](img/fed25c69a6015a90b6e9406e4ac6e01c.png)
......@@ -16,7 +16,7 @@
当代理观察环境的当前状态并选择一个动作时,环境*会转换为*到新状态,并且还会返回表示该动作后果的奖励。 在此任务中,每增加一个时间步长,奖励为 +1,并且如果杆子掉落得太远或手推车离中心的距离超过 2.4 个单位,则环境终止。 这意味着性能更好的方案将持续更长的时间,从而积累更大的回报。
对 CartPole 任务进行了设计,以使对代理的输入是代表环境状态(位置,速度等)的 4 个实际值。 但是,神经网络可以完全通过查看场景来解决任务,因此我们将以购物车为中心的一部分屏幕作为输入。 因此,我们的结果无法直接与官方排行榜上的结果进行比较-我们的任务更加艰巨。 不幸的是,这确实减慢了训练速度,因为我们必须渲染所有帧。
对 CartPole 任务进行了设计,以使对代理的输入是代表环境状态(位置,速度等)的 4 个实际值。 但是,神经网络可以完全通过查看场景来解决任务,因此我们将以车为中心的一部分屏幕作为输入。 因此,我们的结果无法直接与官方排行榜上的结果进行比较-我们的任务更加艰巨。 不幸的是,这确实减慢了训练速度,因为我们必须渲染所有帧。
严格来说,我们将状态显示为当前屏幕补丁与前一个屏幕补丁之间的差异。 这将允许代理从一张图像中考虑极点的速度。
......
......@@ -268,7 +268,7 @@ class Agent:
```
使用批量时,状态以观察者 id 为行 ID 存储在 2D 张量`self.states`中。 然后,它通过将回调函数安装到批量生成的`self.future_actions` `Future`对象上来链接`Future`,该对象将使用使用该观察者 ID 索引的特定行进行填充。 最后到达的观察者一口气通过策略运行所有批量状态,并相应地设置`self.future_actions`。 发生这种情况时,将触发安装在`self.future_actions`上的所有回调函数,并使用它们的返回值来填充链接的`Future`对象,该对象进而通知`Agent`为所有先前的 RPC 请求准备和传达响应 来自其他观察者
使用批量时,状态以观察者 id 为行 ID 存储在 2D 张量`self.states`中。 然后,它通过将回调函数安装到批量生成的`self.future_actions` `Future`对象上来链接`Future`,该对象将使用使用该观察者 ID 索引的特定行进行填充。 最后到达的观察者一口气通过策略运行所有批量状态,并相应地设置`self.future_actions`。 发生这种情况时,将触发安装在`self.future_actions`上的所有回调函数,并使用它们的返回值来填充链接的`Future`对象,该对象进而通知`Agent`为所有先前的 RPC 请求准备和传达来自其他观察者的响应
```py
class Agent:
......
......@@ -326,7 +326,7 @@ ReLU 的导数图,对于`x <= 0`,`f'(x) = 1`,对于`x > 0`,`f'(x) = 0`
1. 初始化学习率`α`和时期数`e`的值
2. 循环遍历多个时期`e`'(每次完整的数据集将分批通过)
3.`J`(成本函数)和`b`(偏差)初始化为 0,对于`W1``W2`,您可以使用随机法线 **xavier 初始化**(在下一节中说明)
3.`J`(成本函数)和`b`(偏差)初始化为 0,对于`W1``W2`,您可以使用随机正态**xavier 初始化**(在下一节中说明)
在此,`a``y_hat``dw1``∂J/∂w[1]``dw2``∂J/∂w[2]``db``∂J/∂b`。 每个迭代都包含一个循环遍历`m`个示例的循环。
......@@ -499,7 +499,7 @@ Xavier 初始化是神经网络中权重的初始化,是遵循高斯分布的
![](img/93dd25ec-59c7-4c71-82b3-ce6a8f7fe21d.png)
一旦完成计算直到最后一个时间步,我们的前向传播任务就完成了。 下一个任务是通过反向传播来训练我们的循环神经网络,以使总损失最小化。 一个这样的序列的总损失是所有时间步长上损失的总和,也就是说,如果给定的`X`值序列及其对应的`Y`值输出序列,则损失 是(谁)给的
一旦完成计算直到最后一个时间步,我们的前向传播任务就完成了。 下一个任务是通过反向传播来训练我们的循环神经网络,以使总损失最小化。 一个这样的序列的总损失是所有时间步长上损失的总和,也就是说,给定`X`值序列及其对应的`Y`值输出序列,损失如下
![](img/db611e16-6507-40be-a626-26d9096b2a64.png)
......
......@@ -154,7 +154,7 @@ FFFH
HFFG
```
在任何给定状态下,代理都有四个要执行的动作,分别是上,下,左和右。 除了导致目标状态的那一步外,每一步的奖励都是 0,那么奖励将是 1。我们从`S`状态开始,我们的目标是达到`G`状态而不以最优化的路径降落到`H`状态 通过`F`状态。
在任何给定状态下,代理都有四个要执行的动作,分别是上,下,左和右。 除了导致目标状态的那一步外,每一步的奖励都是 0,那么奖励将是 1。我们从`S`状态开始,我们的目标是达到`G`状态而不以最优化的路径通过`F`状态降落到`H`状态。
# Q 学习
......
......@@ -71,7 +71,7 @@ MDP 试图通过将网格划分为状态,动作,模型/转换模型和奖励
这两种情况的行为取决于某些因素:
* **确定的环境**:在确定的环境中,如果您采取某种行动,例如说`UP`,则您肯定会以概率 1 执行该行动。
* **随机环境**:在随机环境中,如果您执行相同的操作(例如说`UP`),则有一定的概率说 0.8 可以实际执行给定的操作,而有 0.1 的概率可以执行 垂直于给定动作`UP`动作(`LEFT``RIGHT`)。 在此,对于`s`状态和`UP`动作转换模型,`T(s', UP, s) = P(s' | s, UP) = 0.8`
* **随机环境**:在随机环境中,如果您执行相同的操作(例如说`UP`),则有一定的概率说 0.8 可以实际执行给定的操作,而有 0.1 的概率可以执行垂直于给定`UP`动作的动作(`LEFT``RIGHT`)。 在此,对于`s`状态和`UP`动作转换模型,`T(s', UP, s) = P(s' | s, UP) = 0.8`
由于`T(s, a, s') ~ P(s' | s, a)`,因此新状态的概率仅取决于当前状态和操作,而与过去状态无关。 因此,转移模型遵循一阶马尔可夫性质。
......
......@@ -95,7 +95,7 @@
结果,它将以更少的步骤达到目标状态,因为西方和东方都将具有相同的发生概率。 因此,与基于值的强化学习方法相比,不同的灰色阴影状态可能会随机发生不同的动作,从而导致目标状态更快。 因此,基于策略的强化学习可以学习最佳的随机策略。
因此,从前面的示例中,我们已经知道,每当发生状态别名时,随机策略都可以执行得更好。 因此,只要存在状态混叠的情况(即环境的表示),就会部分观察状态(例如,您处于部分可观察的马尔可夫决策过程中)或函数逼近器使用状态的特征,这会限制 从环境的整体角度来看,使用基于随机策略的基于策略的方法要比基于价值的方法要好。
因此,从前面的示例中,我们已经知道,每当发生状态别名时,随机策略都可以执行得更好。 因此,只要存在状态混叠的情况(即环境的表示),就会部分观察状态(例如,您处于部分可观察的马尔可夫决策过程中)或函数逼近器使用状态的特征,这会限制环境的整体视角,使用基于随机策略的基于策略的方法要比基于价值的方法要好。
# 策略目标函数
......@@ -107,7 +107,7 @@
![](img/01578517-3d8f-4227-a234-94a8e6fc9985.png)
* 如果是连续环境,则`J(θ)`可以是状态的平均值函数。 因此,如果环境持续不断,那么策略质量的衡量标准可以是处于任何状态`s`的概率之和,该概率是`d[π[θ]](s)`乘以该状态的值 也就是说,从该状态开始的预期奖励。 因此,
* 如果是连续环境,则`J(θ)`可以是状态的平均值函数。 因此,如果环境持续不断,那么策略质量的衡量标准可以是处于任何状态`s`的概率之和,该概率是`d[π[θ]](s)`乘以该状态的值也就是说,从该状态开始的预期奖励。 因此,
![](img/2cfba9ad-f36c-4239-80f2-8c4acd2b5738.png)
......@@ -190,7 +190,7 @@ Episode T
由于这些更新针对所有状态独立发生,因此可以针对所有状态并行执行这些操作。
在完成情节的最后一步之后扩展每个州的计算值估计值时,我们发现基于值的更新与基于结果的更新相同,例如在蒙特卡洛方法中,我们会进行全面的展望,直到 剧集的结尾。 因此,我们需要一种更好的方法来更新我们的值函数估计值,而无需多做一步。 通过合并`TD(0)`规则,我们可以解决此问题。
在完成情节的最后一步之后扩展每个州的计算值估计值时,我们发现基于值的更新与基于结果的更新相同,例如在蒙特卡洛方法中,我们会进行全面的展望,直到剧集的结尾。 因此,我们需要一种更好的方法来更新我们的值函数估计值,而无需多做一步。 通过合并`TD(0)`规则,我们可以解决此问题。
# `TD(0)`规则
......@@ -474,7 +474,7 @@ def discount_rewards(r):
return discount_r
```
* **正向传播**`policy_forward(x)`函数接收预处理的图像向量`x`,返回动作概率为`UP`,并且向量包含隐藏状态节点的值,以下代码:
* **正向传播**`policy_forward(x)`函数接收预处理的图像向量`x`,返回动作概率为`UP`,并且向量包含隐藏状态节点的值,例如以下代码:
```py
def policy_forward(x):
......
......@@ -31,14 +31,14 @@ DeepMind 在研究期刊 **Nature** 上发表了他们的论文[《通过深度
此处的训练数据是连续的,新的框架在游戏世界中不断出现。 现在,问问自己我们人类如何学习这项任务,答案很简单,即我们通过与环境交互而不是看着其他人与环境交互来学习最好。 因此,AI 代理可以尝试通过与环境交互来更好地学习,并通过一系列的反复试验来逐步发展其学习成果。
在现实世界和游戏世界中,环境通常是*随机*,其中可能发生许多事件。 由于所有事件都与某种发生概率相关联,因此可以对它们进行统计分析,但不能精确确定。 假设在给定的`e`环境中,我们只有三个动作来执行`a``b``c`,但是每个动作都有一些 与之相关的某种不确定性,即它们的出现机会是随机的,并且它们中的任何一个都可以发生,但是每个结果都不确定。 对于监督分类问题,我们认为环境是确定性的,其中确定了与特定动作相关的结果,并且结果是精确的预测,即特定类别(目标标签)。 在继续讨论该主题之前,让我们看一下两种环境之间的区别:
在现实世界和游戏世界中,环境通常是*随机*,其中可能发生许多事件。 由于所有事件都与某种发生概率相关联,因此可以对它们进行统计分析,但不能精确确定。 假设在给定的`e`环境中,我们只有三个动作来执行`a``b``c`,但是每个动作都有一些与之相关的某种不确定性,即它们的出现机会是随机的,并且它们中的任何一个都可以发生,但是每个结果都不确定。 对于监督分类问题,我们认为环境是确定性的,其中确定了与特定动作相关的结果,并且结果是精确的预测,即特定类别(目标标签)。 在继续讨论该主题之前,让我们看一下两种环境之间的区别:
* **确定性环境**:由于没有不确定性,代理的动作可以唯一地确定结果的环境。 例如,在国际象棋中,您将一块从一个正方形移到另一个正方形。 因此,确定结果,即结果平方。 没有随机性。
* **随机环境**:每个动作都与某种程度的随机性相关联的环境,因此,无论我们采取何种行动,都无法确定结果。 例如,将飞镖投掷到旋转的棋盘上或掷骰子。 在这两种情况下,结果均不确定。
因此,对于基于随机环境的问题,似乎最好的学习方法是尝试各种可能性。 因此,与其通过监督分类将其解决为模式识别问题,不如通过试错法更好,在这种方法中,结果标签将替换为量化特定操作对完成给定问题的最终目的的有用性的奖励。 声明。
这产生了环境-代理交互方法,我们在第 1 章,“深度强化–架构和框架”中讨论了该方法,在该系统中,我们设计了一种使代理与环境交互的系统 首先,通过传感器感知状态,通过效应器对环境执行一些操作,然后接收反馈,即对所采取操作的奖励,如下图所示:
这产生了环境-代理交互方法,我们在第 1 章,“深度强化–架构和框架”中讨论了该方法,在该系统中,我们设计了一种使代理与环境交互的系统 首先,通过传感器感知状态,通过效应器对环境执行一些操作,然后接收反馈,即对所采取操作的奖励,如下图所示:
![](img/c7f38da6-965e-4b9f-9149-bc088223f8bd.png)
......@@ -331,9 +331,9 @@ Episode 10 completed with total reward 222.356805259 in 843 steps
# 深度 Q 网络
如果我们回想起第 2 章和“使用 OpenAI Gym 训练强化学习智能体”,我们曾尝试在其中实现基本的 Q 网络,那么我们就针对一个实际问题研究了 Q 学习 由于连续的状态和动作空间,使用 Q 表不是可行的解决方案。 而且,Q 表是特定于环境的,而不是通用的。 因此,我们需要一个模型,该模型可以将作为输入提供的状态信息映射到可能的一组动作的 Q 值。 在这里,神经网络开始发挥函数逼近器的作用,函数逼近器可以接受向量形式的状态信息输入,并学习将其映射为所有可能动作的 Q 值。
如果我们回想起第 2 章和“使用 OpenAI Gym 训练强化学习智能体”,我们曾尝试在其中实现基本的 Q 网络,之后我们针对一个实际问题研究了 Q 学习。 由于连续的状态和动作空间,使用 Q 表不是可行的解决方案。 而且,Q 表是特定于环境的,而不是通用的。 因此,我们需要一个模型,该模型可以将作为输入提供的状态信息映射到可能的一组动作的 Q 值。 在这里,神经网络开始发挥函数逼近器的作用,函数逼近器可以接受向量形式的状态信息输入,并学习将其映射为所有可能动作的 Q 值。
让我们讨论游戏环境中的 Q 学习问题以及深度 Q 网络的发展。 考虑将 Q 学习应用于游戏环境,该状态将由玩家,障碍物,对手等的位置来定义,但这将是特定于游戏的,即使在我们创建时也不能在其他游戏环境中推广 一个以某种方式表示该游戏所有可能状态的 Q 表
让我们讨论游戏环境中的 Q 学习问题以及深度 Q 网络的发展。 考虑将 Q 学习应用于游戏环境,该状态将由玩家,障碍物,对手等的位置来定义,但这将是特定于游戏的,即使在我们创建一个以某种方式表示该游戏所有可能状态的 Q 表,也不能在其他游戏环境中推广
好吧,游戏环境有一个共同点,那就是全部由像素组成。 如果可以将像素输入可以映射到动作的模型中,则可以在所有游戏中将其推广。 DeepMind 的卷积神经网络实现具有游戏图像帧,其中输入和输出是该环境中每个可能动作的 Q 值。 卷积神经网络由三个卷积层和两个全连接层组成。 **卷积神经网络****CNN**)的一个元素是池化层,在此已避免。 使用池化层的主要原因是在图像中进行对象检测的情况下,其中图像中对象的位置并不重要,而在此处,在游戏框架中对象的位置非常重要时,则不然。
......@@ -571,7 +571,7 @@ def target_params_replaced(self):
self.sess.run(self.replacing_target_parameters)
```
现在,我们将定义`store_experience(self,obs,a,r,obs_)`,该函数用于将每种体验(即(状态,动作,奖励,新状态)的元组)存储在其体验缓冲区中,通过该数组可以训练主要目标,以下代码:
现在,我们将定义`store_experience(self,obs,a,r,obs_)`,该函数用于将每种体验(即(状态,动作,奖励,新状态)的元组)存储在其体验缓冲区中,通过该数组可以训练主要目标,例如以下代码:
```py
def store_experience(self,obs,a,r,obs_):
......@@ -698,12 +698,12 @@ Episode 10 with Reward : 38.7923903502 at epsilon 0.9002 in steps 126
车杆环境中的状态是一个 4 维连续空间,其中每个维如下:
* `x`:表示购物车位置(最小值为 -2.4,最大值为 2.4)
* `x`:表示车位置(最小值为 -2.4,最大值为 2.4)
* `x_dot`:表示推车速度(最小值为`-∞`
* `theta`:显示以弧度为单位的角度(最小值为 -0.73,最大值为 0.73)
* `theta_dot`:显示角速度(最小值为`-∞`,最大值为`∞`
在给定状态下的每一步,都有两种可能的动作,即推车可以向左或向右移动,并且每一步收到的奖励为 1。这里,只要杆子靠近 垂直,购物车在边界内。 如果发生以下情况,则情节被视为结束:
在给定状态下的每一步,都有两种可能的动作,即推车可以向左或向右移动,并且每一步收到的奖励为 1。这里,只要杆子靠近垂直,推车在边界内。 如果发生以下情况,则情节被视为结束:
* 极点下降超过某个角度,即超过 ±0.20944 弧度
* 推车超出框架左侧或右侧太远,即超出 ±2.4
......@@ -749,7 +749,7 @@ Angle extreme threshold value: 0.20943951023931953
在此,观察空间的高/低值遵循以下顺序(位置,速度,角度,角速度)
下面的代码是我们创建 DQN 上一类的对象,使用 Gym 来获取 Cartpole-v0 环境以及训练代理程序以解决问题的主要部分。 在这里,我们将奖励值更新为位置与极端位置之差和角度与极端极角之差的总和,因为远离极限位置,角度将变得更小,并且更接近 到购物车的中央,因此奖励应该更高。 这样做是为了实现更好的主网络融合。 我们将使用此奖励进行学习,但是为了计算总体成功程度,我们将使用原始奖励:
下面的代码是我们创建 DQN 上一类的对象,使用 Gym 来获取 Cartpole-v0 环境以及训练代理程序以解决问题的主要部分。 在这里,我们将奖励值更新为位置与极端位置之差和角度与极端极角之差的总和,因为远离极限位置,角度将变得更小,并且更接近车的中央,因此奖励应该更高。 这样做是为了实现更好的主网络融合。 我们将使用此奖励进行学习,但是为了计算总体成功程度,我们将使用原始奖励:
```py
dqn = DQN(learning_rate=0.01,gamma=0.9,n_features=env.observation_space.shape[0],n_actions=env.action_space.n,epsilon=0.0,parameter_changing_pointer=100,memory_size=2000)
......@@ -986,7 +986,7 @@ def __init__(self,learning_rate,gamma,n_features,n_actions,epsilon,parameter_cha
```
以下代码定义了`add_layer`函数,该函数通过提供`isconv`的布尔参数来帮助根据卷积的要求创建不同的层或全连接层,如果`isconv``true`,则表示是卷积 层:
以下代码定义了`add_layer`函数,该函数通过提供`isconv`的布尔参数来帮助根据卷积的要求创建不同的层或全连接层,如果`isconv``true`,则表示是卷积层:
```py
def add_layer(self,inputs,w_shape=None,b_shape=None,layer=None,activation_fn=None,c=None,isconv=False):
......@@ -1301,11 +1301,11 @@ Episode 1003 with Reward : 1.0 at epsilon 0.0008856 in steps 232
另一个很好的例子是围棋的开放式中文游戏,其棋类复杂度为`10^360`,而棋类的复杂度为`10^123`。 由于具有如此高的复杂性,minimax 无法绘制评估函数,甚至无法创建如此大的游戏树。 因此,在《深蓝》取得成功的大约 20 年后,没有算法能够掌握围棋游戏。 原因很简单,当时的最新技术(例如 minimax)无法解决诸如围棋游戏之类具有很高复杂性的问题。 而且,解决围棋需要一种更人性化的学习方式,即基于交互。
因此,Google DeepMind 的 **AlphaGo** 被认为是最先进的 AI 代理,它能够在 2016 年使用深度强化学习成功击败 Lee Sedol,该学习用于神经网络,强化学习和 蒙特卡洛树搜索。 这是第一次以人类可以实现的方式完成 AI 任务,即通过不断的交互,并通过不断的反复试验过程来获取知识。
因此,Google DeepMind 的 **AlphaGo** 被认为是最先进的 AI 代理,它能够在 2016 年使用深度强化学习成功击败 Lee Sedol,该学习用于神经网络,强化学习和蒙特卡洛树搜索。 这是第一次以人类可以实现的方式完成 AI 任务,即通过不断的交互,并通过不断的反复试验过程来获取知识。
# 蒙特卡罗树搜索
那么,蒙特卡罗树搜索与 minimax 的方法有何不同?它如何在高度复杂的围棋游戏中进行提前计划,围棋有大量潜在的反制动作? MCTS 建立了一个看起来像游戏树的统计树,但是游戏树或 minimax 具有游戏位置,即有向图的节点中的游戏状态,在 MCTS 中,有向图的节点是该游戏的数量 状态,告诉我们成功模拟的次数(即在游戏结束时导致获胜的动作)相对于游戏状态经过的模拟总数的数量。 因此,仿真次数越多,越多的节点有机会成为仿真的一部分,从而导致收敛。 因此,每个节点的值取决于仿真次数。
那么,蒙特卡罗树搜索与 minimax 的方法有何不同?它如何在高度复杂的围棋游戏中进行提前计划,围棋有大量潜在的反制动作? MCTS 建立了一个看起来像游戏树的统计树,但是游戏树或 minimax 具有游戏位置,即有向图的节点中的游戏状态,在 MCTS 中,有向图的节点是该游戏的状态数量,告诉我们成功模拟的次数(即在游戏结束时导致获胜的动作)相对于游戏状态经过的模拟总数的数量。 因此,仿真次数越多,越多的节点有机会成为仿真的一部分,从而导致收敛。 因此,每个节点的值取决于仿真次数。
收敛后,此统计树将指导 AI 代理在每个级别上寻找最佳可能节点,并继续进行直至达到目标。 最初,统计树用于扩展,以便通过多次仿真为可能的游戏状态添加更多节点。 收集足够数量的节点后,同时开始选择更好的节点,如果节点成功实现了问题目标,则每次仿真它们的价值都会增加,从而提高了实用性。
......
......@@ -109,7 +109,7 @@ Brett Sperry 首先使用术语**实时策略**(**RTS**)作为宣传其游
自编码器的架构
此处,`X`表示输入和输出层中的节点数,它等于输入数据的特征(维度)数,而`N`表示节点数 在中间层中,它等于紧凑压缩表示形式所需的特征(尺寸)数。
此处,`X`表示输入和输出层中的节点数,它等于输入数据的特征(维度)数,而`N`表示中间层中的节点数,它等于紧凑压缩表示形式所需的特征(尺寸)数。
例如,假设您输入的是游戏环境的`28x28`像素图像,即 784 像素。 因此,示例编码器网络架构可以按以下顺序拥有节点(不必遵循该顺序):
......@@ -129,13 +129,13 @@ Brett Sperry 首先使用术语**实时策略**(**RTS**)作为宣传其游
但是,通过强化学习,不需要存储这些迹线,而且,高维和连续状态动作空间可以处理深度神经网络,该网络将其作为输入并输出最佳动作。 此外,如果状态作用空间很大,并且需要减小尺寸以进一步减少计算时间,那么使用如前所示的深层自编码器会将输入数据转换为紧凑的低维向量。
强化学习中的奖励功能必须与每个状态相关联,以使从开始状态开始的动作通过一系列中间状态导致达到目标状态,从而使预期的奖励总和最大化,从而导致 最佳路径。
强化学习中的奖励功能必须与每个状态相关联,以使从开始状态开始的动作通过一系列中间状态导致达到目标状态,从而使预期的奖励总和最大化,从而产生最佳路径。
基本的强化学习算法,例如 Q 学习和 SARSA 算法(在第 5 章,“Q 学习和深度 Q 网络”中进行了解释)在收敛时间和比率方面表现更好 与早期的在线案例学习相比
基本的强化学习算法,例如 Q 学习和 SARSA 算法(在第 5 章,“Q 学习和深度 Q 网络”中进行了解释),与早期的在线案例学习相比,在收敛时间和比率方面表现更好
此外,在深度强化学习领域中正在进行大量研究,该研究集中于使用图像进行代理感知以在更复杂的领域中更好地工作。 以前的自编码器方法有助于将非常复杂的域转换为更简单的域。 此外,学习奖励功能和自编码器的其他变体,尤其是去噪堆叠式自编码器,将进一步改善结果。
此外,使用异步或分布式多主体强化学习方法(在第 6 章,“异步方法”中讨论),其中学习代理与自己的环境副本并行工作将进一步减少 收敛时间更好的结果。
此外,使用异步或分布式多主体强化学习方法(在第 6 章,“异步方法”中讨论),其中学习代理与自己的环境副本并行工作,这将进一步减少收敛时间,并产生更好的结果。
# 总结
......
......@@ -64,7 +64,7 @@
在第 5 章, “Q 学习和深度 Q 网络”中,我们研究了游戏树和 minimax 算法。 让我们回想一下那些了解 IBM DeepBlue AI 程序背后的架构的方法。
游戏树表示游戏的完整端到端表示,其中树中的每个节点表示特定的游戏状态(位置),链接节点的边表示在先前游戏状态下所采取的动作(动作),导致 新游戏状态。 根节点代表游戏的开始,下一级别的节点代表在游戏的开始状态下采取了所有不同的可能动作之后生成的可能状态,并且类似地生成了其他层中的节点。
游戏树表示游戏的完整端到端表示,其中树中的每个节点表示特定的游戏状态(位置),链接节点的边表示在先前游戏状态下所采取的动作(动作),产生新游戏状态。 根节点代表游戏的开始,下一级别的节点代表在游戏的开始状态下采取了所有不同的可能动作之后生成的可能状态,并且类似地生成了其他层中的节点。
对于井字游戏这样的简单游戏,由于复杂度较低,因此很容易创建游戏树。 一旦游戏复杂性增加,就不可能创建游戏树。 对于国际象棋,将需要`10^120`个不同的节点来创建游戏树。 如此巨大的游戏树无法存储。
......@@ -86,7 +86,7 @@ DeepBlue 搜索国际象棋的游戏树到最低深度(因为不可能创建
在围棋的情况下,基于搜索树覆盖所有可能位置的传统 AI 方法会失败。 原因是由于`2.08 x 10^170 `可能的移动以及因此而难以评估每个可能的棋盘位置的强度,因此搜索空间极其巨大。 因此,传统的蛮力方法在围棋的巨大搜索空间中失败了。
因此,高级树搜索(例如具有深度神经网络的蒙特卡罗树搜索)被认为是捕捉人类用来玩围棋游戏的直觉的新颖方法。 这些神经网络是**卷积神经网络****CNN**),并为棋盘拍摄图像,即棋盘的描述,并通过一系列层激活它以找到最佳的 根据游戏的给定状态移动
因此,高级树搜索(例如具有深度神经网络的蒙特卡罗树搜索)被认为是捕捉人类用来玩围棋游戏的直觉的新颖方法。 这些神经网络是**卷积神经网络****CNN**),并为棋盘拍摄图像,即棋盘的描述,并根据游戏的给定状态,通过一系列层激活它来找到最佳的动作
AlphaGo 的架构中使用了两个神经网络,分别是:
......@@ -99,7 +99,7 @@ AlphaGo 使用策略和值网络的方式是将搜索树的巨大复杂性降低
人类在游戏寿命方面存在弱点,也就是说,他们在长时间比赛中会感到疲倦,从而导致失误,而这并不是计算机的问题。 而且,人类的时间有限。 他们一生可以玩大约数千场围棋游戏,而 AlphaGo 一天可以玩一百万场游戏。 因此,经过足够的处理,足够的训练,足够的搜索和足够的计算能力,AlphaGo 击败了世界上最好的专业围棋选手。
因此,应对给定的围棋极大复杂性也可以为在医学中使用这种方法铺平道路,通过深度强化学习来帮助患者接受个性化治疗,以了解治疗顺序,从而可以根据 患者的病史和生物学史
因此,应对给定的围棋极大复杂性也可以为在医学中使用这种方法铺平道路,通过深度强化学习来帮助患者接受个性化治疗,从而可以根据患者的病史和生物学史来产生最佳结果
# 蒙特卡罗树搜索
......@@ -124,7 +124,7 @@ AlphaGo 之前的围棋 AI 程序完全依赖于蒙特卡洛树搜索。 这些
策略网络并入当前游戏状态,并输出给定​​状态下每个可能动作的概率。 具有较高概率的动作有较高的获胜机会。 首先,使用专家玩家玩游戏的数据集,通过监督学习来训练策略网络。 输入数据包含游戏板的图像,输出将采取的措施。 来自 160000 个专家游戏的大约 3000 万个棋盘位置的训练数据集最初用于训练 AlphaGo 的策略网络。 在专家数据集上进行训练后,通过自我扮演改进了预测可能学习到的动作的模型,在自我扮演的过程中,它与自身无数次比赛,以使用策略梯度从过去的错误中学习。 因此,策略网络通过提供可能采取行动的可能性来帮助减少候选行动。
值网络提供当前状态的估计值,该值是黑人玩家在当前状态下赢得比赛的概率。 策略和值网络的输入与当前游戏状态(具有当前石头位置的棋盘游戏的图像)相同。 策略网络的输出是获胜的概率。 因此,值网络的作用类似于评估功能,该功能是通过 3000 万个董事会职位的监督学习集获得的。
值网络提供当前状态的估计值,该值是黑人玩家在当前状态下赢得比赛的概率。 策略和值网络的输入与当前游戏状态(具有当前石头位置的棋盘游戏的图像)相同。 策略网络的输出是获胜的概率。 因此,值网络的作用类似于评估功能,该功能是通过 3000 万个棋盘位置的监督学习集获得的。
因此,值网络输出直觉(赢和输的机会),而策略网络输出反思(训练游戏知识)。 因此,AlphaGo 中直觉和反射的混合使其比任何基于搜索的方法都强大。 但是在 AlphaGo 中,这些网络可根据所开发的直觉和学习的反射来帮助更快,优化树搜索。
......@@ -136,9 +136,9 @@ AlphaGo 的神经网络训练流水线和架构,摘录自 Google DeepMind 的
让我们讨论前面详细显示的 AlphaGo 的神经网络架构图:
* `a`:快速部署策略`ρ[π]`和监督学习策略网络`ρ[σ]`受过专家训练 播放包含 3000 万个董事会职位的数据集,以像人类专家一样学习预测动作。 通过学习的监督学习策略网络的权重初始化强化学习策略网络,并通过使用策略梯度来最大化策略质量,从而改进其策略`ρ[ρ]`策略网络的早期版本。 通过使用此更新的策略网络进行自我播放,将生成一个新的数据集。 数据集包含棋盘位置的图像及其相应的最终结果,即获胜或失败。 最后,使用该自玩数据集通过回归训练值网络`ν[θ]`,以输出获胜的概率。
* `a`:快速部署策略`ρ[π]`和监督学习策略网络`ρ[σ]`在包含 3000 万个棋盘位置的数据集上接受专家训练,以像人类专家一样学习预测动作。 通过学习的监督学习策略网络的权重初始化强化学习策略网络,并通过使用策略梯度来最大化策略质量,从而改进其策略`ρ[ρ]`策略网络的早期版本。 通过使用此更新的策略网络进行自我播放,将生成一个新的数据集。 数据集包含棋盘位置的图像及其相应的最终结果,即获胜或失败。 最后,使用该自玩数据集通过回归训练值网络`ν[θ]`,以输出获胜的概率。
* `b`:该流程的架构流程,其中策略网络将棋盘位置(游戏状态)的图像表示作为输入,并通过参数`σ`的卷积层传播(如果它 是一个有监督的学习策略网络)或`ρ`(如果它是强化学习策略网络),并针对所有可能的动作`a`返回概率分布`p[σ](a | s)``p[ρ](a | s)`输出。 值网络还使用参数`θ`的许多卷积层,返回标量值`v[θ](s')`,该标量值表示在给定位置`s'`中获胜或失败的结果(最终结果)的概率:
* `b`:该流程的架构流程,其中策略网络将棋盘位置(游戏状态)的图像表示作为输入,并通过参数`σ`的卷积层传播(如果它是一个有监督的学习策略网络)或`ρ`(如果它是强化学习策略网络),并针对所有可能的动作`a`返回概率分布`p[σ](a | s)``p[ρ](a | s)`输出。 值网络还使用参数`θ`的许多卷积层,返回标量值`v[θ](s')`,该标量值表示在给定位置`s'`中获胜或失败的结果(最终结果)的概率:
![](img/8d06defa-4382-48e4-a4c2-2a831bdf246f.png)
......@@ -168,7 +168,7 @@ Silver 等人
第一代 AlphaGo 能够击败专业的围棋玩家。 2017 年 10 月,Google DeepMind 在 Nature 上发表了有关[《AlphaGo Zero》](https://www.nature.com/articles/nature24270)的论文。 AlphaGo Zero 是 AlphaGo 的最新版本。 早期版本的 AlphaGo 在接受过数以千计的从业余到专业游戏的人类游戏训练后,学会了玩游戏。 但是 AlphaGo 的最终版本(即 AlphaGo Zero)从零开始学到了一切,这是从第一个基本原理开始的,既没有使用任何人工数据也没有任何人工干预,并且能够实现最高水平的性能。 因此,AlphaGo Zero 通过与自己对战来学习玩围棋。 最大的壮举之一是,AlphaGo Zero 在 19 小时内就能够学习更高级的围棋策略的基础知识,包括生与死,影响力和领土。 在短短的三天内,AlphaGo Zero 击败了所有先前的 AlphaGo 版本,并在 40 天内超过了人类对围棋的一千年了解。
AlphaGo Zero 背后最重要的想法是,它完全从空白状态(即清晰的围棋棋盘)中学习,并通过自己的玩法自行弄清楚,而无需任何人类知识,没有任何人类游戏示例和数据,甚至没有任何东西 人为干预。 它从最初的基本原理中发现并发展了学习围棋游戏的直觉。 这种从头开始的学习称为**表格学习****白板学习**
AlphaGo Zero 背后最重要的想法是,它完全从空白状态(即清晰的围棋棋盘)中学习,并通过自己的玩法自行弄清楚,而无需任何人类知识,没有任何人类游戏示例和数据,甚至没有任何人为干预。 它从最初的基本原理中发现并发展了学习围棋游戏的直觉。 这种从头开始的学习称为**表格学习****白板学习**
Tabula rasa 学习对于任何 AI 代理都是非常重要的,因为如果有一个代理已实现 Tabula rasa 学习,则可以将其从围棋游戏移植到其他域环境(可能是其他任何游戏)。 Tabula rasa 学习将代理与其所在领域的具体情况脱钩,并尝试开发一种算法,该算法足够通用,可以学习以实现与该环境相关的目标,并且可以在任何地方应用。
......@@ -220,9 +220,9 @@ AlphaGo Zero 的自玩增强学习架构,摘录自 Google DeepMind 的 Silver
基于这些选定的移动集,接收不同的游戏状态,每个状态对应于它们的移动。 由于您模拟了在先前状态下的移动,因此会产生许多不同的状态。 现在,对于这些下一组状态,通过输入这些游戏状态的表示张量来重复前面的过程,并获得其策略向量。
因此,对于当前的董事会职位,这种重复过程将爆发成一棵大树。 运行更多的模拟,并且树将随着扩展呈指数扩展。 因此,该想法是将该搜索树爆炸到一定深度,因为由于有限的计算能力,进一步的搜索将是不可能的。
因此,对于当前的棋盘位置,这种重复过程将爆发成一棵大树。 运行更多的模拟,并且树将随着扩展呈指数扩展。 因此,该想法是将该搜索树爆炸到一定深度,因为由于有限的计算能力,进一步的搜索将是不可能的。
AlphaGo 团队决定为每个单板位置评估进行大约 1600 次仿真。 因此,对于每个单板状态,将运行蒙特卡洛树搜索,直到获得 1600 个模拟为止。 之后,值网络决定哪个结果董事会职位是最好的,即获胜的可能性最高。 然后将所有这些值备份到树的顶部,直到当前的游戏状态(即正在评估的当前棋盘位置),并获得对真正有力的,但不是强势的动作的非常强的估计:
AlphaGo 团队决定为每个单板位置评估进行大约 1600 次仿真。 因此,对于每个单板状态,将运行蒙特卡洛树搜索,直到获得 1600 个模拟为止。 之后,值网络决定哪个结果棋盘位置是最好的,即获胜的可能性最高。 然后将所有这些值备份到树的顶部,直到当前的游戏状态(即正在评估的当前棋盘位置),并获得对真正有力的,但不是强势的动作的非常强的估计:
![](img/925fa614-0a5c-4230-a5f8-b55fe744aab2.png)
......
......@@ -137,7 +137,7 @@ YOLO 还可以预测训练中所有班级每个盒子的班级得分。 因此
![](img/b2183a0c-1b28-4ad5-a2c0-087defa08e59.png)
此处,`g`是基本事实,`b`是当前步骤中的区域,`b'`是下一步中的新区域,而 IoU 是 事实真相之间的交集
此处,`g`是基本事实,`b`是当前步骤中的区域,`b'`是下一步中的新区域,而 IoU 是事实真相之间的交并比
**交并比****IoU**)是对象检测中的一个指标,其中有两个重叠的边界框。 首先,计算盒子的交点,即重叠的面积。 其次,计算重叠框的并集,将整个框的面积之和减去重叠面积。 然后将相交除以并集得到 IoU。
......
......@@ -54,7 +54,7 @@ There is a cat on the mat
# 什么是 BLEU 分数,它的作用是什么?
BLEU 分数由 Papineni 等(2002)发表在他们的研究出版物[《BLEU:一种自动评估机器翻译的方法》](https://www.aclweb.org/anthology/P02-1040.pdf)中。 BLEU 代表双语评估计划。 对于给定的机器生成的输出(例如,机器翻译为翻译或文本摘要为摘要),分数可衡量输出的优劣,即,机器生成的输出与以下任何一个有多接近 可能的人工生成参考(可能的实际输出)。 因此,输出文本离任何人工生成的参考越近,BLEU 得分就越高。
BLEU 分数由 Papineni 等(2002)发表在他们的研究出版物[《BLEU:一种自动评估机器翻译的方法》](https://www.aclweb.org/anthology/P02-1040.pdf)中。 BLEU 代表双语评估计划。 对于给定的机器生成的输出(例如,机器翻译为翻译或文本摘要为摘要),分数可衡量输出的优劣,即,机器生成的输出与任何一个可能的人工生成参考有多接近(可能的实际输出)。 因此,输出文本离任何人工生成的参考越近,BLEU 得分就越高。
BLEU 分数背后的动机是设计一种度量标准,该度量标准可以像人类评估者一样相对于人类产生的引用来评估机器产生的文本。 BLEU 评分背后的直觉是,它考虑了机器生成的输出,并探讨了这些单词是否存在于多个人工生成的引用中的至少一种。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册