Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
D_ACMER
apachecn-dl-zh
提交
835c3110
A
apachecn-dl-zh
项目概览
D_ACMER
/
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,发现更多精彩内容 >>
提交
835c3110
编写于
12月 22, 2020
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2020-12-22 22:34:48
上级
38da6c17
变更
10
显示空白变更内容
内联
并排
Showing
10 changed file
with
70 addition
and
70 deletion
+70
-70
new/handson-rl-py/00.md
new/handson-rl-py/00.md
+2
-2
new/handson-rl-py/07.md
new/handson-rl-py/07.md
+2
-2
new/handson-rl-py/08.md
new/handson-rl-py/08.md
+16
-16
new/handson-rl-py/09.md
new/handson-rl-py/09.md
+8
-8
new/handson-rl-py/10.md
new/handson-rl-py/10.md
+6
-6
new/handson-rl-py/11.md
new/handson-rl-py/11.md
+9
-9
new/handson-rl-py/12.md
new/handson-rl-py/12.md
+14
-14
new/handson-rl-py/13.md
new/handson-rl-py/13.md
+9
-9
new/handson-rl-py/14.md
new/handson-rl-py/14.md
+3
-3
new/intel-proj-py/09.md
new/intel-proj-py/09.md
+1
-1
未找到文件。
new/handson-rl-py/00.md
浏览文件 @
835c3110
...
...
@@ -24,7 +24,7 @@
第 8 章,“使用深度 Q 网络玩 Atari 游戏”涵盖了最广泛使用的深度强化学习算法之一,称为深度 Q 网络(DQN)。 我们将通过探索 DQN 的各个组成部分来学习 DQN,然后我们将了解如何构建一个代理来使用 DQN 玩 Atari 游戏。 然后,我们将研究 DQN 体系结构的一些升级,例如双 DQN 和决斗 DQN。
第 9 章,“使用深度
递归 Q 网络玩末日游戏”,介绍了深度递归 Q 网络(DRQN)及其与 DQN 的区别。 我们将看到如何构建使用 DRQN 播放 Doom 的代理。 在本章的后面,我们将学习深度注意力递归
Q 网络,该网络将注意力机制添加到 DRQN 体系结构中。
第 9 章,“使用深度
循环 Q 网络玩末日游戏”,介绍了深度循环 Q 网络(DRQN)及其与 DQN 的区别。 我们将看到如何构建使用 DRQN 播放 Doom 的代理。 在本章的后面,我们将学习深度注意力循环
Q 网络,该网络将注意力机制添加到 DRQN 体系结构中。
第 10 章,“异步优势参与者批评者网络”解释了异步优势参与者批评者(A3C)网络的工作方式。 我们将详细探讨 A3C 架构,然后将学习如何构建使用 A3C 上山的代理。
...
...
@@ -32,7 +32,7 @@
第 12 章,“Capstone 项目–使用 DQN 进行赛车”提供了逐步的方法,以使用对决 DQN 构建代理以赢得赛车游戏。
第 13 章,“最近的进展和后续步骤”提供了有关强化学习的各种进展的信息,例如想象力增强代理,从人的偏好中学习,从示威活动中进行深度学习以及
后见之明
,然后我们将研究不同类型的强化学习方法,例如分层强化学习和逆强化学习。
第 13 章,“最近的进展和后续步骤”提供了有关强化学习的各种进展的信息,例如想象力增强代理,从人的偏好中学习,从示威活动中进行深度学习以及
事后
,然后我们将研究不同类型的强化学习方法,例如分层强化学习和逆强化学习。
# 充分利用这本书
...
...
new/handson-rl-py/07.md
浏览文件 @
835c3110
...
...
@@ -431,7 +431,7 @@ RNN 是一种特殊类型的神经网络,广泛应用于顺序数据。 换句
# 通过时间反向传播
现在,我们如何训练 RNN? 就像我们训练了正常的神经网络一样,我们可以使用反向传播来训练 RNN。 但是在 RNN 中,由于所有时间步长都具有依赖性,因此每个输出的梯度将不仅取决于当前时间步长,还取决于先前时间步长。 我们将此
**
反向传播称为时间
**
(
**BPTT**
)。 它与反向传播基本相同,不同之处在于它应用了 RNN。 要查看它如何在 RNN 中发生,让我们考虑一下 RNN 的展开版本,如下图所示:
现在,我们如何训练 RNN? 就像我们训练了正常的神经网络一样,我们可以使用反向传播来训练 RNN。 但是在 RNN 中,由于所有时间步长都具有依赖性,因此每个输出的梯度将不仅取决于当前时间步长,还取决于先前时间步长。 我们将此
**
沿时间的反向传播
**
(
**BPTT**
)。 它与反向传播基本相同,不同之处在于它应用了 RNN。 要查看它如何在 RNN 中发生,让我们考虑一下 RNN 的展开版本,如下图所示:
![](
img/00221.gif
)
...
...
@@ -1052,7 +1052,7 @@ with tf.Session() as sess:
在本章中,我们学习了神经网络的实际工作原理,然后使用 TensorFlow 构建了一个神经网络来对手写数字进行分类。 我们还看到了不同类型的神经网络,例如 RNN,可以记住内存中的信息。 然后,我们看到了 LSTM 网络,该网络用于通过保持多个门来将信息保留在内存中(只要需要)来克服消失的梯度问题。 我们还看到了另一个有趣的神经网络,用于识别图像,称为 CNN。 我们看到了 CNN 如何使用不同的图层来理解图像。 之后,我们学习了如何使用 TensorFlow 构建 CNN 以识别时尚产品。
在下一章第 8 章,“使用深
层
Q 网络玩 Atari 游戏”中,我们将看到神经网络实际上将如何帮助我们的 RL 代理商更有效地学习。
在下一章第 8 章,“使用深
度
Q 网络玩 Atari 游戏”中,我们将看到神经网络实际上将如何帮助我们的 RL 代理商更有效地学习。
# 问题
...
...
new/handson-rl-py/08.md
浏览文件 @
835c3110
...
...
@@ -10,7 +10,7 @@
*
DQN 的体系结构
*
建立代理来玩 Atari 游戏
*
双 DQN
*
优先
体验重播
*
优先
经验回放
# 什么是深度 Q 网络?
...
...
@@ -48,13 +48,13 @@ DQN 的第一层是卷积网络,网络的输入将是游戏屏幕的原始帧
为了预测游戏状态的 Q 值,我们不仅仅使用当前的游戏屏幕; 我们还考虑了过去的四个游戏屏幕。 这是为什么? 考虑“吃豆人”游戏,其中“吃豆人”的目标是移动并吞噬所有点。 仅查看当前的游戏屏幕,我们就无法知道吃豆人的前进方向。 但是,如果我们有过去的游戏画面,我们可以了解吃豆人的发展方向。 我们使用过去的四个游戏屏幕以及当前的游戏屏幕作为输入。
#
体验重播
#
经验回放
我们知道,在 RL 环境中,我们通过执行某些操作
`a`
,从一个状态
`s`
转移到下一状态
`s'`
,并获得奖励
`r`
。 我们将此转移信息作为!
[](
img/00250.jpeg
)
保存在称为
重播缓冲区或体验重播
的缓冲区中。 这些转移称为代理的经验。
我们知道,在 RL 环境中,我们通过执行某些操作
`a`
,从一个状态
`s`
转移到下一状态
`s'`
,并获得奖励
`r`
。 我们将此转移信息作为!
[](
img/00250.jpeg
)
保存在称为
回放缓冲区或经验回放
的缓冲区中。 这些转移称为代理的经验。
体验重播的关键思想是,我们使用从重播缓冲区采样的转移来训练深度 Q 网络,而不是使用最后的转移进行训练。 座席的经历一次相关,因此从重播
缓冲区中随机选择一批训练样本将减少座席的经历之间的相关性,并有助于座席更好地从广泛的经验中学习。
经验回放的关键思想是,我们使用从回放缓冲区采样的转移来训练深度 Q 网络,而不是使用最后的转移进行训练。 座席的经历一次相关,因此从回放
缓冲区中随机选择一批训练样本将减少座席的经历之间的相关性,并有助于座席更好地从广泛的经验中学习。
而且,神经网络将过拟合相关经验,因此通过从答复缓冲区中选择随机的经验批次,我们将减少过拟合。 我们可以使用统一采样来采样经验。 我们可以将
体验重播视为队列而不是列表。 重播缓冲区将仅存储固定数量的最新体
验,因此,当出现新信息时,我们将删除旧信息:
而且,神经网络将过拟合相关经验,因此通过从答复缓冲区中选择随机的经验批次,我们将减少过拟合。 我们可以使用统一采样来采样经验。 我们可以将
经验回放视为队列而不是列表。 回放缓冲区将仅存储固定数量的最新经
验,因此,当出现新信息时,我们将删除旧信息:
![](
img/00251.gif
)
...
...
@@ -83,8 +83,8 @@ DQN 的第一层是卷积网络,网络的输入将是游戏屏幕的原始帧
1.
首先,我们预处理游戏屏幕(状态
`s`
)并将其馈送到 DQN,DQN 将返回该状态下所有可能动作的
`Q`
值。
2.
现在,我们使用 epsilon-greedy 策略选择一个动作:对于概率 epsilon,我们选择一个随机动作
`a`
;对于概率为 1-epsilon,我们选择一个具有最大
`Q`
的动作 ]值,例如!
[](
img/00258.jpeg
)
。
3.
在选择动作
`a`
之后,我们在
`s`
状态下执行此动作,然后移至新的
`s'`
状态并获得奖励。 下一个状态
`s'`
是下一个游戏屏幕的预处理图像。
4.
我们将此转移存储在
`<s,a,r,s'>`
的
重播
缓冲区中。
5.
接下来,我们从
重播
缓冲区中抽取一些随机的转移批次并计算损失。
4.
我们将此转移存储在
`<s,a,r,s'>`
的
回放
缓冲区中。
5.
接下来,我们从
回放
缓冲区中抽取一些随机的转移批次并计算损失。
6.
我们知道!
[](
img/00259.jpeg
)
就像目标
`Q`
与预测的
`Q`
之间的平方差一样。
7.
我们针对实际网络参数!
[](
img/00260.jpeg
)
执行梯度下降,以最大程度地减少这种损失。
8.
在每个
`k`
个步骤之后,我们将实际网络权重!
[](
img/00261.jpeg
)
复制到目标网络权重!
[](
img/00262.jpeg
)
。
...
...
@@ -198,9 +198,9 @@ def epsilon_greedy(action, step):
return
action
```
现在,我们初始化长度为 20000 的
体验重播缓冲区,其中包含该体
验。
现在,我们初始化长度为 20000 的
经验回放缓冲区,其中包含该经
验。
我们将座席的所有经验(状态,动作,奖励)存储在经验
重播
缓冲区中,并抽样此小批经验来训练网络:
我们将座席的所有经验(状态,动作,奖励)存储在经验
回放
缓冲区中,并抽样此小批经验来训练网络:
```
py
def
sample_memories
(
batch_size
):
...
...
@@ -404,9 +404,9 @@ with tf.Session() as sess:
在前面的公式中,我们有两个
`Q`
函数,每个函数具有不同的权重。 因此,权重为!
[](
img/00270.jpeg
)
的
`Q`
函数用于选择操作,权重为!
[](
img/00271.jpeg
)
的其他
`Q`
函数用于评估操作。 我们还可以切换这两个
`Q`
功能的角色。
# 优先
体验重播
# 优先
经验回放
在 DQN 架构中,我们使用经验
重播
来消除训练样本之间的相关性。 但是,从记忆重放中均匀采样转移不是最佳方法。 相反,我们可以确定转换的优先级并根据优先级进行采样。 优先安排转移有助于网络快速有效地学习。 我们如何确定转移的优先级? 我们优先考虑具有较高 TD 错误的转换。 我们知道,TD 误差指定了估计的 Q 值和实际 Q 值之间的差。 因此,具有较高 TD 误差的转移是我们必须关注和学习的转移,因为这些转移与我们的估计背道而驰。 凭直觉,让我们说您尝试解决一系列问题,但是您无法解决其中两个问题。 然后,您仅将这两个问题放在首位,以专注于问题所在并尝试解决该问题:
在 DQN 架构中,我们使用经验
回放
来消除训练样本之间的相关性。 但是,从记忆重放中均匀采样转移不是最佳方法。 相反,我们可以确定转换的优先级并根据优先级进行采样。 优先安排转移有助于网络快速有效地学习。 我们如何确定转移的优先级? 我们优先考虑具有较高 TD 错误的转换。 我们知道,TD 误差指定了估计的 Q 值和实际 Q 值之间的差。 因此,具有较高 TD 误差的转移是我们必须关注和学习的转移,因为这些转移与我们的估计背道而驰。 凭直觉,让我们说您尝试解决一系列问题,但是您无法解决其中两个问题。 然后,您仅将这两个问题放在首位,以专注于问题所在并尝试解决该问题:
![](
img/00272.gif
)
...
...
@@ -426,7 +426,7 @@ with tf.Session() as sess:
![](
img/00283.jpeg
)
`rank(i)`
指定转移
`i`
在
重播
缓冲区中的位置,在该位置中,转移从高 TD 错误到低 TD 错误被分类。 计算优先级后,我们可以使用相同的公式!
[](
img/00284.jpeg
)
将优先级转换为概率。
`rank(i)`
指定转移
`i`
在
回放
缓冲区中的位置,在该位置中,转移从高 TD 错误到低 TD 错误被分类。 计算优先级后,我们可以使用相同的公式!
[](
img/00284.jpeg
)
将优先级转换为概率。
# 决斗网络架构
...
...
@@ -449,20 +449,20 @@ with tf.Session() as sess:
# 概要
在本章中,我们学习了一种非常流行的深度强化学习算法,称为 DQN。 我们看到了如何使用深度神经网络来逼近 Q 函数。 我们还学习了如何建立代理来玩 Atari 游戏。 后来,我们研究了 DQN 的一些改进,例如双 DQN,它用于避免高估 Q 值。 然后,我们研究了优先级
体验重放,优先级体
验和决斗的网络体系结构,该体系结构将 Q 函数计算分为两个流,分别称为值流和优势流。
在本章中,我们学习了一种非常流行的深度强化学习算法,称为 DQN。 我们看到了如何使用深度神经网络来逼近 Q 函数。 我们还学习了如何建立代理来玩 Atari 游戏。 后来,我们研究了 DQN 的一些改进,例如双 DQN,它用于避免高估 Q 值。 然后,我们研究了优先级
经验重放,优先级经
验和决斗的网络体系结构,该体系结构将 Q 函数计算分为两个流,分别称为值流和优势流。
在下一章第 9 章,“实用深度
递归
Q 网络玩末日之战”中,我们将介绍一种称为 DRQN 的非常酷的 DQN 变体,它利用 RNN 近似于一个 Q 功能。
在下一章第 9 章,“实用深度
循环
Q 网络玩末日之战”中,我们将介绍一种称为 DRQN 的非常酷的 DQN 变体,它利用 RNN 近似于一个 Q 功能。
# 问题
问题列表如下:
1.
什么是 DQN?
2.
体验重播
有什么需要?
2.
经验回放
有什么需要?
3.
为什么我们要保留一个单独的目标网络?
4.
为什么 DQN 高估了?
5.
双重 DQN 如何避免高估 Q 值?
6.
优先
体验中的优先体验如何重播
?
6.
优先
经验中的优先经验如何回放
?
7.
对决架构有什么需求?
# 进一步阅读
...
...
new/handson-rl-py/09.md
浏览文件 @
835c3110
# 用深度循环 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,13 +12,13 @@
# DRQN
那么,当我们在 Atari 游戏中以人为水平执行 DQN 时,为什么我们需要 DRQN? 为了回答这个问题,让我们理解
**部分可观察
到
的马尔可夫决策过程**
(
**POMDP**
)的问题。 当我们可获得的关于环境的信息有限时,该环境称为部分可观察的 MDP。 到目前为止,在前面的章节中,我们已经看到了一个完全可观察的 MDP,在其中我们了解所有可能的动作和状态-尽管该代理可能不知道转移和奖励的可能性,但它对环境有完整的了解,例如,冰冻的湖泊 环境,我们清楚地知道了环境的所有状态和行为; 我们轻松地将该环境建模为一个完全可观察的 MDP。 但是大多数现实世界环境只能部分观察到。 我们看不到所有状态。 考虑代理学习如何在现实环境中行走; 显然,代理将不会完全了解环境,它将无法获得任何信息。 在 POMDP 中,状态仅提供部分信息,但是将有关过去状态的信息保留在内存中可能会帮助代理更好地了解环境的性质并改善策略。 因此,在 POMDP 中,我们需要保留有关先前状态的信息,以便采取最佳措施。
那么,当我们在 Atari 游戏中以人为水平执行 DQN 时,为什么我们需要 DRQN? 为了回答这个问题,让我们理解
**部分可观察的马尔可夫决策过程**
(
**POMDP**
)的问题。 当我们可获得的关于环境的信息有限时,该环境称为部分可观察的 MDP。 到目前为止,在前面的章节中,我们已经看到了一个完全可观察的 MDP,在其中我们了解所有可能的动作和状态-尽管该代理可能不知道转移和奖励的可能性,但它对环境有完整的了解,例如,冰冻的湖泊 环境,我们清楚地知道了环境的所有状态和行为; 我们轻松地将该环境建模为一个完全可观察的 MDP。 但是大多数现实世界环境只能部分观察到。 我们看不到所有状态。 考虑代理学习如何在现实环境中行走; 显然,代理将不会完全了解环境,它将无法获得任何信息。 在 POMDP 中,状态仅提供部分信息,但是将有关过去状态的信息保留在内存中可能会帮助代理更好地了解环境的性质并改善策略。 因此,在 POMDP 中,我们需要保留有关先前状态的信息,以便采取最佳措施。
为了回顾我们在前几章中学到的知识,请考虑以下所示的 Pong 游戏。 仅通过查看当前的游戏屏幕,我们就可以知道球的位置,但是我们还需要知道球的运动方向和球的速度,以便采取最佳行动。 但是,仅查看当前的游戏屏幕并不能告诉我们球的方向和速度:
![](
img/00287.jpeg
)
为了克服这个问题,我们将不仅仅考虑当前的游戏屏幕,而将使用过去的四个游戏屏幕来了解球的方向和速度。 这就是我们在 DQN 中看到的。 我们将过去的四个游戏屏幕以及当前的游戏屏幕作为输入输入到卷积层,并接收该状态下所有可能动作的 Q 值。 但是,您认为仅使用过去的四个屏幕将有助于我们了解不同的环境吗? 在某些环境下,我们甚至可能需要过去的 100 个游戏屏幕来更好地了解当前游戏状态。 但是,堆叠过去的
`n`
游戏画面会减慢我们的训练过程,而且还会增加我们的
体验重播
缓冲区的大小。
为了克服这个问题,我们将不仅仅考虑当前的游戏屏幕,而将使用过去的四个游戏屏幕来了解球的方向和速度。 这就是我们在 DQN 中看到的。 我们将过去的四个游戏屏幕以及当前的游戏屏幕作为输入输入到卷积层,并接收该状态下所有可能动作的 Q 值。 但是,您认为仅使用过去的四个屏幕将有助于我们了解不同的环境吗? 在某些环境下,我们甚至可能需要过去的 100 个游戏屏幕来更好地了解当前游戏状态。 但是,堆叠过去的
`n`
游戏画面会减慢我们的训练过程,而且还会增加我们的
经验回放
缓冲区的大小。
因此,只要需要,我们就可以利用 RNN 的优势来理解和保留有关先前状态的信息。 在第 7 章“深度学习基础知识”中,我们了解了如何将
**长短期记忆循环神经网络**
(
**LSTM RNN**
)用于 通过保留,忘记和更新所需的信息来生成文本以及了解文本的上下文。 我们将通过扩展 LSTM 层来修改 DQN 体系结构,以了解先前的信息。 在 DQN 架构中,我们用 LSTM RNN 替换了第一卷积后全连接层。 这样,我们也可以解决部分可观察性的问题,因为现在我们的代理可以记住过去的状态并可以改进策略。
...
...
@@ -30,7 +30,7 @@
因此,我们将游戏屏幕作为卷积层的输入。 卷积层对图像进行卷积并生成特征图。 然后将生成的特征图传递到 LSTM 层。 LSTM 层具有用于保存信息的内存。 LSTM 层保留有关重要的先前游戏状态的信息,并根据需要随时间步长更新其内存。 穿过全连接层后,它将输出
`Q`
值。 因此,与 DQN 不同,我们不直接估计
`Q(s[t], a[t])`
。 相反,我们估算
`Q(h[t], a[t])`
,其中
`h[t]`
是网络在上一个时间步长返回的输入。 即,
`h[t] = LSTM(h[t-1], o[t])`
。 当我们使用 RNN 时,我们通过时间的反向传播来训练我们的网络。
等待。
体验重播缓冲区如何? 在 DQN 中,为避免相关的体验,我们使用了体验重播,该体验存储了游戏的转移,并使用了随机的一组体验来训练网络。 对于 DRQN,我们将整个情节存储在体验缓冲区中,并从随机的情节批次中随机采样
`n`
个步骤。 因此,通过这种方式,我们既可以适应随机化,又可以适应另一种实际的体
验。
等待。
经验回放缓冲区如何? 在 DQN 中,为避免相关的经验,我们使用了经验回放,该经验存储了游戏的转移,并使用了随机的一组经验来训练网络。 对于 DRQN,我们将整个情节存储在经验缓冲区中,并从随机的情节批次中随机采样
`n`
个步骤。 因此,通过这种方式,我们既可以适应随机化,又可以适应另一种实际的经
验。
# 训练特工玩《毁灭战士》
...
...
@@ -322,7 +322,7 @@ class DRQN():
```
现在,我们定义
`ExperienceReplay`
类以实现
体验重播缓冲区。 我们将座席的所有体验(即状态,动作和奖励)存储在体验重播缓冲区中,并且我们抽取了这一小批量体
验来训练网络:
现在,我们定义
`ExperienceReplay`
类以实现
经验回放缓冲区。 我们将座席的所有经验(即状态,动作和奖励)存储在经验回放缓冲区中,并且我们抽取了这一小批量经
验来训练网络:
```
py
class
ExperienceReplay
():
...
...
@@ -576,8 +576,8 @@ DARQN 的体系结构如下所示:
注意有两种类型:
*
**软
关注
**
:我们知道,卷积层产生的特征图将作为输入提供给关注层,然后生成上下文向量。 轻描淡写地,这些上下文向量只是卷积层产生的所有输出(特征图)的加权平均值。 根据功能的相对重要性选择权重。
*
**
刻苦关注**
:刻苦关注
,根据某些位置选择策略
`π`
,我们仅关注图像在特定时间步长
`t`
上的特定位置。 该策略由神经网络表示,其权重是策略参数,网络的输出是位置选择概率。 但是,硬注意力不比软注意力好多少。
*
**软
注意力
**
:我们知道,卷积层产生的特征图将作为输入提供给关注层,然后生成上下文向量。 轻描淡写地,这些上下文向量只是卷积层产生的所有输出(特征图)的加权平均值。 根据功能的相对重要性选择权重。
*
**
硬注意力**
:硬注意力
,根据某些位置选择策略
`π`
,我们仅关注图像在特定时间步长
`t`
上的特定位置。 该策略由神经网络表示,其权重是策略参数,网络的输出是位置选择概率。 但是,硬注意力不比软注意力好多少。
# 概要
...
...
@@ -591,7 +591,7 @@ DARQN 的体系结构如下所示:
1.
DQN 和 DRQN 有什么区别?
2.
DQN 的缺点是什么?
3.
我们如何在 DQN 中设置
体验重播
?
3.
我们如何在 DQN 中设置
经验回放
?
4.
DRQN 和 DARQN 有什么区别?
5.
为什么我们需要 DARQN?
6.
注意机制有哪些不同类型?
...
...
new/handson-rl-py/10.md
浏览文件 @
835c3110
# 异步优势演员评论网络
在前面的章节中,我们已经看到了
**深度 Q 网络**
(
**DQN**
)多么酷,以及它如何成功地推广了学习玩具有人类水平性能的 Atari 系列游戏的方法 。 但是我们面临的问题是它需要大量的计算能力和训练时间。 因此,Google 的 DeepMind 引入了一种称为
**异步优势演员
批判
**
(
**A3C**
)的新算法,该算法在其他深度强化学习算法中占主导地位,因为它需要较少的计算能力和训练时间。 A3C 的主要思想是,它使用多个代理并行学习并汇总其整体经验。 在本章中,我们将了解 A3C 网络如何工作。 接下来,我们将学习如何使用 A3C 构建代理以推动一座山。
在前面的章节中,我们已经看到了
**深度 Q 网络**
(
**DQN**
)多么酷,以及它如何成功地推广了学习玩具有人类水平性能的 Atari 系列游戏的方法 。 但是我们面临的问题是它需要大量的计算能力和训练时间。 因此,Google 的 DeepMind 引入了一种称为
**异步优势演员
评论家
**
(
**A3C**
)的新算法,该算法在其他深度强化学习算法中占主导地位,因为它需要较少的计算能力和训练时间。 A3C 的主要思想是,它使用多个代理并行学习并汇总其整体经验。 在本章中,我们将了解 A3C 网络如何工作。 接下来,我们将学习如何使用 A3C 构建代理以推动一座山。
在本章中,您将学习以下内容:
*
异步优势演员
批判
算法
*
异步优势演员
评论家
算法
*
三成
*
A3C 的架构
*
A3C 如何运作
...
...
@@ -19,11 +19,11 @@ A3C 网络风起云涌,并接管了 DQN。 除了前面提到的优点之外
潜水之前,A3C 是什么意思? 这三个 As 代表什么?
在 A3C 中,第一个 A
**异步**
表示其工作方式。 在这里,我们有多个与环境交互的代理,而不是像 DQN 那样有单个代理尝试学习最佳策略。 由于我们有多个代理同时与环境交互,因此我们将环境的副本提供给每个代理,以便每个代理可以与自己的环境副本进行交互。 因此,所有这些多个代理都称为辅助代理,我们有一个单独的代理,称为全局网络,所有代理都向其报告。 全球网络汇集了学习内容。
在 A3C 中,第一个 A
,
**异步**
表示其工作方式。 在这里,我们有多个与环境交互的代理,而不是像 DQN 那样有单个代理尝试学习最佳策略。 由于我们有多个代理同时与环境交互,因此我们将环境的副本提供给每个代理,以便每个代理可以与自己的环境副本进行交互。 因此,所有这些多个代理都称为辅助代理,我们有一个单独的代理,称为全局网络,所有代理都向其报告。 全球网络汇集了学习内容。
第二个 A 是
**优势**
; 在讨论 DQN 的决斗网络体系结构时,我们已经看到了优势功能。 优势函数可以定义为 Q 函数和值函数之间的差。 我们知道 Q 函数指定状态下动作的状态,而 value 函数指定状态下状态的状态。 现在,凭直觉思考; 两者之间的区别意味着什么? 它告诉我们,与其他所有动作相比,代理在状态
`s`
下执行动作
`a`
有多好。
第三个 A 是
**Actor Critic**
; 该架构具有两种类型的网络,即参与者和评论者。 演员的角色是学习策略,评论家的角色是评估演员学习的策略有多好。
第三个 A 是
**演员评论家**
; 该架构具有两种类型的网络,即参与者和评论者。 演员的角色是学习策略,评论家的角色是评估演员学习的策略有多好。
# A3C 的架构
...
...
@@ -31,7 +31,7 @@ A3C 网络风起云涌,并接管了 DQN。 除了前面提到的优点之外
![](
img/00292.gif
)
仅通过查看上图就可以了解 A3C 的工作原理。 正如我们所讨论的,我们可以看到有多个工作程序代理,每个工作代理都与自己的环境副本进行交互。 然后,工作人员将学习策略并计算策略损失的梯度,并将该梯度更新到全局网络。 每个代理商都会同时更新此全球网络。 A3C 的优点之一是,与 DQN 不同,我们在这里不使用
体验重播内存。 实际上,这是 A3C 网络的最大优势之一。 由于我们有多个与环境交互并将信息聚合到全球网络的代理,因此体验之间的相关性很低甚至没有。 体验重播需要占用所有体
验的大量内存。 由于 A3C 不需要它,因此我们的存储空间和计算时间将减少。
仅通过查看上图就可以了解 A3C 的工作原理。 正如我们所讨论的,我们可以看到有多个工作程序代理,每个工作代理都与自己的环境副本进行交互。 然后,工作人员将学习策略并计算策略损失的梯度,并将该梯度更新到全局网络。 每个代理商都会同时更新此全球网络。 A3C 的优点之一是,与 DQN 不同,我们在这里不使用
经验回放内存。 实际上,这是 A3C 网络的最大优势之一。 由于我们有多个与环境交互并将信息聚合到全球网络的代理,因此经验之间的相关性很低甚至没有。 经验回放需要占用所有经
验的大量内存。 由于 A3C 不需要它,因此我们的存储空间和计算时间将减少。
# A3C 如何运作
...
...
@@ -441,7 +441,7 @@ tensorboard --logdir=logs --port=6007 --host=127.0.0.1
# 概要
在本章中,我们学习了 A3C 网络的工作方式。 在 A3C 中,“异步”表示多个代理通过与环境的多个副本进行交互而独立工作,“优势”表示“优势”功能,即 Q 函数和值函数之间的差异,“
行为者批判”是指行为者批判
网络,其中行为者 网络负责生成策略,评论家网络评估由参与者网络生成的策略。 我们已经了解了 A3C 的工作原理,并了解了如何使用该算法解决山地车问题。
在本章中,我们学习了 A3C 网络的工作方式。 在 A3C 中,“异步”表示多个代理通过与环境的多个副本进行交互而独立工作,“优势”表示“优势”功能,即 Q 函数和值函数之间的差异,“
演员评论家”是指演员评论家
网络,其中行为者 网络负责生成策略,评论家网络评估由参与者网络生成的策略。 我们已经了解了 A3C 的工作原理,并了解了如何使用该算法解决山地车问题。
在下一章
[
,第 11 章
](
11.html#5RRUQ0-3c5bb317ad314d43ac43a332c0db6f00
)
,“策略梯度和优化”中,我们将看到无需 Q 函数即可直接优化策略的策略梯度方法。
...
...
new/handson-rl-py/11.md
浏览文件 @
835c3110
# 策略梯度和优化
在最后三章中,我们学习了各种深度强化学习算法,例如
**深度 Q 网络**
(
**DQN**
),
**深度
递归
Q 网络**
(
[
HTG6 DRQN )和**异步优势演员评论家**(**A3C**)网络。 在所有算法中,我们的目标是找到正确的策略,以便我们能够最大化回报。 我们使用 Q 函数来找到最佳策略,因为 Q 函数告诉我们哪个动作是在某种状态下执行的最佳动作。 您认为我们不使用 Q 函数就能直接找到最优策略吗? 是。 我们可以。 在策略梯度方法中,我们无需使用 Q 函数就可以找到最优策略。
在最后三章中,我们学习了各种深度强化学习算法,例如
**深度 Q 网络**
(
**DQN**
),
**深度
循环
Q 网络**
(
[
HTG6 DRQN )和**异步优势演员评论家**(**A3C**)网络。 在所有算法中,我们的目标是找到正确的策略,以便我们能够最大化回报。 我们使用 Q 函数来找到最佳策略,因为 Q 函数告诉我们哪个动作是在某种状态下执行的最佳动作。 您认为我们不使用 Q 函数就能直接找到最优策略吗? 是。 我们可以。 在策略梯度方法中,我们无需使用 Q 函数就可以找到最优策略。
在本章中,我们将详细了解策略梯度。 我们还将研究不同类型的策略梯度方法,例如深度确定性策略梯度,然后是最新的策略优化方法,例如信任区域策略优化和近端策略优化。
...
...
@@ -9,7 +9,7 @@
* 策略梯度
* 使用策略梯度的月球着陆器
* 深度确定性策略梯度
* 使用
`d`
**深度确定性策略梯度**(**DDPG**)摆动
* 使用**深度确定性策略梯度**(**DDPG**)摆动
* 信任区域策略优化
* 近端策略优化
...
...
@@ -220,11 +220,11 @@ class PolicyGradient:
在第 8 章,“深度 Q 网络和 Atari 游戏”中,我们研究了 DQN 的工作原理,并应用了 DQN 玩 Atari 游戏。 但是,在那些离散的环境中,我们只有一组有限的动作。 想象一个连续的环境空间,例如训练机器人走路; 在那些环境中,应用 Q 学习是不可行的,因为要找到一个贪婪的策略将需要在每一步进行很多优化。 即使我们使连续的环境离散,我们也可能会失去重要的功能并最终获得大量的动作空间。 当我们拥有巨大的行动空间时,很难实现融合。
因此,我们使用称为 Actor Critic 的新架构,该架构具有两个网络-Actor 和 Critic。 Actor Critic 体系结构结合了策略梯度和状态操作值功能。
**
Actor**
网络的作用是通过调整参数!
[](
img/00310.jpeg
)
来确定
**状态**
中的最佳动作,而
**Critic**
的作用是评估
**Actor**
产生的动作。
**评论家**
通过计算时间差异误差来评估演员的行动。 也就是说,我们在
**Actor**
网络上执行策略梯度以选择操作,
**Critic**
网络评估由
**Actor**
产生的操作 ]网络使用 TD 错误。 下图显示了 Actor Critic
体系结构:
因此,我们使用称为 Actor Critic 的新架构,该架构具有两个网络-Actor 和 Critic。 Actor Critic 体系结构结合了策略梯度和状态操作值功能。
**
演员**
网络的作用是通过调整参数!
[](
img/00310.jpeg
)
来确定
**状态**
中的最佳动作,而
**评论家**
的作用是评估
**演员**
产生的动作。
**评论家**
通过计算时间差异误差来评估演员的行动。 也就是说,我们在
**演员**
网络上执行策略梯度以选择操作,
**评论家**
网络使用 TD 误差评估由
**演员**
网络产生的操作。 下图显示了演员评论家
体系结构:
![](
img/00311.gif
)
与 DQN 相似,这里我们使用
体
验缓冲区,通过采样少量的经验来训练 Actor 和 Critic 网络。 我们还使用单独的目标 Actor 和 Critic 网络来计算损失。
与 DQN 相似,这里我们使用
经
验缓冲区,通过采样少量的经验来训练 Actor 和 Critic 网络。 我们还使用单独的目标 Actor 和 Critic 网络来计算损失。
例如,在 Pong 游戏中,我们将具有不同比例的不同特征,例如位置,速度等。 因此,我们以所有要素都处于相同比例的方式来缩放要素。 我们使用一种称为批归一化的方法来缩放要素。 它将所有特征归一化以具有单位均值和方差。 我们如何探索新的行动? 在连续环境中,将有
`n`
个动作。 为了探索新动作,我们在 Actor 网络产生的动作中添加了一些噪声
`N`
。 我们使用称为 Ornstein-Uhlenbeck 随机过程的过程来生成此噪声。
...
...
@@ -237,13 +237,13 @@ class PolicyGradient:
我们使用策略梯度更新 Actor 网络权重,并使用根据 TD 误差计算得出的梯度更新 Critic 网络权重。
首先,我们通过将探索噪声
`N`
添加到 Actor 网络产生的动作(例如!
[](
img/00320.jpeg
)
)来选择动作。 我们在
`s`
状态下执行此操作,获得
`r`
奖励,然后移至新状态
`s'`
。 我们将此转移信息存储在
体验重播
缓冲区中。
首先,我们通过将探索噪声
`N`
添加到 Actor 网络产生的动作(例如!
[](
img/00320.jpeg
)
)来选择动作。 我们在
`s`
状态下执行此操作,获得
`r`
奖励,然后移至新状态
`s'`
。 我们将此转移信息存储在
经验回放
缓冲区中。
经过一些迭代后,我们从
重播
缓冲区采样转移并训练网络,然后计算目标
`Q`
值!
[](
img/00321.jpeg
)
。 我们将 TD 误差计算为:
经过一些迭代后,我们从
回放
缓冲区采样转移并训练网络,然后计算目标
`Q`
值!
[](
img/00321.jpeg
)
。 我们将 TD 误差计算为:
![](
img/00322.jpeg
)
其中
`M`
是来自
重播
缓冲区的用于训练的样本数。 我们使用根据此损耗
`L`
计算出的梯度来更新评论网络的权重。
其中
`M`
是来自
回放
缓冲区的用于训练的样本数。 我们使用根据此损耗
`L`
计算出的梯度来更新评论网络的权重。
同样,我们使用策略梯度更新策略网络权重。 然后,我们在目标网络中更新 Actor 和 Critic 网络的权重。 我们会缓慢更新目标网络的权重,从而提高稳定性。 它称为软替换:
...
...
@@ -642,13 +642,13 @@ Kakade 和 Langford 从(1)得出以下方程式:
基于两种情况,我们将概率比限制在!
[](
img/00390.jpeg
)
或!
[](
img/00391.jpeg
)
:
*
**案例 1**
:!
[](
img/00392.jpeg
)
*
**案例 1**
:!
[](
img/00392.jpeg
)
当优势为正时,这意味着相对于所有其他操作的平均值,应优先选择相应的操作。 我们将为该操作增加!
[](
img/00393.jpeg
)
的值,因此将有更大的机会被选择。 当我们执行!
[](
img/00394.jpeg
)
的限幅值时,不会超过!
[](
img/00395.jpeg
)
:
![](
img/00396.gif
)
*
**案例 2**
:!
[](
img/00397.jpeg
)
*
**案例 2**
:!
[](
img/00397.jpeg
)
当优势的值为负时,这意味着该动作没有意义,因此不应采用。 因此,在这种情况下,我们将减小该操作的!
[](
img/00398.jpeg
)
值,以使其被选择的机会较小。 类似地,当我们执行裁剪时,!
[](
img/00399.jpeg
)
的值将不会减小到小于!
[](
img/00400.jpeg
)
:
...
...
new/handson-rl-py/12.md
浏览文件 @
835c3110
# Capstone 项目–使用 DQN 进行赛车
在最后几章中,我们通过使用神经网络逼近 q 函数来了解 Deep Q 学习的工作原理。 在此之后,我们看到了
**深
层 Q 网络**
(
**DQN**
)的各种改进,例如 Double Q 学习,决斗网络体系结构和深度递归 Q 网络。 我们已经了解了 DQN 如何利用重播
缓冲区来存储座席的经验,并使用缓冲区中的小批样本来训练网络。 我们还实现了用于玩 Atari 游戏的 DQN 和一个用于玩 Doom 游戏的
**深度循环 Q 网络**
(
**DRQN**
)。 在本章中,让我们进入对决 DQN 的详细实现,它与常规 DQN 基本相同,除了最终的全连接层将分解为两个流,即值流和优势流,而这些流 两个流将合并在一起以计算 Q 函数。 我们将看到如何训练决斗的 DQN 来赢得赛车比赛的代理商。
在最后几章中,我们通过使用神经网络逼近 q 函数来了解 Deep Q 学习的工作原理。 在此之后,我们看到了
**深
度 Q 网络**
(
**DQN**
)的各种改进,例如 Double Q 学习,决斗网络体系结构和深度循环 Q 网络。 我们已经了解了 DQN 如何利用回放
缓冲区来存储座席的经验,并使用缓冲区中的小批样本来训练网络。 我们还实现了用于玩 Atari 游戏的 DQN 和一个用于玩 Doom 游戏的
**深度循环 Q 网络**
(
**DRQN**
)。 在本章中,让我们进入对决 DQN 的详细实现,它与常规 DQN 基本相同,除了最终的全连接层将分解为两个流,即值流和优势流,而这些流 两个流将合并在一起以计算 Q 函数。 我们将看到如何训练决斗的 DQN 来赢得赛车比赛的代理商。
在本章中,您将学习如何实现以下内容:
*
环境包装器功能
*
决斗网络
*
重播
缓冲区
*
回放
缓冲区
*
训练网络
*
赛车
...
...
@@ -158,8 +158,8 @@ class EnvWrapper:
*
**第 1 层**
:32 个 8x8 滤镜,步幅为 4 + RELU
*
**第 2 层**
:64 个 4x4 滤镜,步幅为 2 + RELU
*
**第 3 层**
:64 个 3x3 滤镜,步幅为 1 + RELU
*
**
4a 层**
:512 个单元的全连接层
+ RELU
*
**
4b 层**
:512 个单元的全连接层
+ RELU
*
**
第 4a 层**
:512 个单元的全连接层
+ RELU
*
**
第 4b 层**
:512 个单元的全连接层
+ RELU
*
**第 5a 层**
:1 个 FC + RELU(状态值)
*
**第 5b 层**
:动作 FC + RELU(优势值)
*
**第 6 层**
:总计
`V(s) + A(s, a)`
...
...
@@ -245,9 +245,9 @@ class QNetworkDueling(QNetwork):
return
self
.
h_fc6
```
#
重播
记忆
#
回放
记忆
现在,我们构建
体验重播缓冲区,该缓冲区用于存储所有座席的体
验。 我们从重放缓冲区中抽取了少量经验来训练网络:
现在,我们构建
经验回放缓冲区,该缓冲区用于存储所有座席的经
验。 我们从重放缓冲区中抽取了少量经验来训练网络:
```
py
class
ReplayMemoryFast
:
...
...
@@ -270,13 +270,13 @@ class ReplayMemoryFast:
self
.
size
=
0
```
接下来,我们定义
`store`
函数来存储
体
验:
接下来,我们定义
`store`
函数来存储
经
验:
```
py
def
store
(
self
,
observation
,
action
,
reward
,
newobservation
,
is_terminal
):
```
将
体
验存储为元组(当前状态
`action`
,
`reward`
,下一个状态是终端状态):
将
经
验存储为元组(当前状态
`action`
,
`reward`
,下一个状态是终端状态):
```
py
self
.
experience
[
self
.
current_index
]
=
(
observation
,
action
,
reward
,
newobservation
,
is_terminal
)
...
...
@@ -291,7 +291,7 @@ class ReplayMemoryFast:
self
.
current_index
-=
self
.
memory_size
```
接下来,我们定义一个
`sample`
函数,用于对小批量
体
验进行采样:
接下来,我们定义一个
`sample`
函数,用于对小批量
经
验进行采样:
```
py
def
sample
(
self
):
...
...
@@ -480,7 +480,7 @@ class DQN(object):
```
我们定义了
`store`
函数,用于将所有
体
验存储在
`experience_replay_buffer`
中:
我们定义了
`store`
函数,用于将所有
经
验存储在
`experience_replay_buffer`
中:
```
py
def
store
(
self
,
state
,
action
,
reward
,
next_state
,
is_terminal
):
...
...
@@ -526,7 +526,7 @@ def train(self):
self
.
qnet
.
copy_to
(
self
.
target_qnet
)
```
记忆重放中的示例
体
验:
记忆重放中的示例
经
验:
```
py
minibatch
=
self
.
experience_replay
.
sample
()
...
...
@@ -736,16 +736,16 @@ env.monitor.close()
# 概要
在本章中,我们学习了如何详细实现对决 DQN。 我们从用于游戏画面预处理的基本环境包装器功能开始,然后定义了
`QNetworkDueling`
类。 在这里,我们实现了决斗 Q 网络,该网络将 DQN 的最终全连接层分为值流和优势流,然后将这两个流组合以计算
`q`
值。 之后,我们看到了如何创建
重播
缓冲区,该缓冲区用于存储经验并为网络训练提供经验的小批量样本,最后,我们使用 OpenAI 的 Gym 初始化了赛车环境并训练了我们的代理。 在下一章第 13 章,“最新进展和后续步骤”中,我们将看到 RL 的一些最新进展。
在本章中,我们学习了如何详细实现对决 DQN。 我们从用于游戏画面预处理的基本环境包装器功能开始,然后定义了
`QNetworkDueling`
类。 在这里,我们实现了决斗 Q 网络,该网络将 DQN 的最终全连接层分为值流和优势流,然后将这两个流组合以计算
`q`
值。 之后,我们看到了如何创建
回放
缓冲区,该缓冲区用于存储经验并为网络训练提供经验的小批量样本,最后,我们使用 OpenAI 的 Gym 初始化了赛车环境并训练了我们的代理。 在下一章第 13 章,“最新进展和后续步骤”中,我们将看到 RL 的一些最新进展。
# 问题
问题列表如下:
1.
DQN 和决斗 DQN 有什么区别?
2.
编写用于
重播
缓冲区的 Python 代码。
2.
编写用于
回放
缓冲区的 Python 代码。
3.
什么是目标网络?
4.
编写 Python 代码以获取优先级的
体验重播
缓冲区。
4.
编写 Python 代码以获取优先级的
经验回放
缓冲区。
5.
创建一个 Python 函数来衰减 epsilon-greedy 策略。
6.
决斗 DQN 与双 DQN 有何不同?
7.
创建用于将主要网络权重更新为目标网络的 Python 函数。
...
...
new/handson-rl-py/13.md
浏览文件 @
835c3110
...
...
@@ -4,14 +4,14 @@
在本章中,您将学习以下内容:
*
**想象力增强
剂
**
(
**I2A**
)
*
**想象力增强
智能体
**
(
**I2A**
)
*
向人的偏好学习
*
从演示中进行深度 Q 学习
*
后视经验重播
*
事后经验回放
*
分层强化学习
*
逆强化学习
# 想象力增强
剂
# 想象力增强
智能体
您是国际象棋迷吗? 如果我要你下棋,你会怎么玩? 在棋盘上移动任何棋子之前,您可能会想象移动任何棋子并移动您认为会帮助您获胜的棋子的后果。 因此,基本上,在采取任何措施之前,您先想像一下后果,如果有利,则继续进行该措施,否则就不要执行该措施。
...
...
@@ -66,17 +66,17 @@ I2A 的体系结构如下:
# 从演示中进行深度 Q 学习
我们已经了解了很多有关 DQN 的知识。 我们从香草 DQN 开始,然后看到了各种改进,例如双重 DQN,决斗的网络体系结构和优先级的
体验重播。 我们还学会了构建 DQN 来玩 Atari 游戏。 我们将代理与环境的交互存储在体验缓冲区中,并使代理从这些经验中学习。 但是问题是,我们花了很多培训时间来提高性能。 对于在模拟环境中学习,这很好,但是当我们让代理在现实环境中学习时,会引起很多问题。 为了克服这个问题,谷歌公司 DeepMind 的研究人员在演示(
**DQfd**
)的基础上,对 DQN 进行了改进,称为
**深度 Q 学习。**
我们已经了解了很多有关 DQN 的知识。 我们从香草 DQN 开始,然后看到了各种改进,例如双重 DQN,决斗的网络体系结构和优先级的
经验回放。 我们还学会了构建 DQN 来玩 Atari 游戏。 我们将代理与环境的交互存储在经验缓冲区中,并使代理从这些经验中学习。 但是问题是,我们花了很多培训时间来提高性能。 对于在模拟环境中学习,这很好,但是当我们让代理在现实环境中学习时,会引起很多问题。 为了克服这个问题,谷歌公司 DeepMind 的研究人员在演示(
**DQfd**
)的基础上,对 DQN 进行了改进,称为
**深度 Q 学习**
。
如果我们已经有了一些演示数据,则可以将这些演示直接添加到
体验重播缓冲区中。 例如,考虑一个学习玩 Atari 游戏的特工。 如果我们已经有了一些演示数据来告诉我们的代理,哪个状态更好,哪个动作可以提供良好的回报,那么代理可以直接使用此数据进行学习。 即使是少量的演示,也可以提高座席的表现并最大程度地减少培训时间。 由于演示的数据将直接添加到优先体验重放缓冲区中,因此代理可以从演示数据中使用的数据量以及代理可以从其自己的交互中用于学习的数据量将由优先体
验重放来控制 缓冲,因为经验将被优先考虑。
如果我们已经有了一些演示数据,则可以将这些演示直接添加到
经验回放缓冲区中。 例如,考虑一个学习玩 Atari 游戏的特工。 如果我们已经有了一些演示数据来告诉我们的代理,哪个状态更好,哪个动作可以提供良好的回报,那么代理可以直接使用此数据进行学习。 即使是少量的演示,也可以提高座席的表现并最大程度地减少培训时间。 由于演示的数据将直接添加到优先经验重放缓冲区中,因此代理可以从演示数据中使用的数据量以及代理可以从其自己的交互中用于学习的数据量将由优先经
验重放来控制 缓冲,因为经验将被优先考虑。
DQfd 中的损失函数将是各种损失的总和。 为了防止我们的代理人过度适合演示数据,我们在网络权重上计算 L2 正则化损失。 我们像往常一样计算 TD 损失,也计算监督损失,以了解我们的特工如何从演示数据中学习。 本文的作者在 DQfd 和各种环境下进行了实验,并且 DQfd 的性能比对决 Double DQN 优先排序的性能更好,更快。
您可以观看此视频,
[
以了解 DQfd 如何学会玩“私眼”游戏
](
https://youtu.be/4IFZvqBHsFY
)
。
#
后视经验重播
#
事后经验回放
我们已经了解了如何在 DQN 中使用
体验重播来避免相关体验。 此外,我们了解到,优先体验重播是对香草体验重播的一种改进,因为它优先考虑 TD 错误的每个体验。 现在,我们将研究由 OpenAI 研究人员提出的一种用于处理稀疏奖励的名为
**后视
经验回放**
(
**HER**
)的新技术。 您还记得如何学习骑自行车吗? 第一次尝试时,您将无法正确平衡自行车。 您可能多次无法正确平衡。 但是,所有这些失败并不意味着您没有学到任何东西。 失败会教你如何不平衡自行车。 即使您没有学会骑自行车(目标),您也学习了一个不同的目标,即,您学会了如何不平衡自行车。 这是我们人类学习的方式,对吗? 我们从失败中学习,这就是事后回顾经验的想法。
我们已经了解了如何在 DQN 中使用
经验回放来避免相关经验。 此外,我们了解到,优先经验回放是对香草经验回放的一种改进,因为它优先考虑 TD 错误的每个经验。 现在,我们将研究由 OpenAI 研究人员提出的一种用于处理稀疏奖励的名为
**事后
经验回放**
(
**HER**
)的新技术。 您还记得如何学习骑自行车吗? 第一次尝试时,您将无法正确平衡自行车。 您可能多次无法正确平衡。 但是,所有这些失败并不意味着您没有学到任何东西。 失败会教你如何不平衡自行车。 即使您没有学会骑自行车(目标),您也学习了一个不同的目标,即,您学会了如何不平衡自行车。 这是我们人类学习的方式,对吗? 我们从失败中学习,这就是事后回顾经验的想法。
让我们考虑本文中给出的相同示例。 如图所示,查看 FetchSlide 环境。 在这种环境下的目标是移动机械臂并在桌子上滑动冰球以击中目标,这是一个红色的小圆圈(来自
[
的图表 https://blog.openai.com/ingredients-for-robotics-research /
](
https://blog.openai.com/ingredients-for-robotics-research/
)
):
...
...
@@ -119,7 +119,7 @@ MAXQ 值函数分解是 HRL 中最常用的算法之一。 让我们看看 MAXQ
您可以在上图中看到所有子任务都是按层次排列的。 每个节点代表子任务或原始动作,并且每个边都连接一个子任务可以调用其子子任务的方式。
**
Navigate(t)**
子任务具有四个原始动作:
**东部**
,
**西部**
,
**北部**
和
**南部**
。
**Get**
子任务具有
**拾取器
**
基本操作和导航子任务; 同样,
**放置**
子任务,具有
**放置**
(放置)原始动作并导航子任务。
**
导航**
子任务具有四个原始动作:
**东部**
,
**西部**
,
**北部**
和
**南部**
。
**获取**
子任务具有
**拾取
**
基本操作和导航子任务; 同样,
**放置**
子任务,具有
**放置**
(放置)原始动作并导航子任务。
在 MAXQ 分解中,MDP !
[](
img/00438.jpeg
)
将分为一组任务,例如!
[](
img/00439.jpeg
)
...
...
@@ -167,7 +167,7 @@ RL 周围有各种改进和进步。 现在,您已经阅读完本书,可以
# 概要
在本章中,我们了解了 RL 的一些最新进展。 我们看到了 I2A 架构如何将想象力核心用于前瞻性计划,然后如何根据人的喜好来训练代理。 我们还了解了 DQfd,它可以通过从演示中学习来提高 DQN 的性能并减少其培训时间。 然后,我们研究了事后的经验
重播
,从中我们了解了代理商如何从失败中学习。
在本章中,我们了解了 RL 的一些最新进展。 我们看到了 I2A 架构如何将想象力核心用于前瞻性计划,然后如何根据人的喜好来训练代理。 我们还了解了 DQfd,它可以通过从演示中学习来提高 DQN 的性能并减少其培训时间。 然后,我们研究了事后的经验
回放
,从中我们了解了代理商如何从失败中学习。
接下来,我们学习了层次 RL,其中目标被解压缩为子目标层次。 我们了解了反向 RL,其中代理商尝试根据给定策略来学习奖励函数。 RL 每天都在以有趣的进步发展。 既然您已经了解了各种强化学习算法,则可以构建代理以执行各种任务并为 RL 研究做出贡献。
...
...
new/handson-rl-py/14.md
浏览文件 @
835c3110
...
...
@@ -76,11 +76,11 @@
# 第八章
1.
**深度 Q 网络**
(
**DQN**
)是用于逼近 Q 函数的神经网络。
2.
经验
重播
用于删除座席经验之间的相关性。
2.
经验
回放
用于删除座席经验之间的相关性。
3.
当我们使用同一网络来预测目标值和预测值时,会有很多差异,因此我们使用单独的目标网络。
4.
由于最大运算符,DQN 高估了 Q 值。
5.
通过具有两个单独的 Q 函数,每个学习都独立地加倍 DQN,从而避免了高估 Q 值的情况。
6.
体验是优先体
验回放中基于 TD 错误的优先级。
6.
经验是优先经
验回放中基于 TD 错误的优先级。
7.
DQN 通过将 Q 函数计算分解为值函数和优势函数来精确估算 Q 值。
# 第九章
...
...
@@ -128,7 +128,7 @@
2.
想象力核心由执行想象力的策略网络和环境模型组成。
3.
代理人反复从人类那里获得反馈,并根据人类的喜好改变目标。
4.
DQfd 使用一些演示数据进行培训,因为 DQN 并未预先使用任何演示数据。
5.
请参阅
**
后见之明体
验回放**
(
**HER**
)部分。
5.
请参阅
**
事后经
验回放**
(
**HER**
)部分。
6.
提出了
**分层强化学习**
(
**HRL**
),以解决维数诅咒,其中我们将大问题解压缩为层次结构中的小子问题
7.
我们试图在 RL 中找到给定奖励函数的最优策略,而在逆向强化学习中,给出最优策略并找到奖励函数
\ No newline at end of file
new/intel-proj-py/09.md
浏览文件 @
835c3110
...
...
@@ -77,7 +77,7 @@ Q 值表也通过迭代`t`进行索引,因为代理只能查看到目前为止
该图学习将每对状态
`(s, a)`
和动作映射到输出 Q 值输出
`Q(s, a)`
,而在右侧图中,对于每个状态
`s`
,我们学习与每个动作
`a`
有关的 Q 值。 如果每个状态都有
`n`
个可能的动作,则网络的输出会产生
`n`
输出
`Q(s, a[1]), Q(s, a[2]), ..., Q(s, a[n])`
。
深度 Q 学习网络的训练方法很简单,称为
体验重播。 让 RL 代理与环境交互并将经验以
`(s, a, r, s')`
的元组形式存储在重播缓冲区中。 可以从此重播缓冲区采样迷你批量以训练网络。 首先,重播
缓冲区是随机存储的。
深度 Q 学习网络的训练方法很简单,称为
经验回放。 让 RL 代理与环境交互并将经验以
`(s, a, r, s')`
的元组形式存储在回放缓冲区中。 可以从此回放缓冲区采样迷你批量以训练网络。 首先,回放
缓冲区是随机存储的。
# 制定成本函数
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录