提交 98d8d9ee 编写于 作者: W wizardforcel

2020-12-27 21:09:26

上级 cd3b6cce
......@@ -41,7 +41,7 @@
* Anaconda
* Python
* 任何网络浏览器
* 码头工人
* Docker
# 下载示例代码文件
......
......@@ -90,7 +90,7 @@ RL 的元素在以下各节中显示。
* 状态是智能体当前位于迷宫中的位置
* 智能体通过从一种状态转移到另一种状态来执行动作
* 当智能体的动作没有遇到任何障碍时,它会获得正向奖励;当智能体的行为没有遇到任何障碍时,它会得到负向奖励,因此它无法到达目的地
* 目的是清除迷宫并到达目的地
* 目的是探查迷宫并到达目的地
# RL 环境的类型
......@@ -193,9 +193,9 @@ RL 被广泛用于金融投资组合管理,这是将资金不断重新分配
问题列表如下:
1. 什么是强化学习?
2. RL 与其他 ML 范有何不同?
2. RL 与其他 ML 范有何不同?
3. 什么是智能体,智能体如何学习?
4. 策略功能和价值功能有什么区别?
4. 策略函数和值函数有什么区别?
5. 基于模型的学习与基于模型的学习有什么区别?
6. RL 中有哪些不同类型的环境?
7. OpenAI Universe 与其他 RL 平台有何不同?
......
......@@ -9,7 +9,7 @@
* 奖励与回报
* 贝尔曼方程
* 使用动态规划求解贝尔曼方程
* 利用值和策略迭代来解决冻湖问题
* 利用值和策略迭代来解决冻湖问题
# 马尔可夫链与马尔可夫过程
......@@ -81,11 +81,11 @@ MDP 由五个重要元素表示:
# 间歇性和连续性任务
情景任务是具有终端状态(结束)的任务。 在 RL 中,情节被视为从初始状态到最终状态的智能体与环境的相互作用。
情景任务是具有最终状态(结束)的任务。 在 RL 中,情节被视为从初始状态到最终状态的智能体与环境的相互作用。
例如,在赛车视频游戏中,您启动游戏(初始状态)并玩游戏直到游戏结束(最终状态)。 这称为情节。 游戏结束后,您可以通过重新启动游戏来开始下一个情节,并且无论您在上一个游戏中所处的位置如何,都将从初始状态开始。 因此,每个情节彼此独立。
在连续任务中,没有终端状态。 连续的任务永远不会结束。 例如,个人协助机器人没有终端状态。
在连续任务中,没有最终状态。 连续的任务永远不会结束。 例如,个人协助机器人没有最终状态。
# 折扣因子
......@@ -101,7 +101,7 @@ MDP 由五个重要元素表示:
折扣系数决定了我们对未来奖励和即时奖励的重视程度。 折扣因子的值在`0``1`之内。 折扣因子`0`意味着即时奖励更为重要,而折扣因子`1`意味着未来奖励比即时奖励更为重要。
折扣系数`0`永远不会只考虑立即获得的奖励。 同样,`1`的折扣因子将永远学习,以寻找未来的奖励,这可能导致无限。 因此,折因子的最佳值在 0.2 到 0.8 之间。
折扣系数`0`永远不会只考虑立即获得的奖励。 同样,`1`的折扣因子将永远学习,以寻找未来的奖励,这可能导致无限。 因此,折因子的最佳值在 0.2 到 0.8 之间。
根据使用情况,我们重视即时奖励和将来的奖励。 在某些情况下,未来的奖励比立即的奖励更可取,反之亦然。 在国际象棋游戏中,目标是击败对手的国王。 如果我们重视即时奖励,而即时奖励是通过典当击败任何对手玩家等行动获得的,那么坐席将学会执行此子目标,而不是学习达到实际目标。 因此,在这种情况下,我们重视未来的奖励,而在某些情况下,我们更喜欢即时奖励,而不是未来的奖励。 (说,如果我今天或 13 个月后给您巧克力,您会喜欢巧克力吗?)
......@@ -261,7 +261,7 @@ MDP 由五个重要元素表示:
我们使用两种强大的算法来求解贝尔曼方程:
* 值迭代
* 值迭代
* 策略迭代
# 值迭代
......@@ -457,7 +457,7 @@ policy_iteration():
我们将使用一种称为动态规划的特殊技术来求解贝尔曼最优性方程。 要应用 DP,必须预先知道模型动态,这基本上意味着必须预先知道模型环境的转换概率和奖励概率。 由于我们知道模型动态,因此可以在此处使用 DP。 我们使用两种特殊的 DP 算法来找到最佳策略:
* 值迭代
* 值迭代
* 策略迭代
# 值迭代
......@@ -857,14 +857,14 @@ print (policy_iteration(env))
问题列表如下:
1. 马尔可夫财产是什么?
1. 马尔可夫属性是什么?
2. 为什么我们需要马尔可夫决策过程?
3. 我们何时更喜欢即时奖励?
4. 折扣因子有什么用?
5. 为什么要使用贝尔曼函数?
6. 您将如何导出 Q 函数的贝尔曼方程?
7. 值函数和 Q 函数有何关系?
8. 值迭代和策略迭代有什么区别?
8. 值迭代和策略迭代有什么区别?
# 进一步阅读
......
......@@ -6,9 +6,9 @@
* 蒙特卡洛方法
* 蒙特卡洛预测
* 和蒙特卡洛一起玩二十一点
* 卡洛控制模型
* 蒙特卡洛开始探索
* 使用蒙特卡洛玩二十一点
* 蒙特卡洛控制模型
* 蒙特卡洛探索
* 策略性蒙特卡洛控制
* 脱离策略的蒙特卡洛控制
......@@ -173,7 +173,7 @@ print("Approximate value of pi is {}" .format(calculate_pi(points_inside_circle,
1. 首先,我们将随机值初始化为我们的值函数
2. 然后我们初始化一个称为`return`的空列表来存储我们的回报
3. 然后针对情节中的每个州,我们计算收益
3. 然后针对剧集中的每个状态,我们计算收益
4. 接下来,我们将回报附加到回报清单中
5. 最后,我们将收益平均值作为我们的值函数
......@@ -226,8 +226,8 @@ print("Approximate value of pi is {}" .format(calculate_pi(points_inside_circle,
这里的奖励是:
* 如果玩家赢得比赛,则+1
* 如果玩家输了则为-1
* 如果玩家赢得比赛,则+1
* 如果玩家输了则为 -1
* 如果游戏是平局,则为 0
可能的操作是:
......@@ -290,14 +290,14 @@ action = sample_policy(observation)
actions.append(action)
```
3. 然后,对于环境中的每个步骤,我们都存储`state``reward``done`(指定是否达到终端状态),并将奖励添加到`reward`列表中:
3. 然后,对于环境中的每个步骤,我们都存储`state``reward``done`(指定是否达到最终状态),并将奖励添加到`reward`列表中:
```py
observation, reward, done, info = env.step(action)
rewards.append(reward)
```
4. 如果我们到达终端状态,那么我们将中断:
4. 如果我们到达最终状态,那么我们将中断:
```py
if done:
......@@ -356,7 +356,7 @@ if S not in states[:t]:
value_table[S] += (returns - V[S]) / N[S]
```
4. 查看完整功能以更好地理解:
4. 查看完整函数来更好地理解:
```py
def first_visit_mc_prediction(policy, env, n_episodes):
......@@ -567,7 +567,7 @@ def epsilon_greedy_policy(state, epsilon):
1. 首先,我们初始化随机策略和随机 Q 函数。
2. 然后,我们初始化一个称为`return`的列表,用于存储回报。
3. 我们使用随机策略`π`生成情节
3. 我们使用随机策略`π`生成剧集
4. 我们将情节中发生的每个状态操作对的返回存储到返回列表中。
5. 然后,我们对返回列表中的返回值取平均值,然后将该值分配给`Q`函数。
......@@ -623,7 +623,7 @@ def epsilon_greedy_policy(state, epsilon):
2. 使用蒙特卡洛方法估计黄金分割率的值。
3. 蒙特卡洛预测的用途是什么?
4. 首次访问 MC 和每次访问 MC 有什么区别?
5. 为什么我们要估状态作用值?
5. 为什么我们要估状态作用值?
6. 策略上的 MC 控制和策略外的 MC 控制有什么区别?
7. 编写一些 Python 代码,以使用策略性 MC 控件玩二十一点游戏。
......
......@@ -6,8 +6,8 @@
* TD 学习
* Q 学习
* 萨尔萨
* 使用 Q 学习和 SARSA 进行出租车调度
* SARSA
* 使用 Q 学习和 SARSA 调度出租车
* Q 学习和 SARSA 之间的区别
# TD 学习
......@@ -40,7 +40,7 @@ TD 学习算法由 Sutton 于 1988 年提出。该算法兼顾了蒙特卡洛方
![](img/00116.jpeg)
让我们将学习率(`α`)视为`0.1`,将折率(`γ`)视为 0.5; 我们知道状态`(1, 1)`的值(如`V(S)`中的值)为 0,而下一个状态`(1, 2)`的值与`V(S)`一样,也是`0`。 我们获得的奖励(`r`)为 -0.3。 我们将其替换为 TD 规则,如下所示:
让我们将学习率(`α`)视为`0.1`,将折率(`γ`)视为 0.5; 我们知道状态`(1, 1)`的值(如`V(S)`中的值)为 0,而下一个状态`(1, 2)`的值与`V(S)`一样,也是`0`。 我们获得的奖励(`r`)为 -0.3。 我们将其替换为 TD 规则,如下所示:
```
V(s) = 0 + 0.1 * (-0.3 + 0.5 (0) - 0)
......@@ -85,7 +85,7 @@ V(s) = -0.0315
1. 首先,我们将`V(S)`初始化为`0`或一些任意值
2. 然后我们开始该情节,并在情节中的每个步骤中,在状态`S`中执行动作`A`,并获得奖励`R`,然后移至下一个状态`s'`
3. 现在,我们使用 TD 更新规则更新先前状态的值
4. 重复步骤`3``4`,直到达到终端状态
4. 重复步骤`3``4`,直到达到最终状态
# TD 控制
......@@ -110,7 +110,7 @@ V(s) = -0.0315
![](img/00123.jpeg)
4. 重复步骤`2``3`,直到达到终端状态
4. 重复步骤`2``3`,直到达到最终状态
现在,我们将使用不同的步骤来理解算法。
......@@ -126,7 +126,7 @@ V(s) = -0.0315
![](img/00126.jpeg)
让我们将`alpha`视为`0.1`,并将折因子视为`1`
让我们将`alpha`视为`0.1`,并将折因子视为`1`
![](img/00127.jpeg)
......@@ -556,9 +556,9 @@ Q 学习和 SARSA 对许多人来说总是很困惑。 让我们分解一下两
问题列表如下:
1. TD 学习与蒙特卡洛方法有何不同?
2. TD 错误到底是什么?
2. TD 误差到底是什么?
3. TD 预测和控制之间有什么区别?
4. 如何使用 Q 学习构建智能智能体?
4. 如何使用 Q 学习构建智能体?
5. Q 学习和 SARSA 有什么区别?
# 进一步阅读
......
......@@ -7,7 +7,7 @@
* MAB 问题
* `ε`贪婪算法
* softmax 探索算法
* 置信区间上算法
* 置信区间上算法
* 汤普森采样算法
* MAB 的应用
* 使用 MAB 识别正确的广告横幅
......@@ -33,9 +33,9 @@ MAB 如下所示:
我们智能体的目标是找到最佳手臂,并最大程度地减少后悔,这可以定义为了解`k`哪个手臂是最佳手臂的代价。 现在,我们如何找到最好的手臂? 我们应该探索所有武器还是选择已经给予我们最大累积奖励的武器? 这就是探索与利用的困境。 现在,我们将看到如何使用以下各种探索策略来解决这个难题:
* 厄普西隆贪婪策略
* ε 贪婪策略
* Softmax 探索
* 上置信界算法
* 置信区间上界算法
* 汤姆森采样技术
在继续之前,让我们在 OpenAI Gym 中安装`bandit`环境; 您可以通过在终端中键入以下命令来安装`bandit`环境:
......@@ -180,7 +180,7 @@ def softmax(tau):
```
3. 开始拉`arm`
3. 开始拉动手臂
```py
for i in range(num_rounds):
......@@ -227,7 +227,7 @@ UCB 背后的想法非常简单:
1. 选择具有较高平均奖励和较高置信度上限的动作(手臂)
2. 拉手臂并获得奖励
3. 更新手臂的奖励和信心范围
3. 更新手臂的奖励和置信范围
但是,我们如何计算 UCB?
......@@ -318,9 +318,9 @@ The optimal arm is 1
1. 从每个`k`分布中采样一个值,并将该值用作先验平均值。
2. 选择具有最高先验均值的手臂并观察奖励。
3. 使用观察到的奖励来修改先前的分
3. 使用观察到的奖励来修改先前的分
因此,经过几轮之后,先前的分配将开始类似于真实的分配
因此,经过几轮之后,先前的分布将开始类似于真实的分布
![](img/00156.gif)
......
......@@ -11,7 +11,7 @@
* LSTM
* 使用 LSTM 生成歌曲歌词
* CNN
* 使用 CNN 对时尚产品进行分类
* 使用 CNN 对时尚产品分类
# 人工神经元
......@@ -407,9 +407,9 @@ RNN 是一种特殊类型的神经网络,广泛应用于顺序数据。 换句
在上图中:
* `U`代表隐藏状态权重矩阵的输入
* `W`代表隐藏状态到隐藏状态权重矩阵
* `V`表示隐藏到输出状态的权重矩阵
* `U`代表输入到隐藏状态的权重矩阵
* `W`代表隐藏状态到隐藏状态权重矩阵
* `V`表示隐藏状态到输出的权重矩阵
因此,在前向传递中,我们计算以下内容:
......
......@@ -92,7 +92,7 @@ DQN 的第一层是卷积网络,网络的输入将是游戏屏幕的原始帧
![](img/00259.jpeg)
7. 我们针对实际网络参数`θ`执行梯度下降,以最大程度地减少这种损失。
8. 在每个`k`个步骤之后,我们将实际网络权重`θ`复制到目标网络权重`θ'`
9. 对于`M`情节,我们重复这些步骤。
9. 对于`M`剧集,我们重复这些步骤。
# 建立智能体来玩 Atari 游戏
......@@ -410,7 +410,7 @@ with tf.Session() as sess:
# 优先经验回放
在 DQN 架构中,我们使用经验回放来消除训练样本之间的相关性。 但是,从记忆放中均匀采样转移不是最佳方法。 相反,我们可以确定转换的优先级并根据优先级进行采样。 优先安排转移有助于网络快速有效地学习。 我们如何确定转移的优先级? 我们优先考虑具有较高 TD 错误的转换。 我们知道,TD 误差指定了估计的 Q 值和实际 Q 值之间的差。 因此,具有较高 TD 误差的转移是我们必须关注和学习的转移,因为这些转移与我们的估计背道而驰。 凭直觉,让我们说您尝试解决一系列问题,但是您无法解决其中两个问题。 然后,您仅将这两个问题放在首位,以专注于问题所在并尝试解决该问题:
在 DQN 架构中,我们使用经验回放来消除训练样本之间的相关性。 但是,从记忆放中均匀采样转移不是最佳方法。 相反,我们可以确定转换的优先级并根据优先级进行采样。 优先安排转移有助于网络快速有效地学习。 我们如何确定转移的优先级? 我们优先考虑具有较高 TD 错误的转换。 我们知道,TD 误差指定了估计的 Q 值和实际 Q 值之间的差。 因此,具有较高 TD 误差的转移是我们必须关注和学习的转移,因为这些转移与我们的估计背道而驰。 凭直觉,让我们说您尝试解决一系列问题,但是您无法解决其中两个问题。 然后,您仅将这两个问题放在首位,以专注于问题所在并尝试解决该问题:
![](img/00272.gif)
......@@ -455,7 +455,7 @@ 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 功能。
......@@ -468,8 +468,8 @@ with tf.Session() as sess:
3. 为什么我们要保留一个单独的目标网络?
4. 为什么 DQN 高估了?
5. 双重 DQN 如何避免高估 Q 值?
6. 优先经验中的优先经验如何回放
7. 对决架构有什么需求?
6. 优先经验回放中的优先经验是怎么样的
7. 决斗架构有什么需求?
# 进一步阅读
......
......@@ -5,7 +5,7 @@
在本章中,您将学习以下内容:
* 异步优势演员评论家算法
* 三成
* A3C
* A3C 的架构
* A3C 如何运作
* 驾驶 A3C 上山
......@@ -39,7 +39,7 @@ A3C 网络风起云涌,并接管了 DQN。 除了前面提到的优点之外
![](img/00293.jpeg)
由于我们实际上并未直接在 A3C 中计算`Q`值,因此我们将折现收益用作`Q`值的估算值。 折现收益`R`可以写为:
由于我们实际上并未直接在 A3C 中计算`Q`值,因此我们将折扣收益用作`Q`值的估算值。 折扣收益`R`可以写为:
![](img/00294.jpeg)
......@@ -47,7 +47,7 @@ A3C 网络风起云涌,并接管了 DQN。 除了前面提到的优点之外
![](img/00295.jpeg)
现在,我们可以将价值损失写为折收益与状态值之间的平方差:
现在,我们可以将价值损失写为折收益与状态值之间的平方差:
![](img/00296.jpeg)
......@@ -450,10 +450,10 @@ tensorboard --logdir=logs --port=6007 --host=127.0.0.1
问题列表如下:
1. 什么是 A3C?
2. 这三个 As 代表什么?
2. 这三个 A 代表什么?
3. 列举 A3N 优于 DQN 的一项优势
4. 全局和工作节点之间有什么区别?
5. 为什么我们熵到损失函数
5. 为什么我们计算损失函数的熵
6. 解释 A3C 的工作原理。
# 进一步阅读
......
......@@ -7,7 +7,7 @@
在本章中,您将学习以下内容:
* 策略梯度
* 使用策略梯度的月球着陆器
* 使用策略梯度的 Lunar Lander
* 深度确定性策略梯度
* 使用**深度确定性策略梯度****DDPG**)摆动
* 信任区域策略优化
......
......@@ -4,7 +4,7 @@
在本章中,您将学习如何实现以下内容:
* 环境包装器功能
* 环境包装器函数
* 决斗网络
* 回放缓冲区
* 训练网络
......@@ -247,7 +247,7 @@ class QNetworkDueling(QNetwork):
# 回放记忆
现在,我们构建经验回放缓冲区,该缓冲区用于存储所有智能体的经验。 我们从放缓冲区中抽取了少量经验来训练网络:
现在,我们构建经验回放缓冲区,该缓冲区用于存储所有智能体的经验。 我们从放缓冲区中抽取了少量经验来训练网络:
```py
class ReplayMemoryFast:
......@@ -276,7 +276,7 @@ class ReplayMemoryFast:
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)
......@@ -526,7 +526,7 @@ def train(self):
self.qnet.copy_to(self.target_qnet)
```
记忆放中的示例经验:
记忆放中的示例经验:
```py
minibatch = self.experience_replay.sample()
......
......@@ -5,8 +5,8 @@
在本章中,您将学习以下内容:
* **想象力增强智能体****I2A**
* 向人的偏好学习
* 从演示中进行深度 Q 学习
* 从人类偏好学习
* 来自演示的深度 Q 学习
* 事后经验回放
* 分层强化学习
* 逆强化学习
......@@ -68,7 +68,7 @@ I2A 的架构如下:
我们已经了解了很多有关 DQN 的知识。 我们从原始 DQN 开始,然后看到了各种改进,例如双重 DQN,决斗的网络架构和优先级的经验回放。 我们还学会了构建 DQN 来玩 Atari 游戏。 我们将智能体与环境的交互存储在经验缓冲区中,并使智能体从这些经验中学习。 但是问题是,我们花了很多训练时间来提高性能。 对于在模拟环境中学习,这很好,但是当我们让智能体在现实环境中学习时,会引起很多问题。 为了克服这个问题,谷歌公司 DeepMind 的研究人员在演示(**DQfd**)的基础上,对 DQN 进行了改进,称为**深度 Q 学习**
如果我们已经有了一些演示数据,则可以将这些演示直接添加到经验回放缓冲区中。 例如,考虑一个学习玩 Atari 游戏的智能体。 如果我们已经有了一些演示数据来告诉我们的智能体,哪个状态更好,哪个动作可以提供良好的回报,那么智能体可以直接使用此数据进行学习。 即使是少量的演示,也可以提高智能体的表现并最大程度地减少训练时间。 由于演示的数据将直接添加到优先经验重放缓冲区中,因此智能体可以从演示数据中使用的数据量以及智能体可以从其自己的交互中用于学习的数据量将由优先经验重放来控制缓冲区,因为经验将被优先考虑。
如果我们已经有了一些演示数据,则可以将这些演示直接添加到经验回放缓冲区中。 例如,考虑一个学习玩 Atari 游戏的智能体。 如果我们已经有了一些演示数据来告诉我们的智能体,哪个状态更好,哪个动作可以提供良好的回报,那么智能体可以直接使用此数据进行学习。 即使是少量的演示,也可以提高智能体的表现并最大程度地减少训练时间。 由于演示的数据将直接添加到优先经验回放缓冲区中,因此智能体可以从演示数据中使用的数据量以及智能体可以从其自己的交互中用于学习的数据量将由优先经验回放来控制缓冲区,因为经验将被优先考虑。
DQfd 中的损失函数将是各种损失的总和。 为了防止我们的智能体过度适合演示数据,我们在网络权重上计算 L2 正则化损失。 我们像往常一样计算 TD 损失,也计算监督损失,以了解我们的智能体如何从演示数据中学习。 本文的作者在 DQfd 和各种环境下进行了实验,并且 DQfd 的性能比双重决斗 DQN 优先排序的性能更好,更快。
......@@ -139,7 +139,7 @@ MAXQ 值函数分解是 HRL 中最常用的算法之一。 让我们看看 MAXQ
![](img/00453.jpeg) ----(2)
现在,我们再定义一个称为完成功能的函数,它是完成子任务`M[i]`的预期折累积奖励:
现在,我们再定义一个称为完成功能的函数,它是完成子任务`M[i]`的预期折累积奖励:
![](img/00455.jpeg) ----(3)
......@@ -179,7 +179,7 @@ RL 周围有各种改进和进步。 现在,您已经阅读完本书,可以
2. 想象力的核心是什么?
3. 智能体如何从人的偏好中学习?
4. DQfd 与 DQN 有何不同?
5. 什么是事后回顾经验
5. 什么是事后经验回放
6. 分层强化学习有什么需求?
7. 逆强化学习与强化学习有何不同?
......
......@@ -90,7 +90,7 @@
3. 请参阅“DRQN 的 Doom”部分。
4. 与 DRQN 不同,DARQN 利用注意力机制。
5. DARQN 用于理解和专注于游戏屏幕的特定区域,这一点更为重要。
6. 软硬注意。
6. 软硬注意
7. 即使该举动无用,我们也将智能体的每次举动设置为活奖赏 0。
# 第 10 章
......@@ -115,9 +115,9 @@
# 第十二章
1. DQN 直接计算 Q 值,而决斗 DQN 将 Q 值计算分解为值函数和优势函数。
2. 请参阅“记忆放”部分。
2. 请参阅“记忆放”部分。
3. 当我们使用同一网络来预测目标值和预测值时,会有很多差异,因此我们使用单独的目标网络。
4. 请参阅“记忆放”部分。
4. 请参阅“记忆放”部分。
5. 请参阅“决斗网络”部分。
6. 决斗 DQN 将 Q 值计算分解为值函数和优势函数,而双 DQN 使用两个 Q 函数来避免高估。
7. 请参阅“决斗网络”部分。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册