提交 a68fa1d5 编写于 作者: W wizardforcel

2020-08-06 22:55:54

上级 603e9184
......@@ -1228,7 +1228,7 @@ FM 可以使用这些特征丰富的(元)数据集。 FM 可以使用这些
### 冷启动问题和协同过滤方法
冷启动这个问题听起来很有趣,但顾名思义,它源于汽车。假设你住在阿拉斯加。由于寒冷,您的汽车发动机可能无法顺利启动,但一旦达到最佳工作温度,它将启动,运行并正常运行。
冷启动这个问题听起来很有趣,但顾名思义,它源于汽车。假设你住在阿拉斯加状态。由于寒冷,您的汽车发动机可能无法顺利启动,但一旦达到最佳工作温度,它将启动,运行并正常运行。
在推荐引擎的领域中,术语冷启动仅仅意味着对于引擎来说还不是最佳的环境以提供最佳结果。在电子商务中,冷启动有两个不同的类别:产品冷启动和用户冷启动。
......
......@@ -9,10 +9,10 @@ OpenAI Gym 拥有一系列环境。在编写本书时,可以使用以下环境
* 经典控制和玩具文本:来自 RL 文献的小规模任务。
* 算法:执行计算,例如添加多位数和反转序列。这些任务中的大多数都需要记忆,并且可以通过改变序列长度来改变它们的难度。
* Atari:经典 Atari 游戏,使用街机学习环境,屏幕图像或 RAM 作为输入。
* 棋盘游戏:目前,我们已经将 Go 游戏包括在 9x9 和 19x19 板上,而 Pachi 引擎[13]则作为对手。
* 棋盘游戏:目前,我们已经将围棋游戏包括在`9x9``19x19`板上,而 Pachi 引擎则作为对手。
* 2D 和 3D 机器人:允许在模拟中控制机器人。这些任务使用 MuJoCo 物理引擎,该引擎专为快速准确的机器人仿真而设计。一些任务改编自 RLLab。
## env
## `env`
OpenAI Gym 允许使用`env`类,它封装了环境和任何内部动态。此类具有不同的方法和属性,使您可以实现创建新环境。最重要的方法名为`reset``step``render`
......@@ -58,7 +58,7 @@ for step_idx in range(500):
Q-Learning 的基本思想是算法学习整个状态和动作空间的最优评估函数(`S×A`)。这种所谓的`Q`函数以`Q: S×A -> R`的形式提供匹配,其中`R`是在状态`s ∈ S`中执行的动作`a ∈ A`的未来奖励的期望值。一旦智能体学会了最佳函数`Q`,它就能够识别哪种行为将导致某种状态下最高的未来奖励。
实现 Q-Learning 算法的最常用示例之一涉及使用表。该表的每个单元格是值`Q(s; a) = R`并且它被初始化为 0.由智能体执行的动作`a ∈ A`是使用相对于 Qε-greedy 的策略来选择的。
实现 Q-Learning 算法的最常用示例之一涉及使用表。该表的每个单元格是值`Q(s; a) = R`并且它被初始化为 0.由智能体执行的动作`a ∈ A`是使用相对于`Qε`的贪婪策略来选择的。
Q-Learning 算法的基本思想是训练规则,它更新表格元素`Q(s; a) = R`
......@@ -92,7 +92,7 @@ Q-Learning 算法的基本思想是训练规则,它更新表格元素`Q(s; a)
## FrozenLake 环境
智能体控制角色在 4×4 网格世界中的移动。网格的一些瓷砖是可行走的,而其他瓷砖则导致落入水中。另外,智能体的移动方向是不确定的,并且仅部分地取决于所选择的方向。智能体因找到目标图块的可行走路径而获得奖励:
智能体控制角色在`4×4`网格世界中的移动。网格的一些瓷砖是可行走的,而其他瓷砖则导致落入水中。另外,智能体的移动方向是不确定的,并且仅部分地取决于所选择的方向。智能体因找到目标图块的可行走路径而获得奖励:
![The FrozenLake environment](img/B09698_10_03.jpg)
......@@ -113,7 +113,7 @@ HFFG (G: goal, where the frisbee islocated)
在为高度结构化数据提供良好功能方面,神经网络非常强大。
为了解决 FrozenLake 问题,我们将构建一个单层网络,该网络采用[1×16]向量中编码的状态并学习最佳移动(动作),在向量中映射可能的动作长度为四。
为了解决 FrozenLake 问题,我们将构建一个单层网络,该网络采用`1×16`向量中编码的状态并学习最佳移动(动作),在向量中映射可能的动作长度为四。
以下实现基于 TensorFlow:
......@@ -133,7 +133,7 @@ import matplotlib.pyplot as plt
env = gym.make('FrozenLake-v0')
```
输入网络是一种状态,以张量形状[1,16]编码。因此,我们定义了 input1 占位符:
输入网络是一种状态,以张量形状[1,16]编码。因此,我们定义了`input1`占位符:
```py
inputs1 = tf.placeholder(shape=[1,16],dtype=tf.float32)
......@@ -232,7 +232,7 @@ with tf.Session() as sess:
s1,r,d,_ = env.step(a[0])
```
新状态`s1`用于更新 Q 张量:
新状态`s1`用于更新`Q`张量:
```py
Q1 = sess.run(Qout,feed_dict=\
......@@ -283,29 +283,33 @@ Percentage of successful episodes: 0.558%
# 深度 Q 学习
多亏了 DeepMind 在 2013 年和 2016 年取得的近期成就,它成功地在 Atari 游戏中达到了所谓的超人级别,并击败了世界冠军 Go,RL 在机器学习社区中变得非常有趣。这种新的兴趣也是由于深度神经网络(DNN)表现为近似函数,使这种算法的潜在价值达到了更高的水平。最近获得最多兴趣的算法肯定是深度 Q-Learning。以下部分介绍深度 Q-Learning 算法,并讨论一些优化技术以最大化其表现。
多亏了 DeepMind 在 2013 年和 2016 年取得的近期成就,它成功地在 Atari 游戏中达到了所谓的超人级别,并击败了围棋世界冠军,RL 在机器学习社区中变得非常有趣。这种新的兴趣也是由于深度神经网络(DNN)表现为近似函数,使这种算法的潜在价值达到了更高的水平。最近获得最多兴趣的算法肯定是深度 Q-Learning。以下部分介绍深度 Q-Learning 算法,并讨论一些优化技术以最大化其表现。
## 深度 Q 神经网络
当状态数和可能的动作增加并且从矩阵的角度来看变得难以管理时,Q 学习基础算法会引起巨大的问题。想想谷歌使用的结构输入配置,以达到 Atari 游戏的表现水平。空间是离散的,但国家的数量是巨大的。这就是深度学习的步骤。神经网络非常擅长为高度结构化的数据提供良好的功能。事实上,我们可以用神经网络识别 Q 函数,它将状态和动作作为输入并输出相应的 Q 值:
当状态数和可能的动作增加并且从矩阵的角度来看变得难以管理时,Q 学习基础算法会引起巨大的问题。想想谷歌使用的结构输入配置,以达到 Atari 游戏的表现水平。状态空间是离散的,但国家的数量是巨大的。这就是深度学习的步骤。神经网络非常擅长为高度结构化的数据提供良好的功能。事实上,我们可以用神经网络识别 Q 函数,它将状态和动作作为输入并输出相应的 Q 值:
Q(状态;行动)=价值
```py
Q(state; action) = value
```
深度神经网络最常见的实现如下图所示:
![Deep Q neural networks](img/B09698_10_04.jpg)
图 4:Deep Q 神经网络的通用实现
图 4:深度 Q 神经网络的通用实现
或者, 可以将状态作为输入,并为每个可能的动作生成相应的值:
Q(状态)=每个可能操作的值
```py
Q(state) = 每个可能的操作值
```
这个优化的实现可以在下图中看到:
![Deep Q neural networks](img/B09698_10_05.jpg)
图 5:Deep Q 神经网络的优化实现
图 5:深度 Q 神经网络的优化实现
最后的方法在计算上是有利的,因为要更新 Q 值(或选择最高的 Q 值),我们只需要通过网络向前迈出一步,我们将立即获得所有可用操作的所有 Q 值。
......@@ -357,7 +361,7 @@ for _ in range(1000):
(env.action_space.sample())
```
在 Cart-Pole 游戏中,有两种可能的动作:向左或向右移动 。因此,我们可以采取两种操作,编码为 0 和 1。
在 Cart-Pole 游戏中,有两种可能的动作:向左或向右移动。因此,我们可以采取两种操作,编码为 0 和 1。
在这里,我们采取随机行动:
......@@ -392,9 +396,9 @@ if toc-tic > 10:
![Deep Q-Network for the Cart-Pole problem](img/B09698_10_25.jpg)
这里,s 是状态,a 是动作,s'是状态 s 和动作 a 的下一个状态。
这里,`s`是状态,`a`是动作,`s'`是状态`s`和动作`a`的下一个状态。
之前,我们使用这个等式来学习 Q 表的值 。但是,这个游戏有很多州可供使用。状态有四个值:推车的位置和速度,以及杆的位置和速度。这些都是实数值,所以如果我们忽略浮点精度,我们实际上有无限状态。然后,我们将用一个近似于 Q 表查找功能的神经网络替换它,而不是使用表格。
之前,我们使用这个等式来学习 Q 表的值。但是,这个游戏有很多状态可供使用。状态有四个值:推车的位置和速度,以及杆的位置和速度。这些都是实数值,所以如果我们忽略浮点精度,我们实际上有无限状态。然后,我们将用一个近似于 Q 表查找功能的神经网络替换它,而不是使用表格。
通过将状态传递到网络来计算 Q 值,而输出将是每个可用动作的 Q 值,具有完全连接的隐藏层:
......@@ -402,7 +406,7 @@ if toc-tic > 10:
图 7:深度 Q-Learning
在这个 Cart-Pole 游戏中,我们有四个输入,一个用于状态中的每个值;和两个输出,每个动作一个。网络权重更新将通过选择动作并使用所选动作模拟游戏来进行。这将把我们带到下一个然后再到奖励。
在这个 Cart-Pole 游戏中,我们有四个输入,一个用于状态中的每个值;和两个输出,每个动作一个。网络权重更新将通过选择动作并使用所选动作模拟游戏来进行。这将把我们带到下一个状态然后再到奖励。
以下是用于解决 Cart-Pole 问题的神经网络的简短代码片段:
......@@ -440,9 +444,9 @@ class DQNetwork:
近似函数可能会受到非独立且相同分布和非平稳数据(状态之间的相关性)的影响。
使用 Experience Replay 方法可以克服这种问题。
使用经验重放方法可以克服这种问题。
在智能体和环境之间的交互过程中,所有体验(`state``action``reward``next_state`)都保存在重放内存中,这是固定大小的内存并以先进先出(以先进先出的方式运行) FIFO)
在智能体和环境之间的交互过程中,所有体验(`state``action``reward``next_state`)都保存在重放内存中,这是固定大小的内存并以先进先出(FIFO)的方式运行
这是重放内存类的实现:
......@@ -480,7 +484,7 @@ class replayMemory():
最常用于在利用和探索之间达成正确妥协的策略是贪婪的策略。它代表了一种选择动作的方法,基于使用均匀概率分布来选择随机动作的可能性。
### Deep Q-Learning 训练算法
### 深度 Q-Learning 训练算法
让我们看看如何构建一个深度 Q-Learning 算法来解决 Cart-Pole 问题。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册