提交 6855f430 编写于 作者: W wizardforcel

2021-01-18 22:16:47

上级 be31e8e0
# 异步方法
到目前为止,我们已经涵盖了大多数重要主题,例如马尔可夫决策过程,值迭代,Q 学习,策略梯度,深度 Q 网络和参与者批评算法。 这些构成了强化学习算法的核心。 在本章中,我们将继续从 Actor Critic Algorithms 中停止的地方继续搜索,并深入研究用于深度强化学习的高级**异步方法**及其最著名的变体**异步优势演员评论家算法**,通常称为 **A3C 算法**
到目前为止,我们已经涵盖了大多数重要主题,例如马尔可夫决策过程,值迭代,Q 学习,策略梯度,深度 Q 网络和参与者批评算法。 这些构成了强化学习算法的核心。 在本章中,我们将继续从演员评论家算法中停止的地方继续搜索,并深入研究用于深度强化学习的高级**异步方法**及其最著名的变体**异步优势演员评论家算法**,通常称为 **A3C 算法**
但是,在开始使用 A3C 算法之前,让我们修改第 4 章和“策略梯度”中涵盖的 Actor Critic 算法的基础。 如果您还记得,演员评论算法有两个组成部分:
但是,在开始使用 A3C 算法之前,让我们修改第 4 章和“策略梯度”中涵盖的演员评论家算法的基础。 如果您还记得,演员评论算法有两个组成部分:
* 演员
* 评论家
......@@ -11,18 +11,18 @@
![](img/5b448889-61bf-43ca-82f5-ce5d63662d33.png)
换句话说,演员的行为像孩子,而评论家的行为像父母,孩子探索多种行为,父母批评不良行为并补充良好行为。 因此,行动者批判算法既学习了策略功能,又学习了状态作用值函数。 像策略梯度一样,参与者评论算法也通过梯度上升来更新其参数。 在高维连续状态和动作空间的情况下,Actor-critic 方法非常有效。
换句话说,演员的行为像孩子,而评论家的行为像父母,孩子探索多种行为,父母批评不良行为并补充良好行为。 因此,行动者批判算法既学习了策略功能,又学习了状态作用值函数。 像策略梯度一样,参与者评论算法也通过梯度上升来更新其参数。 在高维连续状态和动作空间的情况下,演员评论家方法非常有效。
因此,让我们从 Google DeepMind 发布的深度强化学习中的异步方法开始,该方法在性能和计算效率方面都超过了 DQN。
我们将在本章介绍以下主题:
* 为什么使用异步方法?
* 异步一站式 Q 学习
* 异步一步 SARSA
* 异步 n 步 Q 学习
* 异步一 Q 学习
* 异步一步 SARSA
* 异步 N 步 Q 学习
* 异步优势演员评论家
* OpenAI 体育馆中用于摆锤 v0 的 A3C
* OpenAI 体育馆中用于 CartPole v0 的 A3C
# 为什么使用异步方法?
......@@ -47,26 +47,26 @@ Google DeepMind 和 MILA 的联合团队于 2016 年 6 月发布了用于深度
深度强化学习中异步方法的不同变体是:
* 异步一站式 Q 学习
* 异步一步 SARSA
* 异步 n 步 Q 学习
* 异步一 Q 学习
* 异步一步 SARSA
* 异步 N 步 Q 学习
* **异步优势演员评论家****A3C**
将变体 A3C 应用于各种 Atari 2600 游戏时,在多核 CPU 上获得了更好的基准测试结果,相对于早期的深度强化学习算法而言,其结果所需的时间要短得多,后者需要在 GPU 驱动的机器上运行。 因此,由于依赖于昂贵的硬件资源(如 GPU)以及不同的复杂分布式架构,因此解决了该问题。 由于所有这些优点,A3C 学习代理是当前最先进的强化学习代理。
# 异步一站式 Q 学习
异步单步 Q 学习的架构与 DQN 非常相似。 DQN 中的代理由一组主要网络和目标网络表示,其中一步损失的计算方法是主要网络预测的当前状态 s 的状态作用值与目标状态- 目标网络计算的当前状态的动作值。 相对于策略网络的参数来计算损失的梯度,然后使用梯度下降优化器将损失最小化,从而导致主网络的参数更新。
异步单步 Q 学习的架构与 DQN 非常相似。 DQN 中的代理由一组主要网络和目标网络表示,其中一步损失的计算方法是主要网络预测的当前状态`s`的状态作用值与目标状态- 目标网络计算的当前状态的动作值。 相对于策略网络的参数来计算损失的梯度,然后使用梯度下降优化器将损失最小化,从而导致主网络的参数更新。
异步单步 Q 学习中的区别在于,有多个此类学习代理,例如,学习器并行运行并计算此损失。 因此,梯度计算也并行发生在不同的线程中,其中每个学习代理都与自己的环境副本进行交互。 这些梯度在多个时间步长上在不同线程中的累积用于在固定时间步长后或情节结束后更新策略网络参数。 梯度的累积优于策略网络参数更新,因为这样可以避免覆盖每个学习器代理执行的更改。
此外,将不同的探索策略添加到不同的线程可以使学习变得多样化且稳定。 由于更好的探索,因此提高了性能,因为不同线程中的每个学习代理都受到不同的探索策略。 尽管有许多方法可以执行此操作,但一种简单的方法是在使用![](img/396240a6-a09a-4588-b405-54fef7a9be74.png) -greedy 的同时为不同的线程使用不同的 epsilon ![](img/3594b237-6432-4150-bbcb-35b868d50025.png)示例。
此外,将不同的探索策略添加到不同的线程可以使学习变得多样化且稳定。 由于更好的探索,因此提高了性能,因为不同线程中的每个学习代理都受到不同的探索策略。 尽管有许多方法可以执行此操作,但一种简单的方法是在使用 ε 贪婪的同时为不同的线程使用不同的`ε`示例。
异步单步 Q 学习的伪代码如下所示。 这里,以下是全局参数:
* ![](img/4e2e2f05-a713-40a9-84b4-abd6e47f309f.png):策略网络的参数(权重和偏差)
* ![](img/ec675ec6-2574-4fe5-b97c-adfdfa98c693.png):目标网络的参数(权重和偏差)
* T:整体时间步长计数器
* `T`:整体时间步长计数器
```py
// Globally shared parameters , and T
......@@ -111,7 +111,7 @@ repeat until :
* ![](img/3b0e84ed-0408-4420-9d16-382655598e8e.png):策略网络的参数(权重和偏差)
* ![](img/4c7f218e-0d62-44fb-b430-252fac104d1a.png):目标网络的参数(权重和偏差)
* T:总时间步长计数器
* `T`:总时间步长计数器
```py
// Globally shared parameters , and T
......@@ -150,16 +150,16 @@ repeat until :
#update using accumulated gradients
```
# 异步 n 步 Q 学习
# 异步 N 步 Q 学习
异步 n 步 Q 学习的架构在某种程度上类似于异步单步 Q 学习的架构。 区别在于,使用探索策略最多选择![](img/934eccea-ab73-4d16-8dd9-6ae2bef78aa9.png)步骤或直到达到终端状态,才能选择学习代理动作,以便计算策略网络参数的单个更新。 此过程列出了自上次更新以来![](img/55e36559-5c3e-4598-b8a3-954b2a844161.png)来自环境的奖励。 然后,对于每个时间步长,将损失计算为该时间步长的折现未来奖励与估算 Q 值之间的差。 对于每个时间步长,此损耗相对于特定于线程的网络参数的梯度将被计算和累积。 有多个这样的学习代理并行运行和累积梯度。 这些累积的梯度用于执行策略网络参数的异步更新。
异步 N 步 Q 学习的架构在某种程度上类似于异步单步 Q 学习的架构。 区别在于,使用探索策略最多选择![](img/934eccea-ab73-4d16-8dd9-6ae2bef78aa9.png)步骤或直到达到终端状态,才能选择学习代理动作,以便计算策略网络参数的单个更新。 此过程列出了自上次更新以来![](img/55e36559-5c3e-4598-b8a3-954b2a844161.png)来自环境的奖励。 然后,对于每个时间步长,将损失计算为该时间步长的折现未来奖励与估算 Q 值之间的差。 对于每个时间步长,此损耗相对于特定于线程的网络参数的梯度将被计算和累积。 有多个这样的学习代理并行运行和累积梯度。 这些累积的梯度用于执行策略网络参数的异步更新。
异步 n 步 Q 学习的伪代码如下所示。 这里,以下是全局参数:
异步 N 步 Q 学习的伪代码如下所示。 这里,以下是全局参数:
* ![](img/a8678ea8-ad82-4124-a099-603825a7d2f8.png):策略网络的参数(权重和偏差)
* ![](img/9008762f-89a2-4438-b034-e141fdf73759.png):目标网络的参数(权重和偏差)
* T:总时间步长计数器
* t:线程级时间步长计数器
* `T`:总时间步长计数器
* `t`:线程级时间步长计数器
* ![](img/1c3d0299-4182-4715-83f4-eecdcd605678.png):总时间步长的最大值
* ![](img/67ab7590-6e10-4049-b5c6-7cce81f3f339.png):线程中的最大时间步数
......@@ -212,7 +212,7 @@ repeat until :
在第 4 章和“策略梯度”中,我们研究了如何通过从策略梯度的预期未来收益中减去基线函数来更新策略梯度,从而在不影响预期收益的情况下减少方差的情况。 梯度。 预期的未来奖励和基线函数之间的差称为**优势函数**; 它不仅告诉我们状态的好坏,而且还告诉我们该动作的预期好坏。
卷积神经网络既用于演员网络,又用于评论者网络。 在每个![](img/4a53a424-256c-43ac-98a9-b4b0fe5c0156.png)步骤之后或直到达到终端状态之前,将更新策略和操作值参数。 将与以下伪代码一起说明网络更新,熵和目标函数。 此外,将策略![](img/861ea090-c642-4a1f-b1b0-5082002bc932.png)的熵 H 添加到目标函数中,以通过避免过早收敛到次优策略来改善探索。
卷积神经网络既用于演员网络,又用于评论者网络。 在每个![](img/4a53a424-256c-43ac-98a9-b4b0fe5c0156.png)步骤之后或直到达到终端状态之前,将更新策略和操作值参数。 将与以下伪代码一起说明网络更新,熵和目标函数。 此外,将策略![](img/861ea090-c642-4a1f-b1b0-5082002bc932.png)的熵`H`添加到目标函数中,以通过避免过早收敛到次优策略来改善探索。
因此,有多个这样的学习代理程序运行,每个学习代理程序都包含参与者关键网络,其中策略网络参数(即参与者网络参数)使用策略梯度进行更新,其中优势函数用于计算那些策略梯度。
......@@ -220,7 +220,7 @@ repeat until :
* ![](img/b61d023c-24db-426f-b276-170dc20d960a.png):策略网络的参数(权重和偏差)
* ![](img/9f23bd7c-22ba-4f6c-a6a8-d09a2dd58bfb.png):值函数逼近器的参数(权重和偏差)
* T:总时间步长计数器
* `T`:总时间步长计数器
特定于线程的参数如下:
......@@ -382,7 +382,7 @@ class ActorCriticNetwork(object):
return action
```
代表每个线程中的进程的 worker 类如下所示:
代表每个线程中的进程的`Worker`类如下所示:
```py
class Worker(object):
......@@ -493,6 +493,6 @@ if __name__ == "__main__":
# 概要
我们看到,使用并行学习器更新共享模型可以大大改善学习过程。 我们了解了在深度学习中使用异步方法的原因及其不同的变体,包括异步单步 Q 学习,异步单步 SARSA,异步 n 步 Q 学习和异步优势参与者。 我们还学习了实现 A3C 算法的方法,在该方法中,我们使代理学习了 Breakout and Doom 游戏。
我们看到,使用并行学习器更新共享模型可以大大改善学习过程。 我们了解了在深度学习中使用异步方法的原因及其不同的变体,包括异步单步 Q 学习,异步单步 SARSA,异步 N 步 Q 学习和异步优势参与者。 我们还学习了实现 A3C 算法的方法,在该方法中,我们使代理学习了 Breakout 和 Doom 游戏。
在接下来的章节中,我们将重点介绍不同的领域,以及如何以及可以应用深度强化学习。
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册