Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lzh_me
apachecn-dl-zh
提交
3a4b203c
A
apachecn-dl-zh
项目概览
lzh_me
/
apachecn-dl-zh
与 Fork 源项目一致
Fork自
OpenDocCN / apachecn-dl-zh
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
apachecn-dl-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
3a4b203c
编写于
12月 26, 2020
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2020-12-26 17:04:46
上级
d0a9aba5
变更
14
隐藏空白更改
内联
并排
Showing
14 changed file
with
29 addition
and
29 deletion
+29
-29
new/begin-app-dev-tf-keras/4.md
new/begin-app-dev-tf-keras/4.md
+1
-1
new/handson-dl-img-tf/3.md
new/handson-dl-img-tf/3.md
+1
-1
new/handson-meta-learn-py/10.md
new/handson-meta-learn-py/10.md
+2
-2
new/handson-rl-py/00.md
new/handson-rl-py/00.md
+1
-1
new/handson-rl-py/01.md
new/handson-rl-py/01.md
+1
-1
new/handson-rl-py/03.md
new/handson-rl-py/03.md
+2
-2
new/handson-rl-py/06.md
new/handson-rl-py/06.md
+1
-1
new/handson-rl-py/08.md
new/handson-rl-py/08.md
+3
-3
new/handson-rl-py/09.md
new/handson-rl-py/09.md
+3
-3
new/handson-rl-py/10.md
new/handson-rl-py/10.md
+3
-3
new/handson-rl-py/12.md
new/handson-rl-py/12.md
+1
-1
new/handson-rl-py/13.md
new/handson-rl-py/13.md
+2
-2
new/intel-proj-py/02.md
new/intel-proj-py/02.md
+4
-4
new/intel-proj-py/03.md
new/intel-proj-py/03.md
+4
-4
未找到文件。
new/begin-app-dev-tf-keras/4.md
浏览文件 @
3a4b203c
...
...
@@ -368,7 +368,7 @@ Docker 使用名为`Dockerfile`的文件来描述如何构建镜像的规则以
> “代码段 9”:`docker-compose.yml`文件,包括环境变量
部署
`cryptonic`
的最简单方法是使用代码段 9 中的
`docker-compose.yml`
文件。此文件包含应用程序运行所必需的所有规范,包括有关如何与 Redis 缓存连接以及
什么环境的说明 要使用的变量
。 导航到
`docker-compose.yml`
文件的位置后,可以使用命令
`docker-compose up`
启动
`cryptonic`
,如以下代码所示:
部署
`cryptonic`
的最简单方法是使用代码段 9 中的
`docker-compose.yml`
文件。此文件包含应用程序运行所必需的所有规范,包括有关如何与 Redis 缓存连接以及
要使用的环境变量的说明
。 导航到
`docker-compose.yml`
文件的位置后,可以使用命令
`docker-compose up`
启动
`cryptonic`
,如以下代码所示:
```
py
$
docker
-
compose
up
-
d
...
...
new/handson-dl-img-tf/3.md
浏览文件 @
3a4b203c
...
...
@@ -129,7 +129,7 @@ Keras 功能模型
因此,您可以从中看到,首先将参数传递给图层,然后将图层本身传递以形成链。 那么,这些
`Dropout`
和
`Flatten`
层又如何呢?
`Dropout`
参数本质上是一个技巧。 当我们设置
`Dropout`
参数(这里是
`0.1`
)时,我们告诉神经网络要做的是在每个训练周期中随机断开 10% 的激活。 这是使神经网络学习概括。 这是真正的学习,而不是简单地记住输入数据。
`Flatten`
层处理尺寸。 因为我们有一个二维的
`28x28`
像素输入图像,所以我们使用
`Flatten`
将其转换为
`784`
的长的一维数字字符串。 这被馈送到输出
`softmax`
层。
打印出模型摘要是弄清参数大小和尺寸的好方法。 这最终成为使用 Keras 的棘手部分之一,例如当您有一组输入样本(在我们的示例中为
`28x28`
图像),并且
您需要到那时将它们转换成包含十个可能输出值的单个数组 您进入
`softmax`
。 您可以看到形状在我们穿过每一层时如何变化。 最后,
`Flatten`
将每个样本的维数降低为一个维,然后将其转换为具有十个可能的输出值的维。
打印出模型摘要是弄清参数大小和尺寸的好方法。 这最终成为使用 Keras 的棘手部分之一,例如当您有一组输入样本(在我们的示例中为
`28x28`
图像),并且
在进入
`softmax`
时,您需要到那时将它们转换成包含十个可能输出值的单个数组
。 您可以看到形状在我们穿过每一层时如何变化。 最后,
`Flatten`
将每个样本的维数降低为一个维,然后将其转换为具有十个可能的输出值的维。
好的,现在该运行模型了。 现在,我们了解了如何将包括
`Dropout`
和
`Flatten`
层在内的模型放到一起,我们将继续使用求解器,这是我们实际执行机器学习模型所使用的。
...
...
new/handson-meta-learn-py/10.md
浏览文件 @
3a4b203c
...
...
@@ -3,7 +3,7 @@
# 第 1 章:元学习简介
1.
元学习产生了一种通用的 AI 模型,该模型可以学习执行各种任务,而无需从头开始进行培训。 我们使用几个数据点在各种相关任务上训练我们的元学习模型,因此对于新的但相关的任务,该模型可以利用从先前任务中学到的知识而不必从头开始进行训练。
2.
从更少的数据点学习称为
**少样本学习**
或
**K 次学习**
,其中
`k`
表示在
每个类别中数据点的数量 数据集
。
2.
从更少的数据点学习称为
**少样本学习**
或
**K 次学习**
,其中
`k`
表示在
数据集的每个类别中的数据点的数量
。
3.
为了使我们的模型从一些数据点中学习,我们将以相同的方式对其进行训练。 因此,当我们有一个数据集
`D`
时,我们从数据集中存在的每个类中采样一些数据点,并将其称为支持集。
4.
我们从与支持集不同的每个类中采样不同的数据点,并将其称为查询集。
5.
在基于度量的元学习设置中,我们将学习适当的度量空间。 假设我们要找出两个图像之间的相似性。 在基于度量的设置中,我们使用一个简单的神经网络,该网络从两个图像中提取特征并通过计算这两个图像的特征之间的距离来查找相似性。
...
...
@@ -17,7 +17,7 @@
![](img/eb7b45ed-a6b9-4a3d-aff4-1cea02fba160.png)
在前面的公式中,`Y`的值是真实的标签,当两个输入值相似时为 1,如果两个输入值不相似则为 0,而`E`为
我们的能量函数,可以是任何距离度量。 术语**边距**用于保持约束; 也就是说,当两个输入值不相同且它们之间的距离大于边距时,则不会造成损失。
在前面的公式中,`Y`的值是真实的标签,当两个输入值相似时为 1,如果两个输入值不相似则为 0,而`E`为我们的能量函数,可以是任何距离度量。 术语**边距**用于保持约束; 也就是说,当两个输入值不相同且它们之间的距离大于边距时,则不会造成损失。
3.
能量函数告诉我们两个输入的相似程度。 它基本上是任何相似性度量,例如欧几里得距离和余弦相似性。
...
...
new/handson-rl-py/00.md
浏览文件 @
3a4b203c
...
...
@@ -12,7 +12,7 @@
第 2 章和 “OpenAI 和 TensorFlow 入门”可帮助我们为各种强化学习任务设置机器。 我们将学习如何通过安装 Anaconda,Docker,OpenAI Gym,Universe 和 TensorFlow 来设置机器。 然后,我们将学习如何在 OpenAI Gym 中模拟代理,并且将了解如何构建视频游戏机器人。 我们还将学习 TensorFlow 的基础知识,并了解如何使用 TensorBoard 进行可视化。
第 3 章,“马尔可夫决策过程和动态规划”首先说明什么是马尔可夫链和马尔可夫过程,然后我们将了解如何将强化学习问题建模为马尔可夫
决策过程。 我们还将学习一些基本概念,例如值函数,Q 函数和贝尔曼方程。 然后,我们将了解什么是动态规划以及如何使用价值和策略迭代来解决冻湖问题。
第 3 章,“马尔可夫决策过程和动态规划”首先说明什么是马尔可夫链和马尔可夫过程,然后我们将了解如何将强化学习问题建模为马尔可夫决策过程。 我们还将学习一些基本概念,例如值函数,Q 函数和贝尔曼方程。 然后,我们将了解什么是动态规划以及如何使用价值和策略迭代来解决冻湖问题。
第 4 章,“使用蒙特卡洛方法进行的游戏”解释了蒙特卡洛方法和不同类型的蒙特卡洛预测方法,例如首次访问 MC 和每次访问 MC。 我们还将学习如何使用蒙特卡洛方法玩二十一点。 然后,我们将探讨不同的策略上和策略外的蒙特卡洛控制方法。
...
...
new/handson-rl-py/01.md
浏览文件 @
3a4b203c
...
...
@@ -186,7 +186,7 @@ RL 被广泛用于金融投资组合管理,这是将资金不断重新分配
在本章中,我们学习了 RL 的基础知识以及一些关键概念。 我们了解了 RL 的不同元素和 RL 环境的不同类型。 我们还介绍了各种可用的 RL 平台以及 RL 在各个领域中的应用。
在下一章第 2 章,“OpenAI 和 TensorFlow 入门”中,我们将学习 OpenAI 和 TensorFlow 的基础知识以及如何安装 OpenAI 和 TensorFlow,然后模拟环境并教给代理如何
在环境中学习。
在下一章第 2 章,“OpenAI 和 TensorFlow 入门”中,我们将学习 OpenAI 和 TensorFlow 的基础知识以及如何安装 OpenAI 和 TensorFlow,然后模拟环境并教给代理如何在环境中学习。
# 问题
...
...
new/handson-rl-py/03.md
浏览文件 @
3a4b203c
...
...
@@ -279,7 +279,7 @@ MDP 由五个重要元素表示:
让我们通过手动逐步执行值迭代来直观地理解它。
考虑此处显示的网格。 让我们说我们处于状态
`A`
,我们的目标是在不访问状态
`B`
的情况下达到状态
`C`
,我们有两个动作,0
-- 左/右 和 1 --
上/下:
考虑此处显示的网格。 让我们说我们处于状态
`A`
,我们的目标是在不访问状态
`B`
的情况下达到状态
`C`
,我们有两个动作,0
是左/右和 1 是
上/下:
![](
img/00077.gif
)
...
...
@@ -329,7 +329,7 @@ Q(A, 1) = 0.3
从
`Q(s, a)`
更新值函数为最大值。
如果您查看前面的
`Q`
函数,则
`Q(A, 1)`
的值大于
`Q(A, 0)`
的值,因此我们将
更新该值 状态
`A`
的形式
为
`Q(A, 1)`
:
如果您查看前面的
`Q`
函数,则
`Q(A, 1)`
的值大于
`Q(A, 0)`
的值,因此我们将
将状态
`A`
的值更新
为
`Q(A, 1)`
:
![](
img/00083.gif
)
...
...
new/handson-rl-py/06.md
浏览文件 @
3a4b203c
...
...
@@ -417,7 +417,7 @@ import seaborn as sns
%
matplotlib
inline
```
让我们模拟一个形状为
`5 x 10,000`
的数据集,其中列为
`Banner_type`
广告,行为
`0`
或
`1`
,即
是否单击了广告(
`1`
或 没有被用户分别
点击(
`0`
):
让我们模拟一个形状为
`5 x 10,000`
的数据集,其中列为
`Banner_type`
广告,行为
`0`
或
`1`
,即
单击了广告(
`1`
)或没有被用户
点击(
`0`
):
```
py
df
=
pd
.
DataFrame
()
...
...
new/handson-rl-py/08.md
浏览文件 @
3a4b203c
...
...
@@ -76,7 +76,7 @@ DQN 的第一层是卷积网络,网络的输入将是游戏屏幕的原始帧
# 削减奖励
我们如何分配奖励? 奖励分配因每个游戏而异。 在某些游戏中,我们可以分配奖励,例如 +1 表示获胜,-1 表示损失,而 0 则不计任何收益,但是在某些其他游戏中,我们必须分配诸如 +100 表示执行某项操作和 +50 表示进行另一项操作
等奖励 行动
。 为避免出现此问题,我们将所有奖励分别裁剪为 -1 和 +1。
我们如何分配奖励? 奖励分配因每个游戏而异。 在某些游戏中,我们可以分配奖励,例如 +1 表示获胜,-1 表示损失,而 0 则不计任何收益,但是在某些其他游戏中,我们必须分配诸如 +100 表示执行某项操作和 +50 表示进行另一项操作
的奖励
。 为避免出现此问题,我们将所有奖励分别裁剪为 -1 和 +1。
# 了解算法
...
...
@@ -396,7 +396,7 @@ with tf.Session() as sess:
# 双 DQN
深度 Q 学习非常酷,对吗? 它已经普及了玩任何 Atari 游戏的学习。 但是 DQN 的问题在于,它倾向于高估
`Q`
值。 这是因为
`Q`
学习方程式中的最大值算子。 最大运算符在选择和评估动作时使用相同的值。 那是什么意思
假设我们处于
`s`
状态,并且我们有五个动作
`a[1]`
至
`a[5]`
。 假设
`a[3]`
是最好的动作。 当我们估计状态为
`s`
的所有这些动作的
`Q`
值时,估计的
`Q`
值会有些杂音并且与实际值有所不同。 由于这种噪声,动作
`a[2]`
会比最佳动作
`a[3]`
获得更高的值。 现在,如果我们选择最佳动作作为具有最大值的动作,则最终将选择次优动作
`a[2]`
而不是最佳动作
`a[3]`
。
深度 Q 学习非常酷,对吗? 它已经普及了玩任何 Atari 游戏的学习。 但是 DQN 的问题在于,它倾向于高估
`Q`
值。 这是因为
`Q`
学习方程式中的最大值算子。 最大运算符在选择和评估动作时使用相同的值。 那是什么意思
?
假设我们处于
`s`
状态,并且我们有五个动作
`a[1]`
至
`a[5]`
。 假设
`a[3]`
是最好的动作。 当我们估计状态为
`s`
的所有这些动作的
`Q`
值时,估计的
`Q`
值会有些杂音并且与实际值有所不同。 由于这种噪声,动作
`a[2]`
会比最佳动作
`a[3]`
获得更高的值。 现在,如果我们选择最佳动作作为具有最大值的动作,则最终将选择次优动作
`a[2]`
而不是最佳动作
`a[3]`
。
我们可以通过具有两个单独的
`Q`
函数来解决此问题,每个函数都是独立学习的。 一个
`Q`
功能用于选择一个动作,另一个
`Q`
功能用于评估一个动作。 我们可以通过调整 DQN 的目标功能来实现。 调用 DQN 的目标函数:
...
...
@@ -420,7 +420,7 @@ with tf.Session() as sess:
![](
img/00273.jpeg
)
`p[i]`
是转换的优先级
`i`
,
`δ[i]`
是转换的 TD 误差
`i`
,而
`ε`
只是一些正常数,可确保每次转换
具有非零优先级。 当
`δ`
为零时,添加
`ε`
将使转换具有优先级而不是零优先级。 但是,转换的优先级要比
`δ`
不为零的转换低。 指数
`α`
表示使用的优先级数量。 当
`α`
为零时,则仅是均匀情况。
`p[i]`
是转换的优先级
`i`
,
`δ[i]`
是转换的 TD 误差
`i`
,而
`ε`
只是一些正常数,可确保每次转换具有非零优先级。 当
`δ`
为零时,添加
`ε`
将使转换具有优先级而不是零优先级。 但是,转换的优先级要比
`δ`
不为零的转换低。 指数
`α`
表示使用的优先级数量。 当
`α`
为零时,则仅是均匀情况。
现在,我们可以使用以下公式将此优先级转换为概率:
...
...
new/handson-rl-py/09.md
浏览文件 @
3a4b203c
# 用深度循环 Q 网络玩世界末日
在上一章中,我们介绍了如何使用
**深度 Q 网络**
(
**DQN**
)构建代理以玩 Atari 游戏。 我们利用神经网络来逼近 Q 函数,使用了
**卷积神经网络**
(
**CNN**
)来理解输入游戏画面,并利用过去的四个游戏画面来更好地理解
当前的游戏状态。 在本章中,我们将学习如何利用
**循环神经网络**
(
**RNN**
)来提高 DQN 的性能。 我们还将研究
**马尔可夫决策过程**
(
**MDP**
)的部分可观察之处,以及如何使用
**深度循环 Q 网络**
(
**DRQN**
)。 接下来,我们将学习如何构建一个代理来使用 DRQN 玩《毁灭战士》游戏。 最后,我们将看到 DRQN 的一种变体,称为
**深度注意力循环 Q 网络**
(
**DARQN**
),它增强了 DRQN 架构的注意力机制。
在上一章中,我们介绍了如何使用
**深度 Q 网络**
(
**DQN**
)构建代理以玩 Atari 游戏。 我们利用神经网络来逼近 Q 函数,使用了
**卷积神经网络**
(
**CNN**
)来理解输入游戏画面,并利用过去的四个游戏画面来更好地理解当前的游戏状态。 在本章中,我们将学习如何利用
**循环神经网络**
(
**RNN**
)来提高 DQN 的性能。 我们还将研究
**马尔可夫决策过程**
(
**MDP**
)的部分可观察之处,以及如何使用
**深度循环 Q 网络**
(
**DRQN**
)。 接下来,我们将学习如何构建一个代理来使用 DRQN 玩《毁灭战士》游戏。 最后,我们将看到 DRQN 的一种变体,称为
**深度注意力循环 Q 网络**
(
**DARQN**
),它增强了 DRQN 架构的注意力机制。
在本章中,您将学习以下主题:
...
...
@@ -12,7 +12,7 @@
# DRQN
那么,当我们在 Atari 游戏中以人为水平执行 DQN 时,为什么我们需要 DRQN? 为了回答这个问题,让我们理解
**部分可观察的马尔可夫决策过程**
(
**POMDP**
)的问题。 当我们可获得的关于环境的信息有限时,该环境称为部分可观察的 MDP。 到目前为止,在前面的章节中,我们已经看到了一个完全可观察的 MDP,在其中我们了解所有可能的动作和状态-尽管该代理可能不知道转移和奖励的可能性,但它对环境有完整的了解,例如,冰冻的湖泊
环境,我们清楚地知道了环境的所有状态和行为; 我们轻松地将该环境建模为一个完全可观察的 MDP。 但是大多数现实世界环境只能部分观察到。 我们看不到所有状态。 考虑代理学习如何在现实环境中行走; 显然,代理将不会完全了解环境,它将无法获得任何信息。 在 POMDP 中,状态仅提供部分信息,但是将有关过去状态的信息保留在内存中可能会帮助代理更好地了解环境的性质并改善策略。 因此,在 POMDP 中,我们需要保留有关先前状态的信息,以便采取最佳措施。
那么,当我们在 Atari 游戏中以人为水平执行 DQN 时,为什么我们需要 DRQN? 为了回答这个问题,让我们理解
**部分可观察的马尔可夫决策过程**
(
**POMDP**
)的问题。 当我们可获得的关于环境的信息有限时,该环境称为部分可观察的 MDP。 到目前为止,在前面的章节中,我们已经看到了一个完全可观察的 MDP,在其中我们了解所有可能的动作和状态-尽管该代理可能不知道转移和奖励的可能性,但它对环境有完整的了解,例如,冰冻的湖泊环境,我们清楚地知道了环境的所有状态和行为; 我们轻松地将该环境建模为一个完全可观察的 MDP。 但是大多数现实世界环境只能部分观察到。 我们看不到所有状态。 考虑代理学习如何在现实环境中行走; 显然,代理将不会完全了解环境,它将无法获得任何信息。 在 POMDP 中,状态仅提供部分信息,但是将有关过去状态的信息保留在内存中可能会帮助代理更好地了解环境的性质并改善策略。 因此,在 POMDP 中,我们需要保留有关先前状态的信息,以便采取最佳措施。
为了回顾我们在前几章中学到的知识,请考虑以下所示的乒乓游戏。 仅通过查看当前的游戏屏幕,我们就可以知道球的位置,但是我们还需要知道球的运动方向和球的速度,以便采取最佳行动。 但是,仅查看当前的游戏屏幕并不能告诉我们球的方向和速度:
...
...
@@ -20,7 +20,7 @@
为了克服这个问题,我们将不仅仅考虑当前的游戏屏幕,而将使用过去的四个游戏屏幕来了解球的方向和速度。 这就是我们在 DQN 中看到的。 我们将过去的四个游戏屏幕以及当前的游戏屏幕作为输入输入到卷积层,并接收该状态下所有可能动作的 Q 值。 但是,您认为仅使用过去的四个屏幕将有助于我们了解不同的环境吗? 在某些环境下,我们甚至可能需要过去的 100 个游戏屏幕来更好地了解当前游戏状态。 但是,堆叠过去的
`n`
游戏画面会减慢我们的训练过程,而且还会增加我们的经验回放缓冲区的大小。
因此,只要需要,我们就可以利用 RNN 的优势来理解和保留有关先前状态的信息。 在第 7 章“深度学习基础知识”中,我们了解了如何
将
**长短期记忆循环神经网络**
(
**LSTM RNN**
)用于 通过保留,忘记和更新所需的信息来
生成文本以及了解文本的上下文。 我们将通过扩展 LSTM 层来修改 DQN 架构,以了解先前的信息。 在 DQN 架构中,我们用 LSTM RNN 替换了第一卷积后全连接层。 这样,我们也可以解决部分可观察性的问题,因为现在我们的代理可以记住过去的状态并可以改进策略。
因此,只要需要,我们就可以利用 RNN 的优势来理解和保留有关先前状态的信息。 在第 7 章“深度学习基础知识”中,我们了解了如何
通过保留,忘记和更新所需的信息,将
**长短期记忆循环神经网络**
(
**LSTM RNN**
)用于
生成文本以及了解文本的上下文。 我们将通过扩展 LSTM 层来修改 DQN 架构,以了解先前的信息。 在 DQN 架构中,我们用 LSTM RNN 替换了第一卷积后全连接层。 这样,我们也可以解决部分可观察性的问题,因为现在我们的代理可以记住过去的状态并可以改进策略。
# DRQN 的架构
...
...
new/handson-rl-py/10.md
浏览文件 @
3a4b203c
...
...
@@ -55,7 +55,7 @@ A3C 网络风起云涌,并接管了 DQN。 除了前面提到的优点之外
![](
img/00297.jpeg
)
好的,新项目
`H(π)`
是什么? 它是熵项。 它用于确保充分探索策略。 熵告诉我们行动概率的扩散。 当熵值高时,每个动作的概率都将相同,因此代理将不确定要执行哪个动作,而当熵值降低时,一个动作将比其他动作具有更高的概率,并且代理可以
拿起
这个可能性很高的动作。 因此,将熵添加到损失函数中会鼓励代理进一步探索并避免陷入局部最优状态。
好的,新项目
`H(π)`
是什么? 它是熵项。 它用于确保充分探索策略。 熵告诉我们行动概率的扩散。 当熵值高时,每个动作的概率都将相同,因此代理将不确定要执行哪个动作,而当熵值降低时,一个动作将比其他动作具有更高的概率,并且代理可以
选取
这个可能性很高的动作。 因此,将熵添加到损失函数中会鼓励代理进一步探索并避免陷入局部最优状态。
# 驾驶 A3C 上山
...
...
@@ -435,13 +435,13 @@ tensorboard --logdir=logs --port=6007 --host=127.0.0.1
![](
img/00302.jpeg
)
同步节点呢? 那是在做什么
同步节点将本地梯度从本地网络推送到全局网络,并将梯度从全局网络推送到本地网络:
同步节点呢? 那是在做什么
?
同步节点将本地梯度从本地网络推送到全局网络,并将梯度从全局网络推送到本地网络:
![](
img/00303.jpeg
)
# 概要
在本章中,我们学习了 A3C 网络的工作方式。 在 A3C 中,“异步”表示多个代理通过与环境的多个副本进行交互而独立工作,“优势”表示“优势”功能,即 Q 函数和值函数之间的差异,“演员评论家”是指演员评论家网络,其中
行为者
网络负责生成策略,评论家网络评估由演员网络生成的策略。 我们已经了解了 A3C 的工作原理,并了解了如何使用该算法解决山地车问题。
在本章中,我们学习了 A3C 网络的工作方式。 在 A3C 中,“异步”表示多个代理通过与环境的多个副本进行交互而独立工作,“优势”表示“优势”功能,即 Q 函数和值函数之间的差异,“演员评论家”是指演员评论家网络,其中
演员
网络负责生成策略,评论家网络评估由演员网络生成的策略。 我们已经了解了 A3C 的工作原理,并了解了如何使用该算法解决山地车问题。
在下一章第 11 章,“策略梯度和优化”中,我们将看到无需 Q 函数即可直接优化策略的策略梯度方法。
...
...
new/handson-rl-py/12.md
浏览文件 @
3a4b203c
# Capstone 项目–使用 DQN 进行赛车
在最后几章中,我们通过使用神经网络逼近 q 函数来了解 Deep Q 学习的工作原理。 在此之后,我们看到了
**深度 Q 网络**
(
**DQN**
)的各种改进,例如双重 Q 学习,决斗网络架构和深度循环 Q 网络。 我们已经了解了 DQN 如何利用回放缓冲区来存储智能体的经验,并使用缓冲区中的小批样本来训练网络。 我们还实现了用于玩 Atari 游戏的 DQN 和一个用于玩 Doom 游戏的
**深度循环 Q 网络**
(
**DRQN**
)。 在本章中,让我们进入决斗 DQN 的详细实现,它与常规 DQN 基本相同,除了最终的全连接层将分解为两个流,即值流和优势流,而这
些流
两个流将合并在一起以计算 Q 函数。 我们将看到如何训练决斗的 DQN 来赢得赛车比赛的代理商。
在最后几章中,我们通过使用神经网络逼近 q 函数来了解 Deep Q 学习的工作原理。 在此之后,我们看到了
**深度 Q 网络**
(
**DQN**
)的各种改进,例如双重 Q 学习,决斗网络架构和深度循环 Q 网络。 我们已经了解了 DQN 如何利用回放缓冲区来存储智能体的经验,并使用缓冲区中的小批样本来训练网络。 我们还实现了用于玩 Atari 游戏的 DQN 和一个用于玩 Doom 游戏的
**深度循环 Q 网络**
(
**DRQN**
)。 在本章中,让我们进入决斗 DQN 的详细实现,它与常规 DQN 基本相同,除了最终的全连接层将分解为两个流,即值流和优势流,而这两个流将合并在一起以计算 Q 函数。 我们将看到如何训练决斗的 DQN 来赢得赛车比赛的代理商。
在本章中,您将学习如何实现以下内容:
...
...
new/handson-rl-py/13.md
浏览文件 @
3a4b203c
...
...
@@ -27,7 +27,7 @@ I2A 的架构如下:
![](
img/00409.gif
)
推出编码器分为两层:想象未来和编码器。 想象未来是想象力发生的地方。 看上图。 想象未来由想象核心组成。 当将状态
`o[t]`
馈送到想象力核心时,我们得到了新状态
`o_hat[t + 1]`
和奖励
`r_hat[t + 1]`
,当我们将这个新状态
`o_hat[t + 1]`
馈给了下一个想象力核心时,我们得到了下一个新状态
状态
`o_hat[t + 2]`
和奖励
`r_hat[t + 2]`
。 当我们在某些
`n`
步骤中重复这些步骤时,我们会得到一个基本上是状态和奖励对的推出,然后我们使用诸如 LSTM 的编码器对该推广进行编码。 结果,我们得到了卷展编码。 这些推出编码实际上是描述未来想象路径的嵌入。 我们将针对未来不同的想象路径使用多个推出编码器,并使用聚合器来聚合此推出编码器。
推出编码器分为两层:想象未来和编码器。 想象未来是想象力发生的地方。 看上图。 想象未来由想象核心组成。 当将状态
`o[t]`
馈送到想象力核心时,我们得到了新状态
`o_hat[t + 1]`
和奖励
`r_hat[t + 1]`
,当我们将这个新状态
`o_hat[t + 1]`
馈给了下一个想象力核心时,我们得到了下一个新状态
`o_hat[t + 2]`
和奖励
`r_hat[t + 2]`
。 当我们在某些
`n`
步骤中重复这些步骤时,我们会得到一个基本上是状态和奖励对的推出,然后我们使用诸如 LSTM 的编码器对该推广进行编码。 结果,我们得到了卷展编码。 这些推出编码实际上是描述未来想象路径的嵌入。 我们将针对未来不同的想象路径使用多个推出编码器,并使用聚合器来聚合此推出编码器。
等待。 想象力如何在
**想象力核心**
中发生?
**想象力核心**
中实际上是什么? 下图显示了单个
**想象核心**
:
...
...
@@ -68,7 +68,7 @@ I2A 的架构如下:
我们已经了解了很多有关 DQN 的知识。 我们从原始 DQN 开始,然后看到了各种改进,例如双重 DQN,决斗的网络架构和优先级的经验回放。 我们还学会了构建 DQN 来玩 Atari 游戏。 我们将代理与环境的交互存储在经验缓冲区中,并使代理从这些经验中学习。 但是问题是,我们花了很多培训时间来提高性能。 对于在模拟环境中学习,这很好,但是当我们让代理在现实环境中学习时,会引起很多问题。 为了克服这个问题,谷歌公司 DeepMind 的研究人员在演示(
**DQfd**
)的基础上,对 DQN 进行了改进,称为
**深度 Q 学习**
。
如果我们已经有了一些演示数据,则可以将这些演示直接添加到经验回放缓冲区中。 例如,考虑一个学习玩 Atari 游戏的特工。 如果我们已经有了一些演示数据来告诉我们的代理,哪个状态更好,哪个动作可以提供良好的回报,那么代理可以直接使用此数据进行学习。 即使是少量的演示,也可以提高智能体的表现并最大程度地减少培训时间。 由于演示的数据将直接添加到优先经验重放缓冲区中,因此代理可以从演示数据中使用的数据量以及代理可以从其自己的交互中用于学习的数据量将由优先经验重放来控制
缓冲
,因为经验将被优先考虑。
如果我们已经有了一些演示数据,则可以将这些演示直接添加到经验回放缓冲区中。 例如,考虑一个学习玩 Atari 游戏的特工。 如果我们已经有了一些演示数据来告诉我们的代理,哪个状态更好,哪个动作可以提供良好的回报,那么代理可以直接使用此数据进行学习。 即使是少量的演示,也可以提高智能体的表现并最大程度地减少培训时间。 由于演示的数据将直接添加到优先经验重放缓冲区中,因此代理可以从演示数据中使用的数据量以及代理可以从其自己的交互中用于学习的数据量将由优先经验重放来控制
缓冲区
,因为经验将被优先考虑。
DQfd 中的损失函数将是各种损失的总和。 为了防止我们的代理人过度适合演示数据,我们在网络权重上计算 L2 正则化损失。 我们像往常一样计算 TD 损失,也计算监督损失,以了解我们的特工如何从演示数据中学习。 本文的作者在 DQfd 和各种环境下进行了实验,并且 DQfd 的性能比双重决斗 DQN 优先排序的性能更好,更快。
...
...
new/intel-proj-py/02.md
浏览文件 @
3a4b203c
...
...
@@ -36,7 +36,7 @@
*
人工神经网络的成本面是非凸的; 因此,它需要一组良好的初始权重才能实现合理的收敛。
*
人工神经网络具有很多参数,因此,它们需要大量数据进行训练。 不幸的是,对于许多项目而言,可用于训练神经网络的特定数据不足,而该项目旨在解决的问题非常复杂,需要神经网络解决方案。
在这两种情况下,迁移学习都可以解决。 如果我们使用在大量标记数据上训练的预训练模型,例如 ImageNet 或 CIFAR,则涉及迁移学习的问题将具有很好的初始权重来开始训练; 然后可以根据现有数据对这些权重进行微调。 同样,为了避免在较少的数据量上训练复杂的模型,我们可能希望从预训练的神经网络中提取复杂的特征,然后使用这些特征来训练相对简单的模型,例如 SVM 或逻辑
模型 回归模型。 举个例子,如果我们正在研究图像分类问题,并且已经有一个预训练的模型(例如,基于 1,000 个 ImageNet 的
`VGG16`
网络),我们可以通过
`VGG16`
的权重传递训练数据
并从最后一个池化层提取特征。 如果我们有
`m`
个训练数据点,则可以使用等式
`(xi, yi), i = 1 -> m`
,其中
`x`
是特征向量,
`y`
是输出类。 然后,我们可以从预训练的
`VGG16`
网络中得出复杂的特征,例如向量
`h`
,如下所示:
在这两种情况下,迁移学习都可以解决。 如果我们使用在大量标记数据上训练的预训练模型,例如 ImageNet 或 CIFAR,则涉及迁移学习的问题将具有很好的初始权重来开始训练; 然后可以根据现有数据对这些权重进行微调。 同样,为了避免在较少的数据量上训练复杂的模型,我们可能希望从预训练的神经网络中提取复杂的特征,然后使用这些特征来训练相对简单的模型,例如 SVM 或逻辑
回归模型。 举个例子,如果我们正在研究图像分类问题,并且已经有一个预训练的模型(例如,基于 1,000 个 ImageNet 的
`VGG16`
网络),我们可以通过
`VGG16`
的权重迁移训练数据,
并从最后一个池化层提取特征。 如果我们有
`m`
个训练数据点,则可以使用等式
`(xi, yi), i = 1 -> m`
,其中
`x`
是特征向量,
`y`
是输出类。 然后,我们可以从预训练的
`VGG16`
网络中得出复杂的特征,例如向量
`h`
,如下所示:
![](
img/bb55e155-7677-4ae6-8bf9-9998e72422ab.png
)
...
...
@@ -85,8 +85,8 @@
在上式中,以下内容适用:
*
`N`
代表类别数
*
`O[ij]`
表示已被预测为
`i`
类的图像数量,其中图像的实际类别为
`j`
*
`E[ij]`
表示预测类别为
`i`
的预期观
察次数,而实际类别为
`j`
,假设 预测班和实际班
*
`O[ij]`
表示已被预测为
`i`
类的图像数量,其中图像的
预测类为
`i`
而
实际类别为
`j`
*
`E[ij]`
表示预测类别为
`i`
的预期观
测个数,预测类为
`i`
而实际类别为
`j`
,假设预测类和实际类是独立的
为了更好地了解 kappa 指标组件,让我们看一下苹果和橘子的二进制分类。 假设预测类和实际类的混淆矩阵如下图所示:
...
...
@@ -108,7 +108,7 @@
因此,我们可以看到模型在预测
*橙子*
为
*苹果*
时所产生的误差小于我们不使用模型时所获得的误差。 与没有模型的预测相比,Kappa 通常衡量我们的表现如何。
如果我们观察二次权重的表达式
`w[ij]`
,我们可以看到,当实际标签与预测标签之间的差异较大时,权重的值会更
高 更伟
大。 由于类的序数性质,这是有道理的。 例如,让我们用类别标签 0 表示完美状态的眼睛; 患有轻度糖尿病性视网膜病的患者; 中度糖尿病视网膜病变伴两个; 并伴有严重的糖尿病性视网膜病变。 当轻度糖尿病性视网膜病被错误地分类为严重糖尿病性视网膜病而不是中度糖尿病性视网膜病时,这个二次项权重
`w[ij]`
将会更高。 这是有道理的,因为即使我们没有设法预测实际类别,我们也希望预测一个尽可能接近实际状况的状况。
如果我们观察二次权重的表达式
`w[ij]`
,我们可以看到,当实际标签与预测标签之间的差异较大时,权重的值会更大。 由于类的序数性质,这是有道理的。 例如,让我们用类别标签 0 表示完美状态的眼睛; 患有轻度糖尿病性视网膜病的患者; 中度糖尿病视网膜病变伴两个; 并伴有严重的糖尿病性视网膜病变。 当轻度糖尿病性视网膜病被错误地分类为严重糖尿病性视网膜病而不是中度糖尿病性视网膜病时,这个二次项权重
`w[ij]`
将会更高。 这是有道理的,因为即使我们没有设法预测实际类别,我们也希望预测一个尽可能接近实际状况的状况。
我们将使用
`sklearn.metrics.cohen_kappa_score`
和
`weights= "quadratic"`
来计算 kappa 得分。 权重越高,kappa 得分越低。
...
...
new/intel-proj-py/03.md
浏览文件 @
3a4b203c
...
...
@@ -7,7 +7,7 @@
*
从源语言到目标语言的词到词映射并非始终可用。
*
即使在源语言和目标语言之间确实存在精确的词对词映射,这些语言的句法结构通常也不相互对应。 机器翻译中的此问题通常称为
*对齐错误*
。
但是,随着
**循环神经网络**
(
**RNN**
)架构的最新进展,机器翻译不仅提供了更高的翻译质量,而且还提供了更高的翻译质量
这种系统的复杂性远远小于传统系统。
但是,随着
**循环神经网络**
(
**RNN**
)架构的最新进展,机器翻译不仅提供了更高的翻译质量,而且还提供了更高的翻译质量
。
这种系统的复杂性远远小于传统系统。
机器翻译系统大致可分为三类:基于规则的机器翻译,统计机器翻译和神经机器翻译。
...
...
@@ -43,7 +43,7 @@
# 分析阶段
基于规则的机器翻译的第一阶段是分析阶段,其中分析源语言文本以提取与形态,词性,命名实体识别以及词义歧义有关的信息。 形态信息涉及单词的结构,词干的派生方式,词根的检测等。 词性标记器使用可能的语音标记来标记文本中的每个单词,例如名词,动词,副词,形容词等。 接下来是
**命名实体识别**
(
**NER**
)任务,该任务尝试将命名实体分类到预定义的存储桶中,例如人员名称,位置,组织名称
和
以此类推。 NER 之后是单词义消歧,它试图识别句子中如何使用特定单词。
基于规则的机器翻译的第一阶段是分析阶段,其中分析源语言文本以提取与形态,词性,命名实体识别以及词义歧义有关的信息。 形态信息涉及单词的结构,词干的派生方式,词根的检测等。 词性标记器使用可能的语音标记来标记文本中的每个单词,例如名词,动词,副词,形容词等。 接下来是
**命名实体识别**
(
**NER**
)任务,该任务尝试将命名实体分类到预定义的存储桶中,例如人员名称,位置,组织名称
,
以此类推。 NER 之后是单词义消歧,它试图识别句子中如何使用特定单词。
# 词汇转移阶段
...
...
@@ -102,7 +102,7 @@
![](
img/b00765b5-99f5-4dc3-a9cd-32f3ae13a51f.png
)
对于二元模型,给定
当前单词
`t[1]`
的下一个单词的条件概率为
`t[2]`
计算训练语料库中偶对
`(t[1], t[2])`
的总数,并根据出现的次数归一化 语料库中
`t[1]`
的含义
:
对于二元模型,给定
训练语料库中偶对
`(t[1], t[2])`
的总数,计算当前单词
`t[1]`
的下一个单词
`t[2]`
的条件概率,并根据语料库中
`t[1]`
出现的次数归一化
:
![](
img/4011e558-b4fc-468a-89cc-3ae457494668.png
)
...
...
@@ -154,7 +154,7 @@
# 翻译模型
**转换模型**
可以视为机器翻译模型的核心。 在翻译模型中,我们需要估计概率
`P(s / t)`
,其中
`s`
是源语言句子,
`t`
是目标语言
句子。 在这里,给出了源句,而目标是我们试图找出的句子。 因此,该概率可以称为源句子给定目标句子的可能性。 例如,假设我们正在将源文本从法语翻译为英语。 因此,在
`P(s / t)`
的情况下,我们的目标语言是法语,我们的源语言是英语,而在实际翻译的情况下,即
`P(s / t)P(t)`
,我们的源语言是法语,而我们的目标语言是英语。
**转换模型**
可以视为机器翻译模型的核心。 在翻译模型中,我们需要估计概率
`P(s / t)`
,其中
`s`
是源语言句子,
`t`
是目标语言
的
句子。 在这里,给出了源句,而目标是我们试图找出的句子。 因此,该概率可以称为源句子给定目标句子的可能性。 例如,假设我们正在将源文本从法语翻译为英语。 因此,在
`P(s / t)`
的情况下,我们的目标语言是法语,我们的源语言是英语,而在实际翻译的情况下,即
`P(s / t)P(t)`
,我们的源语言是法语,而我们的目标语言是英语。
该翻译主要包括三个部分:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录