提交 e5b788ad 编写于 作者: W wizardforcel

2021-01-22 11:07:00

上级 152315b0
......@@ -70,7 +70,7 @@
让我们还考虑一下,未来回报中的所有回报并不那么重要。 为了说明这一点,假设您想训练一只狗。 您给它命令,如果它正确地遵循了它们,则给它一种奖赏。 您能期望狗像称重从现在起数年可能获得的奖励一样,来权衡明天可能获得的奖励吗? 这似乎不可行。
为了让狗决定现在需要采取什么行动,它需要更加重视可能早日获得的奖励,而不再重视可能会从现在开始获得的奖励。 这也被认为是合乎逻辑的,因为狗不确定未来的把握,特别是当狗仍在学习环境并改变其从环境中获得最大回报的策略时。 因为与未来成千上万步长的奖励相比,未来数个时间步长的奖励更可预测,所以折收益的概念应运而生。
为了让狗决定现在需要采取什么行动,它需要更加重视可能早日获得的奖励,而不再重视可能会从现在开始获得的奖励。 这也被认为是合乎逻辑的,因为狗不确定未来的把握,特别是当狗仍在学习环境并改变其从环境中获得最大回报的策略时。 因为与未来成千上万步长的奖励相比,未来数个时间步长的奖励更可预测,所以折收益的概念应运而生。
![Cumulative discounted rewards](img/B09475_07_003.jpg)
......@@ -104,7 +104,7 @@ MDP 定义有五件事:
花一点时间浏览所有动作和状态,以更好地了解它们。 通过详细说明代理可以处于的所有状态以及代理在其所有状态下可以执行的所有操作,并确定每个操作的概率,可以指定环境。 一旦指定了所有这些,就可以指定环境的一站式动态。
在任何 MDP 中,代理都会知道状态,操作和折率,而不会知道环境的回报和一步动态。
在任何 MDP 中,代理都会知道状态,操作和折率,而不会知道环境的回报和一步动态。
现在,您了解了制定任何实际问题(通过强化学习解决)的所有知识。
......@@ -148,7 +148,7 @@ MDP 定义有五件事:
![Bellman equation](img/B09475_07_005.jpg)
简而言之,Bellman 等式指出,每个点的收益等于下一时间步长的估计报酬加上随后状态的折报酬。 可以肯定地说,某些策略的任何值函数都遵循贝尔曼方程。
简而言之,Bellman 等式指出,每个点的收益等于下一时间步长的估计报酬加上随后状态的折报酬。 可以肯定地说,某些策略的任何值函数都遵循贝尔曼方程。
#### 寻找最佳 Q 函数
......
......@@ -101,7 +101,7 @@ class ReplayMemory(object):
我们的环境是确定性的,因此为简单起见,此处介绍的所有方程式也都确定性地制定。 在强化学习文献中,它们还将包含对环境中随机转变的期望。
我们的目标是制定一种策略,尝试最大化折的累积奖励`R[t[0]] = Σ γ^(t - t[0]) r[t], t = t[0] -> ∞`,其中`R[t[0]]`也称为*回报*。 折扣`γ`应该是`0``1`之间的常数,以确保总和收敛。 这使得来自不确定的遥远未来的回报对我们的代理商而言不如可以对其充满信心的近期回报重要。
我们的目标是制定一种策略,尝试最大化折的累积奖励`R[t[0]] = Σ γ^(t - t[0]) r[t], t = t[0] -> ∞`,其中`R[t[0]]`也称为*回报*。 折扣`γ`应该是`0``1`之间的常数,以确保总和收敛。 这使得来自不确定的遥远未来的回报对我们的代理商而言不如可以对其充满信心的近期回报重要。
Q 学习的主要思想是,如果我们有一个函数`Q*:State x Action => R`,这可以告诉我们,如果我们取一个 在给定状态下采取行动,那么我们就可以轻松地制定出使我们的回报最大化的策略:
......
......@@ -220,7 +220,7 @@ ReLU 的导数图,对于`x <= 0`,`f'(x) = 1`,对于`x > 0`,`f'(x) = 0`
* ![](img/21aef233-5c4f-4455-90f3-619163f54e10.png)。
* m =训练数据集的大小。
* `m`为训练数据集的大小。
* 并且,由于![](img/cb84ddb4-fcba-4909-aac3-b8f7185db475.png),其中每个![](img/36c81c30-320b-4f2a-9dd5-321faf371ec1.png)。
......@@ -729,13 +729,13 @@ Q 学习涉及的步骤:
5. 使用以下 Bellman 公式更新表中`(s, a)`对的`Q`值:
![](img/038ba71d-be57-48da-8e37-93730b0e0d76.png),其中![](img/7a96e6a0-5418-452b-81bf-a1e2a1dca770.png)是折因子
![](img/038ba71d-be57-48da-8e37-93730b0e0d76.png),其中![](img/7a96e6a0-5418-452b-81bf-a1e2a1dca770.png)是折因子
6. 然后,将当前状态的值设置为新状态,并重复该过程以完成一个情节,即达到终端状态
7. 运行多个情节来训练代理
7. 运行多个剧集来训练智能体
为简化起见,我们可以说,给定状态`s`和动作`a`的 Q 值由当前奖励`r`以及新状态在其所有操作中的折现(![](img/5a4faa30-228a-416e-90cf-69810aca8cbd.png))最大`Q`最大值。 与当前奖励相比,折扣因子延迟了来自未来的奖励。 例如,今天的 100 奖励在将来的价值将超过 100。 同样,将来的 100 奖励必须今天价值不到 100。 因此,我们将折现未来的奖励。 连续重复此更新过程会导致 Q 表值收敛到给定状态下给定操作的预期未来奖励的准确度量。
为简化起见,我们可以说,给定状态`s`和动作`a`的 Q 值由当前奖励`r`以及新状态在其所有操作中的折扣(![](img/5a4faa30-228a-416e-90cf-69810aca8cbd.png))最大`Q`最大值。 与当前奖励相比,折扣因子延迟了来自未来的奖励。 例如,今天的 100 奖励在将来的价值将超过 100。 同样,将来的 100 奖励必须今天价值不到 100。 因此,我们将折扣未来的奖励。 连续重复此更新过程会导致 Q 表值收敛到给定状态下给定操作的预期未来奖励的准确度量。
当状态空间和动作空间的数量增加时,很难维护 Q 表。 在现实世界中,状态空间无限大。 因此,需要另一种无需 Q 表即可生成`Q(s, a)`方法。 一种解决方案是用功能替换 Q 表。 该函数将状态作为向量形式的输入,并输出给定​​状态下所有动作的 Q 值向量。 该函数逼近器可以由神经网络表示,以预测 Q 值。 因此,当状态和动作空间变大时,我们可以添加更多的层并适合于深度神经网络,以更好地预测 Q 值,这对于 Q 表来说似乎是不可能的。 这样就产生了 Q 网络,如果使用了更深层的神经网络(例如卷积神经网络),那么它会导致**深度 Q 网络****DQN**)。
......@@ -749,7 +749,7 @@ A3C 算法由 Google DeepMind 和 MILA 的联合团队于 2016 年 6 月发布
* **异步**:在 DQN 中,您还记得我们将神经网络与我们的代理一起使用来预测动作。 这意味着只有一个代理,并且它正在与一个环境交互。 A3C 所做的是创建代理环境的多个副本,以使代理更有效地学习。 A3C 具有一个全球网络和多个工作人员代理,其中每个代理都有其自己的一组网络参数,并且每个参数都与其环境副本同时进行交互,而无需与另一个代理的环境进行交互。 它比单个代理更好的原因是每个代理的经验独立于其他代理的经验。 因此,所有工人代理人的总体经验导致了各种各样的训练。
* **演员评论家**:演员评论家结合了价值迭代和策略迭代的优势。 因此,网络将为给定状态 s 估计值函数`V(s)`和策略`π(s)`。 函数逼近器神经网络的顶部将有两个单独的全连接层,分别输出状态的值和状态策略。 代理使用值,该值充当批评者来更新策略,即,智能角色。
* **优势**:策略梯度使用折收益告诉代理该行动是好是坏。 用优势代替它不仅可以量化操作的好坏状态,而且可以更好地鼓励和劝阻操作(我们将在第 4 章,“策略梯度”中进行讨论)。
* **优势**:策略梯度使用折收益告诉代理该行动是好是坏。 用优势代替它不仅可以量化操作的好坏状态,而且可以更好地鼓励和劝阻操作(我们将在第 4 章,“策略梯度”中进行讨论)。
# TensorFlow 和 OpenAI Gym 简介
......
......@@ -10,17 +10,17 @@ OpenAI Gym 提供不同类型的环境。 它们如下:
* 经典控制
* 算法化
* 雅达利
* Atari
* 棋盘游戏
* Box2D
* 参数调整
* MuJoCo
* 玩具文
* 安全
* 我的世界
* 玩具文
* Safety
* Minecraft
* PyGame 学习环境
* 足球
* 厄运
* Doom
有关这些广泛的环境类别及其环境游乐场的详细信息,请访问[这个页面](https://gym.openai.com/envs/)
......
......@@ -213,7 +213,7 @@ MDP 试图通过将网格划分为状态,动作,模型/转换模型和奖励
因此,为了解决:
* 从任意工具开始
* 从任意效用开始
* 根据邻域更新效用,直到收敛为止,也就是说,根据给定状态的着陆状态的效用,使用贝尔曼方程更新状态的效用
......
......@@ -60,9 +60,9 @@
石头,剪刀,布是两人游戏,包含以下规则:
* 摇滚剪刀
* 剪刀打
* 纸拍摇滚
* 石头打剪刀
* 剪刀打
* 布打石头
因此,不可能有确定的策略来取胜。 说,如果有确定性的策略,那摇滚总是赢家,但是如果对手有剪刀,情况就是这样。 但是,当对手拿到纸时,石头就被击败了。 因此,在这种环境下无法确定解决方案。 解决此问题的唯一方法是使用本质上是随机的统一随机策略。
......@@ -186,7 +186,7 @@ Episode T
在情节的每个时间步,即当前步`t`,我们更新要离开的状态![](img/93bfad9d-15d6-48dc-8f47-8f9aef8070ba.png)的资格,然后为所有状态更新以下内容:
* 针对当前离开状态![](img/3c8ca4ff-4fda-4e46-bf29-46dd17cbb4de.png)(即![](img/a11db6ce-2582-4ac7-89d7-d7c972b0ec78.png))和要更改其值的状态的合格分数![](img/9d156535-7cde-4d47-827f-877259ece162.png)使用时间差误差的状态值函数
* 通过给定折现系数进行折现的资格分数
* 通过给定折扣系数进行折扣的资格分数
由于这些更新针对所有状态独立发生,因此可以针对所有状态并行执行这些操作。
......@@ -377,7 +377,7 @@ end for
1. 初始化随机策略。
2. 对于给定的当前策略,我们将通过以下方式收集不同的样本轨迹(展示):
1. 运行游戏的一个情节并捕获该情节的轨迹。
1. 运行游戏的一个剧集并捕获该剧集的轨迹。
2. 同样,收集一批轨迹,如下所示:
| **轨迹** | **游戏结果** | **轨迹好/坏** |
......@@ -402,7 +402,7 @@ import cPickle as pickle #to save/load model
import gym
```
* **超参数初始化**:由于我们正在使用`RMSProp`优化器进行梯度下降,因此超参数(例如隐藏层节点的数量,批量大小,学习率,折系数`gamma`,衰减率)。 我们将使用以下代码进行初始化:
* **超参数初始化**:由于我们正在使用`RMSProp`优化器进行梯度下降,因此超参数(例如隐藏层节点的数量,批量大小,学习率,折系数`gamma`,衰减率)。 我们将使用以下代码进行初始化:
```py
#hyperparameters
......
......@@ -46,7 +46,7 @@ DeepMind 在研究期刊 **Nature** 上发表了他们的论文[《通过深度
# 基于模型的学习和无模型学习
在第 3 章,“马尔可夫决策过程”中,我们使用状态,动作,奖励,转移模型和折因子来解决我们的马尔可夫决策过程,即 MDP 问题。 因此,如果 MDP 问题的所有这些要素均可用,我们可以轻松地使用规划算法为目标提出解决方案。 这种类型的学习称为**基于模型的学习**,其中 AI 代理将与环境交互,并基于其交互,将尝试近似环境的模型,即状态转换模型。 给定模型,现在代理可以尝试通过值迭代或策略迭代找到最佳策略。
在第 3 章,“马尔可夫决策过程”中,我们使用状态,动作,奖励,转移模型和折因子来解决我们的马尔可夫决策过程,即 MDP 问题。 因此,如果 MDP 问题的所有这些要素均可用,我们可以轻松地使用规划算法为目标提出解决方案。 这种类型的学习称为**基于模型的学习**,其中 AI 代理将与环境交互,并基于其交互,将尝试近似环境的模型,即状态转换模型。 给定模型,现在代理可以尝试通过值迭代或策略迭代找到最佳策略。
但是,对于我们的 AI 代理来说,学习环境的显式模型不是必需的。 它可以直接从与环境的交互中得出最佳策略,而无需构建模型。 这种学习称为**无模型学习**。 无模型学习涉及在没有具体环境模型的情况下预测某个策略的值函数。
......@@ -111,7 +111,7 @@ Repeat forever:
![](img/ea5b424c-de3c-4fbc-a152-adbc346fd533.png) =学习收敛速度
![](img/48218f21-9c36-4878-ab3e-bb4cbf9ee090.png) =未来奖励的折系数
![](img/48218f21-9c36-4878-ab3e-bb4cbf9ee090.png) =未来奖励的折系数
`Q(s', a')`为在状态`s`下采取动作`a`之后,所得状态`s'`的状态动作对的`Q`
......@@ -124,7 +124,7 @@ Repeat forever:
Q 学习涉及的步骤如下:
1. 随机初始化 Q 表
2. 对于每个情节,请执行以下步骤:
2. 对于每个剧集,请执行以下步骤:
1. 对于给定状态`s`,从 Q 表中选择动作`a`
2. 执行动作`a`
3. 奖励`R`和状态`s'`
......@@ -343,7 +343,7 @@ Episode 10 completed with total reward 222.356805259 in 843 steps
* 使用卷积神经网络代替单层神经网络
* 使用经验回放
* 分离目标网络计算目标 Q 值
* 分离目标网络计算目标 Q 值
在以下主题中,我们将详细讨论每个参数:
......@@ -441,7 +441,7 @@ import gym
* `__init__``self``learning_rate``gamma``n_features``n_actions``epsilon``parameter_changing_pointer``memory_size`):默认构造器,用于分配超参数,例如:
* `learning_rate`
* 伽马,即折现因子
* `gamma`,即折扣因子
* `n_feature`:状态中的要素数,即状态中的尺寸数
* `epsilon`:ε 贪婪条件的阈值,以利用或探索动作
* `build_networks()`:使用 Tensorflow 创建主要和目标网络
......@@ -512,7 +512,7 @@ def __init__(self,learning_rate,gamma,n_features,n_actions,epsilon,parameter_cha
* `b1`:与输入层关联的偏置向量
* `ReLU`:信号从输入到隐藏层的激活函数
* `w2`:与隐藏层关联的权重矩阵
* `b2`:与输入层关联的偏置向量
* `b2`:与隐藏层关联的偏置向量
* 计算主网络输出的 Q 值与目标网络输出的 Q 值之间的损失
* 使用 **adam** 优化器将损失降到最低
......@@ -878,7 +878,7 @@ Action space shape : Discrete(4)
Type of actions : ['NOOP', 'FIRE', 'RIGHT', 'LEFT']
```
因此,我们得到了状态空间和动作空间的形状,以及可以采取的四种不同类型的动作,即无动作(无操作的简称),开火(上方目标砖的球),向右走, 或向左移动以阻止球下降。
因此,我们得到了状态空间和动作空间的形状,以及球拍可以采取的四种不同类型的动作,即无动作(无操作的简称),开火(上方目标砖的球),向右走, 或向左移动以阻止球下降。
我们还检查示例裁剪并查看差异,如下图所示:
......@@ -888,13 +888,13 @@ Type of actions : ['NOOP', 'FIRE', 'RIGHT', 'LEFT']
游戏以下列方式进行:
* 底部的将球击发,击中砖块以摧毁屏幕的顶层
* 底部的球拍将球击发,击中砖块以摧毁屏幕的顶层
* 击中砖块后,球反弹回来
* 应向左或向右移动以击中球并阻止其掉落
* 球拍应向左或向右移动以击中球并阻止其掉落
* 如果球落到下方,也就是说,从球拍下方的屏幕上移开,则游戏结束且玩家输
* 如果球从球拍弹起,它将再次上升,从墙壁上弹起并击中更多砖块
因此,目标是通过摧毁所有积木而不让球进入下来赢得比赛。
因此,目标是通过摧毁所有积木而不让球进入球拍下来赢得比赛。
让我们开始实现一个深层的 Q 网络,以使我们的代理商学习 Atari Breakout 的游戏。 首先,我们将使用以下代码导入必要的库:
......@@ -1318,7 +1318,7 @@ MCTS 是独立于域的,不需要复杂的手写试探法。 因此,它是
**状态-动作-奖励-状态-动作****SARSA**)算法是一种基于策略的学习问题。 就像 Q 学习一样,SARSA 也是一个时差学习问题,也就是说,它会预测情节的下一步以估计未来的回报。 SARSA 和 Q 学习之间的主要区别在于,具有最大 Q 值的动作不用于更新当前状态动作对的 Q 值。 取而代之的是,选择作为当前策略结果的操作的 Q 值,或者由于采用诸如 ε 贪婪之类的探索步骤来更新当前状态操作对的 Q 值。 SARSA 之所以得名,是因为使用五元组`Q(s, a, r, s', a')`完成了 Q 值更新,其中:
* `s``a`:当前状态和操作
* `r`:采取行动后观察到的报酬`a`
* `r`:采取行动后观察到的奖励`a`
* `s'`:在采取操作`a`后到达下一个状态
* `a'`:要在状态`s'`下执行的动作
......@@ -1326,7 +1326,7 @@ SARSA 算法涉及的步骤如下:
1. 随机初始化 Q 表
2. 对于每个情节
2. 对于每个剧集
1. 对于给定状态`s`,请从 Q 表中选择操作`a`
......
......@@ -152,7 +152,7 @@ repeat until :
# 异步 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 学习的伪代码如下所示。 这里,以下是全局参数:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册