提交 01e0170c 编写于 作者: W wizardforcel

2020-08-15 20:08:51

上级 aef6ca50
......@@ -25,7 +25,7 @@ AlphaGo 在基于 RL 算法的深度神经网络与最先进的树搜索算法
因此,出现的第一个问题是什么是 RL,它与我们在前几章中探讨的有监督和无监督学习有何不同?
拥有宠物的任何人都知道,训练宠物的最佳策略是奖励其期望的行为,并惩罚其不良行为。 RL 也称为与批评者进行的**学习,它是一种学习范例,其中代理以相同的方式进行学习。 这里的代理对应我们的网络(程序); 它可以执行一组**动作**(****),这会导致环境的**状态**(**s**)发生变化。 ,则代理会感知其是否获得奖励或惩罚。**
拥有宠物的任何人都知道,训练宠物的最佳策略是奖励其期望的行为,并惩罚其不良行为。 RL 也称为与批评者进行的**学习**,它是一种学习范例,其中代理以相同的方式进行学习。 这里的代理对应我们的网络(程序); 它可以执行一组**动作**`a`),这会导致环境的**状态**`s`)发生变化。 ,则代理会感知其是否获得奖励或惩罚。
例如,在狗的情况下,狗是我们的代理人,狗的自愿肌肉运动是动作,地面是环境。 狗给我们骨头作为奖励,从而感觉到我们对其动作的反应:
......@@ -33,7 +33,7 @@ AlphaGo 在基于 RL 算法的深度神经网络与最先进的树搜索算法
Adapted from Reinforcement Learning: an Introduction by Sutton and BartoEven our brain has a group of subcortical nuclei situated at the base of the forebrain called **basal ganglia**, which, according to neuroscience, are responsible for action selection, that is, help us decide which of several possible actions to execute at any given time.
代理人的目的是使报酬最大化并减少惩罚。 做出此决策涉及各种挑战,最重要的挑战是如何最大化未来的回报,也称为**临时得分分配问题**。 代理根据某些策略(π)决定其操作; 代理根据其与环境的交互来学习此策略(π)。 有各种策略学习算法; 我们将在本章中探索其中的一些。 代理通过反复试验的过程来推断最优策略(π*),并且要学习最优策略,代理需要与之交互的环境; 我们将使用提供不同环境的 OpenAI Gym。
代理人的目的是使报酬最大化并减少惩罚。 做出此决策涉及各种挑战,最重要的挑战是如何最大化未来的回报,也称为**临时得分分配问题**。 代理根据某些策略(`π`)决定其操作; 代理根据其与环境的交互来学习此策略(`π`)。 有各种策略学习算法; 我们将在本章中探索其中的一些。 代理通过反复试验的过程来推断最优策略(`π*`),并且要学习最优策略,代理需要与之交互的环境; 我们将使用提供不同环境的 OpenAI Gym。
在这里,我们仅对 RL 中涉及的基本概念进行了回顾; 我们假设您熟悉马尔可夫概念的决策过程,折现因子和价值函数(状态值和动作值)。
......@@ -117,7 +117,7 @@ env.close()
![](img/0b56e265-ff8c-4e5d-b752-b1b1e46dab61.jpg)
要观察的另一件重要事情是,在这种环境中,动作空间是离散的,而观察空间是 Box 类型的。 OpenAI 中关于空间(动作/观察)的术语“离散”和“框”是指允许的值。 离散空间允许固定范围的非负数,在我们的情况下为(0,1,2,3)。 另一方面,Box 空间表示一个 *n* 维盒子,因此对于吃豆人来说,任何有效观察结果都是 210×160×3 数字的数组。
要观察的另一件重要事情是,在这种环境中,动作空间是离散的,而观察空间是 Box 类型的。 OpenAI 中关于空间(动作/观察)的术语“离散”和“框”是指允许的值。 离散空间允许固定范围的非负数,在我们的情况下为(`0,1,2,3`)。 另一方面,盒子空间表示一个`n`维盒子,因此对于吃豆人来说,任何有效观察结果都是`210×160×3`数字的数组。
# 还有更多...
......@@ -284,15 +284,15 @@ if __name__ == '__main__':
# Q 学习平衡购物车
如导言所述,我们有一个由状态 *s**s* ∈S,其中 *S* 是所有可能状态的集合)描述的环境 可以执行动作 *a**a* ∈A,其中 *A* 由所有可能的动作组成),从而导致主体从一种状态移动到另一种状态 。 代理因其行为而受到奖励,代理的目标是使奖励最大化。 在 Q 学习中,代理通过计算最大化报酬的状态-动作组合的数量( *R* )来学习要采取的动作(策略,π)。 在选择行动时,代理人不仅要考虑现在的奖励,而且要考虑未来的折扣。
如导言所述,我们有一个由状态`s``s ∈ S`,其中`S`是所有可能状态的集合)描述的环境 可以执行动作`a``a ∈ A`,其中`A`由所有可能的动作组成),从而导致主体从一种状态移动到另一种状态 。 代理因其行为而受到奖励,代理的目标是使奖励最大化。 在 Q 学习中,代理通过计算最大化报酬的状态-动作组合的数量(`R`)来学习要采取的动作(策略,`π`)。 在选择行动时,代理人不仅要考虑现在的奖励,而且要考虑未来的折扣。
*Q: S × A→R*
`Q: S × A → R`
代理以 *Q* 的任意初始值开头,并且随着代理选择动作*和*并获得奖励 *r* ,它会更新状态 *s* (取决于过去状态 *s* 和动作 *a* )和 *Q* 值:
代理以`Q`的任意初始值开头,并且随着代理选择动作`a`并获得奖励`r`,它会更新状态`s`(取决于过去状态`s`和动作`a`)和`Q`值:
*Q(s,a) = (1 - α)Q(s,a) + α [r + γ max<sub>a'</sub> Q(s',a') ]*
`Q(s, a) = (1 - α) · Q(s, a) + α(r + γ · max[a']Q(s', a'))`
在此,*α*是学习率,*γ*是折扣因子。 第一项保留 *Q* 的旧值,第二项提供 Q 值的改进估计值(它包括当前奖励和未来行动的折现奖励)。 当结果状态不理想时,这将降低 *Q* 值,从而确保代理在下次遇到此状态时不会选择相同的动作。 类似地,当期望结果状态时,相应的 *Q* 值将增加。
在此,`α`是学习率,`γ`是折扣因子。 第一项保留`Q`的旧值,第二项提供 Q 值的改进估计值(它包括当前奖励和未来行动的折现奖励)。 当结果状态不理想时,这将降低`Q`值,从而确保代理在下次遇到此状态时不会选择相同的动作。 类似地,当期望结果状态时,相应的`Q`值将增加。
Q 学习的最简单实现涉及维护和更新状态-作用值查找表; 表的大小将为 N×M,其中 N 是所有可能状态的数量,M 是所有可能动作的数量。 对于大多数环境,此表将很大。 表越大,搜索所需的时间就越多,并且存储表所需的内存也就越多,因此这不是可行的解决方案。 在本食谱中,我们将使用 Q 学习的 NN 实现。 在此,将神经网络用作函数逼近器来预测值函数(Q)。 NN 具有等于可能动作数的输出节点,并且它们的输出表示相应动作的值函数。
......@@ -408,7 +408,7 @@ def sample_action(self, s, eps):
return np.argmax(self.predict(s))
```
4. 接下来,我们定义一个功能来播放一集; 它类似于我们先前使用的`play_one`函数,但现在我们使用 Q 学习来更新代理的权重。 我们首先使用`env.reset()`重置环境,然后开始游戏,直到完成游戏为止(并进行了最大迭代以确保程序结束)。 像以前一样,代理为当前观察状态(HTG2)选择一个动作,并在环境上执行该动作(`env.step(action)`)。 现在的区别在于,根据先前状态和采取操作后的状态,使用 *G = r +γmax <sub>a'</sub> Q(s',a')更新 NN 权重 ),以便它可以预测与某个动作相对应的准确期望值。 为了获得更好的稳定性,我们修改了奖励-杆位下降时,座席会获得-400 的奖励,否则,每一步都会获得+1 的奖励:*
4. 接下来,我们定义一个功能来播放一集; 它类似于我们先前使用的`play_one`函数,但现在我们使用 Q 学习来更新代理的权重。 我们首先使用`env.reset()`重置环境,然后开始游戏,直到完成游戏为止(并进行了最大迭代以确保程序结束)。 像以前一样,代理为当前观察状态选择一个动作,并在环境上执行该动作(`env.step(action)`)。 现在的区别在于,根据先前状态和采取操作后的状态,使用`G = r + γ · max[a']Q(s', a')`更新 NN 权重,以便它可以预测与某个动作相对应的准确期望值。 为了获得更好的稳定性,我们修改了奖励-杆位下降时,座席会获得 -400 的奖励,否则,每一步都会获得 +1 的奖励:
```py
def play_one(env, model, eps, gamma):
......@@ -497,13 +497,13 @@ if __name__ == '__main__':
# 使用 Deep Q Networks 的 Atari 游戏
**深层 Q 网络****DQN**)是 Q 学习与**卷积神经网络****CNN**)的结合。 [由 Mnih 等人在 2013 年提出](https://arxiv.org/pdf/1312.5602.pdf)。 CNN 网络具有提取空间信息的能力,因此能够从原始像素数据中学习成功的控制策略。 我们已经在第 4 章,*卷积神经网络*中使用了 CNN,因此我们直接从这里开始。
**深层 Q 网络****DQN**)是 Q 学习与**卷积神经网络****CNN**)的结合。 [由 Mnih 等人在 2013 年提出](https://arxiv.org/pdf/1312.5602.pdf)。 CNN 网络具有提取空间信息的能力,因此能够从原始像素数据中学习成功的控制策略。 我们已经在第 4 章,“卷积神经网络”中使用了 CNN,因此我们直接从这里开始。
This recipe is based on the original DQN paper, Playing Atari with Deep Reinforcement Learning by DeepMind. In the paper, they used a concept called **experience replay**, which involved randomly sampling the previous game moves (state, action reward, next state).
# 做好准备
如先前的食谱所述, *Q 学习平衡 CartPole* ,对于像《吃豆人》或 Breakout 之类的 Atari 游戏,我们需要预处理观察状态空间,该状态空间由 33,600 个像素组成,具有 3 个 RGB 值。 这些像素中的每个像素都可以采用 0 到 255 之间的任何值。我们的`preprocess`函数应该能够量化像素的可能值,同时减少观察状态空间。
如先前的食谱所述, *Q 学习平衡 CartPole*,对于像《吃豆人》或 Breakout 之类的 Atari 游戏,我们需要预处理观察状态空间,该状态空间由 33,600 个像素组成,具有 3 个 RGB 值。 这些像素中的每个像素都可以采用 0 到 255 之间的任何值。我们的`preprocess`函数应该能够量化像素的可能值,同时减少观察状态空间。
我们利用 Scipy 的`imresize`函数对图像进行下采样。 以下功能`preprocess`在将图像馈送到 DQN 之前:
......@@ -845,11 +845,11 @@ env = wrappers.Monitor(env, '/save-path')
# 玩 Pong 游戏的策略梯度
到目前为止,策略梯度是最常用的 RL 算法之一。 研究表明,经过适当调优后,它们的性能要优于 DQN,同时不会遭受过多的内存和计算缺点。 与 Q 学习不同,策略梯度使用参数化策略,该策略可以选择操作而不咨询值函数。 在策略梯度中,我们讨论了性能度量*η(θ <sub>p</sub> )*; 目标是最大程度地提高性能,因此根据梯度上升算法更新 NN 的权重。 但是,TensorFlow 没有`maximum`优化器,因此我们使用性能梯度的负值*-∇η(θ <sub>p</sub> )*并将其最小化。
到目前为止,策略梯度是最常用的 RL 算法之一。 研究表明,经过适当调优后,它们的性能要优于 DQN,同时不会遭受过多的内存和计算缺点。 与 Q 学习不同,策略梯度使用参数化策略,该策略可以选择操作而不咨询值函数。 在策略梯度中,我们讨论了性能度量`η(θ[p])`; 目标是最大程度地提高性能,因此根据梯度上升算法更新 NN 的权重。 但是,TensorFlow 没有`maximum`优化器,因此我们使用性能梯度的负值`-∇ · η(θ[p])`并将其最小化。
# 做好准备
Pong 的游戏是一个两人游戏,目标是将球弹回另一位玩家。 代理可以上下移动操纵杆(是的,是标准 NoOp)。 OpenAI 环境中的一名玩家是一位体面的 AI 玩家,他知道如何很好地玩游戏。 我们的目标是使用策略梯度来训练第二个代理。 我们的经纪人精通所玩的每款游戏。 虽然代码已构建为只能运行 500 集,但我们应该添加一条规定以将代理状态保存在指定的检查点,并且在下一次运行时,首先加载上一个检查点。 为此,我们首先声明一个保护程序,然后使用 TensorFlow `saver.save`方法保存当前的网络状态(检查点),最后从最后保存的检查点加载网络。 为完成本食谱的部分,在 *Ho* *w* *节中定义的以下`PolicyNetwork`类方法可以执行此工作:*
Pong 的游戏是一个两人游戏,目标是将球弹回另一位玩家。 代理可以上下移动操纵杆(是的,是标准 NoOp)。 OpenAI 环境中的一名玩家是一位体面的 AI 玩家,他知道如何很好地玩游戏。 我们的目标是使用策略梯度来训练第二个代理。 我们的经纪人精通所玩的每款游戏。 虽然代码已构建为只能运行 500 集,但我们应该添加一条规定以将代理状态保存在指定的检查点,并且在下一次运行时,首先加载上一个检查点。 为此,我们首先声明一个保护程序,然后使用 TensorFlow `saver.save`方法保存当前的网络状态(检查点),最后从最后保存的检查点加载网络。 为完成本食谱的部分,在“操作步骤”一节中定义的以下`PolicyNetwork`类方法可以执行此工作:
```py
def load(self):
......@@ -930,7 +930,7 @@ class PolicyNetwork(object):
self.load()
```
4. 我们定义了一种计算折现奖励的方法。 这确保代理不仅考虑当前奖励,而且考虑未来奖励。 任意时间 *t* 的折现奖励为 *R <sub>t</sub> = ∑γ <sup>k</sup> r <sub>t + k</sub>* ,其中总和超过 *k∈[0,∞]* ,并且*γ*是贴现因子,值在 0 到 1 之间。在我们的代码中,我们使用了 gamma = 0.99
4. 我们定义了一种计算折现奖励的方法。 这确保代理不仅考虑当前奖励,而且考虑未来奖励。 任意时间`t`的折现奖励为`R[t] = ∑γ[k]r[t + k]`,其中总和超过`k∈[0, ∞]`,并且`γ`是贴现因子,值在 0 到 1 之间。在我们的代码中,我们使用了`gamma = 0.99`
```py
def tf_discount_rewards(self, tf_r): # tf_r ~ [game_steps,1]
......@@ -1060,7 +1060,7 @@ if __name__ == '__main__':
# 这个怎么运作...
权重使用 Xavier 初始化进行了初始化,这确保了我们的权重既不会太大也不会太小。 两种情况都阻碍了网络的学习。 在 Xavier 初始化中,为权重分配一个具有零均值和特定方差的值 *2 /([n 中的 n <sub>+ n</sub> 中的<sub>])</sub>*,其中[ 中的 *n <sub>和</sub>* 中的 *n <sub>n 是该层的输入和输出数。 要了解有关 Xavier 初始化的更多信息,请参阅 Glorot 和 Bengio 在 2009 年发表的论文。 有关详细信息,请参见*。另请参见*部分。</sub>*
权重使用 Xavier 初始化进行了初始化,这确保了我们的权重既不会太大也不会太小。 两种情况都阻碍了网络的学习。 在 Xavier 初始化中,为权重分配一个具有零均值和特定方差`2/(nin+nout)`的值,其中`nin``nout`该层的输入和输出数。 要了解有关 Xavier 初始化的更多信息,请参阅 Glorot 和 Bengio 在 2009 年发表的论文。 有关详细信息,请参见“另见”部分。
# 还有更多...
......@@ -1076,7 +1076,7 @@ AlphaGo Zero 使用深层神经网络,该网络将原始板表示形式(当
最初,神经网络的权重是随机初始化的。 在每个迭代步骤中,都会生成许多自玩游戏。 在每个时间步,使用神经网络的先前迭代对可能的策略执行 MCTS 搜索,然后通过对搜索概率进行采样来进行移动。 重复此过程直到该特定游戏终止。 存储游戏状态,采取的策略以及游戏每个时间步骤的奖励。 并行地,根据自播放的先前迭代的所有时间步长之间均匀采样的数据训练神经网络。 调整神经网络的权重,以最小化预测值和自赢者之间的误差,并使神经网络移动概率与搜索概率的相似性最大化。
在配备 4 个 TPU 的单台机器上仅进行了 3 天的训练,AlphaGo Zero 以 100-0 击败 AlphaGo。 AlphaGo Zero 完全基于 RL。 可以在*于 2017 年 10 月发表于《自然》上的论文*掌握无人掌握的围棋游戏*中阅读其实现的详细信息。*
在配备 4 个 TPU 的单台机器上仅进行了 3 天的训练,AlphaGo Zero 以 100-0 击败 AlphaGo。 AlphaGo Zero 完全基于 RL。 可以在 2017 年 10 月发表于《自然》上的论文《掌握无人掌握的围棋游戏》中阅读其实现的详细信息。
# 也可以看看
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册