提交 50724718 编写于 作者: W wizardforcel

2020-12-21 23:07:38

上级 da30986f
此差异已折叠。
......@@ -14,7 +14,7 @@
# 什么是深度 Q 网络?
在继续之前,首先让我们回顾一下 Q 函数。 什么是 Q 函数? Q 函数(也称为状态动作值函数)指定*和*`s`状态下的状态。 因此,我们将每个状态下所有可能动作的值存储在一个称为 Q 表的表中,并选择一个状态下具有最大值的动作作为最佳动作。 还记得我们是如何学习这个 Q 函数的吗? 我们使用了 Q 学习,这是一种非政策性的时差学习算法,用于估算 Q 函数。 我们在第 5 章和*时间差异学习中对此进行了研究。*
在继续之前,首先让我们回顾一下 Q 函数。 什么是 Q 函数? Q 函数(也称为状态动作值函数)指定`a``s`状态下的状态。 因此,我们将每个状态下所有可能动作的值存储在一个称为 Q 表的表中,并选择一个状态下具有最大值的动作作为最佳动作。 还记得我们是如何学习这个 Q 函数的吗? 我们使用了 Q 学习,这是一种非政策性的时差学习算法,用于估算 Q 函数。 我们在第 5 章“时间差异学习”中对此进行了研究。
到目前为止,我们已经看到了状态数量有限且动作有限的环境,并且我们对所有可能的状态动作对进行了详尽搜索,以找到最佳 Q 值。 想想一个环境,我们有很多状态,并且在每个状态下,我们都有很多动作可以尝试。 仔细检查每个状态下的所有操作将非常耗时。 更好的方法是使用某些参数![](img/00240.jpeg)`Q`函数近似为![](img/00241.jpeg)。 我们可以使用权重为![](img/00242.jpeg)的神经网络来估计每种状态下所有可能动作的`Q`值。 当我们使用神经网络来近似`Q`函数时,我们可以称其为 Q 网络。 好的,但是我们如何训练网络,我们的目标功能是什么? 回顾我们的 Q 学习更新规则:
......@@ -50,7 +50,7 @@ DQN 的第一层是卷积网络,网络的输入将是游戏屏幕的原始帧
# 体验重播
我们知道,在 RL 环境中,我们通过执行某些操作*和*,从一个状态`s`过渡到下一状态 *s'*,并获得奖励`r`。 我们将此过渡信息作为![](img/00250.jpeg)保存在称为重播缓冲区或体验重播的缓冲区中。 这些过渡称为代理的经验。
我们知道,在 RL 环境中,我们通过执行某些操作`a`,从一个状态`s`过渡到下一状态`s'`,并获得奖励`r`。 我们将此过渡信息作为![](img/00250.jpeg)保存在称为重播缓冲区或体验重播的缓冲区中。 这些过渡称为代理的经验。
体验重播的关键思想是,我们使用从重播缓冲区采样的过渡来训练深度 Q 网络,而不是使用最后的过渡进行训练。 座席的经历一次相关,因此从重播缓冲区中随机选择一批训练样本将减少座席的经历之间的相关性,并有助于座席更好地从广泛的经验中学习。
......@@ -82,7 +82,7 @@ DQN 的第一层是卷积网络,网络的输入将是游戏屏幕的原始帧
1. 首先,我们预处理游戏屏幕(状态`s`)并将其馈送到 DQN,DQN 将返回该状态下所有可能动作的`Q`值。
2. 现在,我们使用 epsilon-greedy 策略选择一个动作:对于概率 epsilon,我们选择一个随机动作`a`;对于概率为 1-epsilon,我们选择一个具有最大`Q`的动作 ]值,例如![](img/00258.jpeg)
3. 在选择动作`a`之后,我们在`s`状态下执行此动作,然后移至新的 *s'*状态并获得奖励。 下一个状态*的*是下一个游戏屏幕的预处理图像。
3. 在选择动作`a`之后,我们在`s`状态下执行此动作,然后移至新的`s'`状态并获得奖励。 下一个状态`s'`是下一个游戏屏幕的预处理图像。
4. 我们将此过渡存储在`<s,a,r,s'>`的重播缓冲区中。
5. 接下来,我们从重播缓冲区中抽取一些随机的过渡批次并计算损失。
6. 我们知道![](img/00259.jpeg)就像目标`Q`与预测的`Q`之间的平方差一样。
......@@ -392,7 +392,7 @@ with tf.Session() as sess:
# 双 DQN
深度 Q 学习非常酷,对吗? 它已经普及了玩任何 Atari 游戏的学习。 但是 DQN 的问题在于,它倾向于高估`Q`值。 这是因为`Q`学习方程式中的最大值算子。 max 运算符在选择和评估动作时使用相同的值。 那是什么意思 假设我们处于*处于*状态,并且我们有五个动作 *a <sub class="calibre24">1</sub>**a <sub class="calibre24">5</sub>* 。 假设 *a <sub class="calibre24">3</sub>* 是最好的动作。 当我们估计状态为`s`的所有这些动作的`Q`值时,估计的`Q`值会有些杂音并且与实际值有所不同。 由于这种噪声,动作 *a <sub class="calibre24">2</sub>* 会比最佳动作 *a <sub class="calibre24">3</sub>* 获得更高的值。 现在,如果我们选择最佳动作作为具有最大值的动作,则最终将选择次优动作 *a <sub class="calibre24">2</sub>* 而不是最佳动作 *a <sub class="calibre24">3</sub>*
深度 Q 学习非常酷,对吗? 它已经普及了玩任何 Atari 游戏的学习。 但是 DQN 的问题在于,它倾向于高估`Q`值。 这是因为`Q`学习方程式中的最大值算子。 max 运算符在选择和评估动作时使用相同的值。 那是什么意思 假设我们处于`s`状态,并且我们有五个动作`a[1]``a[5]`。 假设`a[3]`是最好的动作。 当我们估计状态为`s`的所有这些动作的`Q`值时,估计的`Q`值会有些杂音并且与实际值有所不同。 由于这种噪声,动作`a[2]`会比最佳动作`a[3]`获得更高的值。 现在,如果我们选择最佳动作作为具有最大值的动作,则最终将选择次优动作`a[2]`而不是最佳动作`a[3]`
我们可以通过具有两个单独的`Q`函数来解决此问题,每个函数都是独立学习的。 一个`Q`功能用于选择一个动作,另一个`Q`功能用于评估一个动作。 我们可以通过调整 DQN 的目标功能来实现。 调用 DQN 的目标函数:
......@@ -426,11 +426,11 @@ with tf.Session() as sess:
![](img/00283.jpeg)
*rank(i)*指定过渡`i`在重播缓冲区中的位置,在该位置中,过渡从高 TD 错误到低 TD 错误被分类。 计算优先级后,我们可以使用相同的公式![](img/00284.jpeg)将优先级转换为概率。
`rank(i)`指定过渡`i`在重播缓冲区中的位置,在该位置中,过渡从高 TD 错误到低 TD 错误被分类。 计算优先级后,我们可以使用相同的公式![](img/00284.jpeg)将优先级转换为概率。
# 决斗网络架构
我们知道`Q`函数指定代理在状态`s`下执行动作`a`有多好,而值函数则指定有多好 使代理处于*或*状态。 现在,我们引入一个称为优势函数的新函数,该函数可以定义为值函数和优势函数之间的差。 优势功能指定与其他动作相比,代理执行一个动作`a`有多好。
我们知道`Q`函数指定代理在状态`s`下执行动作`a`有多好,而值函数则指定使代理处于`s`状态有多好。 现在,我们引入一个称为优势函数的新函数,该函数可以定义为值函数和优势函数之间的差。 优势功能指定与其他动作相比,代理执行一个动作`a`有多好。
因此,值函数指定状态的优劣,而优势函数指定动作的优劣。 如果我们将价值功能和优势功能结合起来会发生什么? 这将告诉我们代理在状态`s`实际上是我们的`Q`功能下执行动作`a`有多好。 因此,我们可以像![](img/00285.jpeg)中那样将`Q`函数定义为值函数和优势函数的和。
......@@ -451,7 +451,7 @@ with tf.Session() as sess:
在本章中,我们学习了一种非常流行的深度强化学习算法,称为 DQN。 我们看到了如何使用深度神经网络来逼近 Q 函数。 我们还学习了如何建立代理来玩 Atari 游戏。 后来,我们研究了 DQN 的一些改进,例如双 DQN,它用于避免高估 Q 值。 然后,我们研究了优先级体验重放,优先级体验和决斗的网络体系结构,该体系结构将 Q 函数计算分为两个流,分别称为值流和优势流。
在下一章[,第 9 章](09.html#57R300-3c5bb317ad314d43ac43a332c0db6f00)*与深度递归 Q 网络*玩末日之战中,我们将介绍一种称为 DRQN 的非常酷的 DQN 变体,它利用 RNN 近似于一个 Q 功能。
在下一章第 9 章,“实用深度递归 Q 网络玩末日之战”中,我们将介绍一种称为 DRQN 的非常酷的 DQN 变体,它利用 RNN 近似于一个 Q 功能。
# 问题
......
......@@ -317,7 +317,7 @@ RMSE: 0.9320
图 6.6:用于二进制数据的受限 Boltzmann 机器
只是为了刷新我们的记忆,上图(*图 6.6* )是一个 RBM,具有`m`输入或可见单位。 这被投影到具有`n`个单位的隐藏层。 给定可见层输入[H​​TG6],则隐藏单元彼此独立,因此可以如下进行采样,其中![](img/71f41038-5216-48cd-9474-3d36fd1c8758.png)表示 S函数:
只是为了刷新我们的记忆,上图(*图 6.6* )是一个 RBM,具有`m`输入或可见单位。 这被投影到具有`n`个单位的隐藏层。 给定可见层输入[H​​TG6],则隐藏单元彼此独立,因此可以如下进行采样,其中![](img/71f41038-5216-48cd-9474-3d36fd1c8758.png)表示 Sigmoid 函数:
![](img/e4c4d443-0ad5-4a56-a6ac-73c05bcca858.png)
......@@ -474,7 +474,7 @@ python preprocess_ratings.py --path '/home/santanu/ML_DS_Catalog-/Collaborating
# 建立用于协作过滤的 RBM 网络
以下函数`_network`为协作过滤创建所需的 RBM 结构。 首先,我们定义输入的权重,偏差和占位符。 然后定义`sample_hidden``sample_visible`函数,以根据概率分别对隐藏的激活和可见的激活进行采样。 隐藏的单位是从 S函数提供的概率从伯努利分布中采样的,而与每个电影有关的可见单元是根据 softmax 函数提供的概率从多项分布中采样的。 无需创建 softmax 概率,因为`tf.multinomial`函数可以直接从 logit 采样,而不是实际概率。
以下函数`_network`为协作过滤创建所需的 RBM 结构。 首先,我们定义输入的权重,偏差和占位符。 然后定义`sample_hidden``sample_visible`函数,以根据概率分别对隐藏的激活和可见的激活进行采样。 隐藏的单位是从 Sigmoid 函数提供的概率从伯努利分布中采样的,而与每个电影有关的可见单元是根据 softmax 函数提供的概率从多项分布中采样的。 无需创建 softmax 概率,因为`tf.multinomial`函数可以直接从 logit 采样,而不是实际概率。
接下来,我们根据 Gibbs 采样定义对比差异的逻辑。 `gibbs_step`函数执行 Gibbs 采样的一个步骤,然后利用它来实现`k`*阶的对比散度。*
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册