Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lzh_me
apachecn-dl-zh
提交
f3eb8f08
A
apachecn-dl-zh
项目概览
lzh_me
/
apachecn-dl-zh
与 Fork 源项目一致
Fork自
OpenDocCN / apachecn-dl-zh
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
apachecn-dl-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
f3eb8f08
编写于
1月 05, 2021
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2021-01-05 22:05:12
上级
001af333
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
20 addition
and
20 deletion
+20
-20
new/adv-dl-tf2-keras/10.md
new/adv-dl-tf2-keras/10.md
+20
-20
未找到文件。
new/adv-dl-tf2-keras/10.md
浏览文件 @
f3eb8f08
...
...
@@ -48,7 +48,7 @@
![](
img/B14853_10_024.png
)
确定每个!
[](
img/B14853_10_020.png
)
的概率。 例如,在上一章中的柱杆平衡问题中,目标是通过沿二维轴向左或向右移动柱车来保持柱子直立。 在这种情况下,!
[](
img/B14853_10_026.png
)
和!
[](
img/B14853_10_027.png
)
分别是左右移动的概率。 通常,代理以最高概率!
[](
img/B14853_10_028.png
)
采取行动。
对于连续动作空间,!
[](
img/B14853_10_029.png
)
根据给定状态的概率分布对动作进行采样。 例如,如果连续动作空间在!
[](
img/B14853_10_030.png
)
范围内,则!
[](
img/B14853_10_029.png
)
通常是高斯分布,其均值和标准差由策略网络预测。 预测动作是来自此高斯分布的样本。 为了确保不会生成任何无效的预测,该操作将被限制在-1.0 和 1.0 之间。
对于连续动作空间,!
[](
img/B14853_10_029.png
)
根据给定状态的概率分布对动作进行采样。 例如,如果连续动作空间在!
[](
img/B14853_10_030.png
)
范围内,则!
[](
img/B14853_10_029.png
)
通常是高斯分布,其均值和标准差由策略网络预测。 预测动作是来自此高斯分布的样本。 为了确保不会生成任何无效的预测,该操作将被限制在
-1.0 和 1.0 之间。
正式地,对于连续的动作空间,该策略是高斯分布的样本:
...
...
@@ -320,7 +320,7 @@ class REINFORCEBaselineAgent(REINFORCEAgent):
# 4.演员批评法
在带有基线的 REINFORCE 方法中,该值用作基线。 它不用于训练值功能。 在本节中,我们介绍 REINFORCE 与基线的变化,称为
Actor-Critic
方法。 政策和价值网络扮演着参与者和批评者网络的角色。 策略网络是参与者决定给定状态时要采取的操作。 同时,价值网络评估参与者或政策网络做出的决策。
在带有基线的 REINFORCE 方法中,该值用作基线。 它不用于训练值功能。 在本节中,我们介绍 REINFORCE 与基线的变化,称为
演员评论家
方法。 政策和价值网络扮演着参与者和批评者网络的角色。 策略网络是参与者决定给定状态时要采取的操作。 同时,价值网络评估参与者或政策网络做出的决策。
价值网络充当批评者的角色,可以量化参与者所选择的行动的好坏。 价值网络通过将状态值!
[](
img/B14853_10_099.png
)
与收到的奖励!
[](
img/B14853_10_100.png
)
和观察到的下一个状态!
[](
img/B14853_10_101.png
)
的折现值之和来评估状态值。 差异!
[](
img/B14853_10_102.png
)
表示为:
...
...
@@ -330,7 +330,7 @@ class REINFORCEBaselineAgent(REINFORCEAgent):
自举技术和“公式 10.4.1”中状态表示的依赖性通常会加速学习并减少差异。 从“公式 10.4.1”,我们注意到价值网络评估了当前状态
`s`
=
`s[t]`
,这是由于 策略网络的上一个操作!
[](
img/B14853_10_106.png
)
。 同时,策略梯度基于当前动作!
[](
img/B14853_10_107.png
)
。 从某种意义上说,评估延迟了一步。
“算法 10.4.1”总结了
Actor-Critic
方法[1]。 除了评估用于训练政策和价值网络的国家价值评估外,还可以在线进行训练。 在每个步骤中,两个网络都经过训练。 这与 REINFORCE 和带有基线的 REINFORCE 不同,在基线之前,代理完成了一个情节。 首先,在当前状态的值估计期间向价值网络查询两次,其次,为下一个状态的值查询。 这两个值都用于梯度计算中。
“算法 10.4.1”总结了
演员评论家
方法[1]。 除了评估用于训练政策和价值网络的国家价值评估外,还可以在线进行训练。 在每个步骤中,两个网络都经过训练。 这与 REINFORCE 和带有基线的 REINFORCE 不同,在基线之前,代理完成了一个情节。 首先,在当前状态的值估计期间向价值网络查询两次,其次,为下一个状态的值查询。 这两个值都用于梯度计算中。
**算法 10.4.1 演员评论家**
...
...
@@ -354,13 +354,13 @@ class REINFORCEBaselineAgent(REINFORCEAgent):
1.
!
[](
img/B14853_10_126.png
)
“图 10.4.1”显示了
Actor-Critic
网络:
“图 10.4.1”显示了
演员评论家
网络:
![](
img/B14853_10_03.png
)
图 10.4.1:
Actor-Critic 网络。 通过对值
`V'`
的第二次评估,Actor-Critic
与 REINFORCE 的基线有所不同
图 10.4.1:
演员评论家网络。 通过对值
`V'`
的第二次评估,演员评论家
与 REINFORCE 的基线有所不同
“列表 10.4.1”显示了
`ActorCriticAgent`
类,该类在
`tf.keras`
中实现了“算法 10.4.1”。 与两种 REINFORCE 方法不同,
Actor-Critic 不等待情节完成。 因此,它没有实现
`train_by_episode()`
。 在每个体验单元,通过调用各自模型的
`fit()`
方法,优化第 7 行和第 9 行中用于目标和值函数
`logp_model`
和
`value_model`
的网络。 delta
变量存储第 5 行的结果。
“列表 10.4.1”显示了
`ActorCriticAgent`
类,该类在
`tf.keras`
中实现了“算法 10.4.1”。 与两种 REINFORCE 方法不同,
演员评论家不等待情节完成。 因此,它没有实现
`train_by_episode()`
。 在每个体验单元,通过调用各自模型的
`fit()`
方法,优化第 7 行和第 9 行中用于目标和值函数
`logp_model`
和
`value_model`
的网络。
`delta`
变量存储第 5 行的结果。
“列表 10.4.1”:
`policygradient-car-10.1.1.py`
...
...
@@ -436,9 +436,9 @@ class ActorCriticAgent(PolicyAgent):
![](
img/B14853_10_127.png
)
(
Equation
10.5.1)
作为!
[](
img/B14853_10_128.png
)
,价值网络预测在预测给定状态的收益时变得更加准确。 我们将
Actor-Critic 算法的这种变化称为“优势 Actor-Critic
(A2C)”。 A2C 是
[
3]提出的“异步优势参与者关键(A3C)”的单线程或同步版本。 数量![
](
img/B14853_10_129.png
)
被称为
*优势*
。
作为!
[](
img/B14853_10_128.png
)
,价值网络预测在预测给定状态的收益时变得更加准确。 我们将
演员评论家算法的这种变化称为“优势演员评论家
(A2C)”。 A2C 是
[
3]提出的“异步优势参与者关键(A3C)”的单线程或同步版本。 数量![
](
img/B14853_10_129.png
)
被称为
*优势*
。
“算法 10.5.1”总结了 A2C 方法。 A2C 和
Actor-Critic 之间存在一些差异。 Actor-Critic 在线上或根据经验样本进行训练。 A2C 类似于带基线的蒙特卡洛算法,REINFORCE 和 REINFORCE。 一集完成后,将对其进行训练。 从第一个状态到最后一个状态都对 Actor-Critic
进行了训练。 A2C 训练从最后一个状态开始,并在第一个状态结束。 此外,!
[](
img/B14853_10_130.png
)
不再打折 A2C 策略和价值梯度。
“算法 10.5.1”总结了 A2C 方法。 A2C 和
演员评论家之间存在一些差异。演员评论家在线上或根据经验样本进行训练。 A2C 类似于带基线的蒙特卡洛算法,REINFORCE 和 REINFORCE。 一集完成后,将对其进行训练。 从第一个状态到最后一个状态都对演员评论家
进行了训练。 A2C 训练从最后一个状态开始,并在第一个状态结束。 此外,!
[](
img/B14853_10_130.png
)
不再打折 A2C 策略和价值梯度。
A2C 的相应网络类似于“图 10.4.1”,因为我们仅更改了梯度计算方法。 为了鼓励训练过程中的探员探索,A3C 算法
[
3]建议将策略函数的加权熵值的梯度添加到到梯度函数![
](
img/B14853_10_131.png
)
中。 回想一下,熵是对信息或事件不确定性的度量。
...
...
@@ -463,7 +463,7 @@ A2C 的相应网络类似于“图 10.4.1”,因为我们仅更改了梯度计
1.
执行梯度上升!
[](
img/B14853_10_064.png
)
。
“列表 10.5.1”显示了
`A2CAgent`
类,该类在
`tf.keras`
中实现了“算法 10.5.1”。 与两个 REINFORCE 方法不同,返回值是从最后一个体验单元或状态到第一个体验单元或状态的计算得出的。 在每个体验单元,通过调用各自模型的
`fit()`
方法,优化第 7 行和第 9 行中用于目标和价值函数
`logp_model`
和
`value_model`
的网络。 注意,在对象实例化期间,熵损失的
beta
或权重设置为
`0.9`
,以指示将使用熵损失函数。 此外,使用 MSE 损失功能训练
`value_model`
。
“列表 10.5.1”显示了
`A2CAgent`
类,该类在
`tf.keras`
中实现了“算法 10.5.1”。 与两个 REINFORCE 方法不同,返回值是从最后一个体验单元或状态到第一个体验单元或状态的计算得出的。 在每个体验单元,通过调用各自模型的
`fit()`
方法,优化第 7 行和第 9 行中用于目标和价值函数
`logp_model`
和
`value_model`
的网络。 注意,在对象实例化期间,熵损失的
`beta`
或权重设置为
`0.9`
,以指示将使用熵损失函数。 此外,使用 MSE 损失功能训练
`value_model`
。
“列表 10.5.1”:
`policygradient-car-10.1.1.py`
...
...
@@ -582,17 +582,17 @@ class A2CAgent(PolicyAgent):
![](
img/B14853_10_04.png
)
图 10.6.1:
MountainCarContinuous-v0
OpenAI Gym 环境
图 10.6.1:
`MountainCarContinuous-v0`
OpenAI Gym 环境
为了到达右侧山顶的黄旗,它必须来回行驶以获得足够的动力。 应用于汽车的能量越多(即动作的绝对值越大),则奖励越小(或负作用越大)。
奖励始终为负,到达标志时仅为正。 在这种情况下,汽车将获得+100 的奖励。 但是,每个操作都会受到以下代码的惩罚:
奖励始终为负,到达标志时仅为正。 在这种情况下,汽车将获得
+100 的奖励。 但是,每个操作都会受到以下代码的惩罚:
```
py
reward
-=
math
.
pow
(
action
[
0
],
2
)
*
0.1
```
有效动作值的连续范围是
[-1.0,1.0]。 超出范围时,动作将被剪裁为其最小值或最大值。 因此,应用大于 1.0 或小于
-1.0 的操作值是没有意义的。
有效动作值的连续范围是
`[-1.0, 1.0]`
。 超出范围时,动作将被剪裁为其最小值或最大值。 因此,应用大于 1.0 或小于
-1.0 的操作值是没有意义的。
`MountainCarContinuous-v0`
环境状态包含两个元素:
...
...
@@ -621,7 +621,7 @@ reward-= math.pow(action[0],2)*0.1
图 10.6.4:解码器模型
自编码器使用 MSE,损失函数和
`tf.keras`
默认的 Adam 优化器训练了 10 个时期。 我们为训练和测试数据集采样了 220,000 个随机状态,并应用了 200,000
/
20,000 个训练测试拆分。 训练后,将保存编码器权重,以备将来在策略和价值网络的训练中使用。“列表 10.6.1”显示了构建和训练自编码器的方法。
自编码器使用 MSE,损失函数和
`tf.keras`
默认的 Adam 优化器训练了 10 个时期。 我们为训练和测试数据集采样了 220,000 个随机状态,并应用了 200,000
:
20,000 个训练测试拆分。 训练后,将保存编码器权重,以备将来在策略和价值网络的训练中使用。“列表 10.6.1”显示了构建和训练自编码器的方法。
在
`tf.keras`
实现中,除非另有说明,否则我们将在本节中提及的所有例程均作为
`PolicyAgent`
类中的方法实现。
`PolicyAgent`
的作用是代表策略梯度方法的常用功能,包括建立和训练自编码器网络模型以及预测动作,对数概率,熵和状态值。 这是“列表 10.2.1”至“列表 10.5.1”中介绍的每个策略梯度方法代理类的超类。
...
...
@@ -992,7 +992,7 @@ self.value_model = Model(inputs, value, name='value')
| 10.4.1 演员批评 | !
[](
img/B14853_10_169.png
)
| !
[](
img/B14853_10_171.png
)
|
| 10.5.1 A2C | !
[](
img/B14853_10_172.png
)
| !
[](
img/B14853_10_173.png
)
|
表 10.6.1:
`logp_loss`
的
y_true 值和 value_loss
表 10.6.1:
`logp_loss`
的
`y_true`
值和
`value_loss`
“表 10.6.2”中显示了用于计算“表 10.6.1”中的
`y_true`
的代码实现:
...
...
@@ -1006,7 +1006,7 @@ self.value_model = Model(inputs, value, name='value')
类似地,“算法 10.3.1”和“算法 10.4.1”的值损失函数具有相同的结构。 值损失函数在
`tf.keras`
中实现为
`value_loss()`
,如“列表 10.6.3”所示。 公共梯度因子!
[](
img/B14853_10_179.png
)
由张量
`y_pred`
表示。 剩余因子由
`y_true`
表示。
`y_true`
值也显示在“表 10.6.1”中。 REINFORCE 不使用值函数。 A2C 使用 MSE 损失函数来学习价值函数。 在 A2C 中,
`y_true`
代表目标值或基本情况。
有了所有网络模型和损失函数,最后一部分是训练策略,每种算法都不同。 每个策略梯度方法的训练算法已在“列表 10.2.1”至“列表 10.5.1”中进行了讨论。 “算法 10.2.1”,“算法 10.3.1”和“算法 10.5.1”等待完整的情节在训练之前完成,因此它同时运行
`train_by_episode()`
和
`train()`
。 完整剧集保存在
`self.memory`
中。
Actor-Critic
“算法 10.4.1”每步训练一次,仅运行
`train()`
。
有了所有网络模型和损失函数,最后一部分是训练策略,每种算法都不同。 每个策略梯度方法的训练算法已在“列表 10.2.1”至“列表 10.5.1”中进行了讨论。 “算法 10.2.1”,“算法 10.3.1”和“算法 10.5.1”等待完整的情节在训练之前完成,因此它同时运行
`train_by_episode()`
和
`train()`
。 完整剧集保存在
`self.memory`
中。
演员评论家
“算法 10.4.1”每步训练一次,仅运行
`train()`
。
“列表 10.6.4”显示了当代理执行并训练策略和价值模型时,一个情节如何展开。
`for`
循环执行 1,000 集。 当达到 1,000 步或汽车触及旗帜时,情节终止。 代理在每个步骤执行策略预测的操作。 在每个情节或步骤之后,将调用训练例程。
...
...
@@ -1073,7 +1073,7 @@ self.value_model = Model(inputs, value, name='value')
通过训练代理人 1000 次情节,评估了 4 种策略梯度方法。 我们将 1 次训练定义为 1,000 次训练。 第一性能度量标准是通过累计汽车在 1,000 集内达到标志的次数来衡量的。
在此指标中,A2C 达到该标志的次数最多,其次是 REINFORCE(具有基线,
Actor-Critic
和 REINFORCE)。 使用基线或批判者可以加速学习。 请注意,这些是训练课程,代理会在其中不断提高其绩效。 在实验中,有些情况下代理的性能没有随时间改善。
在此指标中,A2C 达到该标志的次数最多,其次是 REINFORCE(具有基线,
演员评论家
和 REINFORCE)。 使用基线或批判者可以加速学习。 请注意,这些是训练课程,代理会在其中不断提高其绩效。 在实验中,有些情况下代理的性能没有随时间改善。
第二个性能指标基于以下要求:如果每集的总奖励至少为 90.0,则认为
`MountainCarContinuous-v0`
已解决。 从每种方法的 5 个训练课程中,我们选择了最近 100 个情节(第 900 至 999 集)中最高总奖励的 1 个训练课程。
...
...
@@ -1089,7 +1089,7 @@ self.value_model = Model(inputs, value, name='value')
![](
img/B14853_10_14.png
)
图 10.7.3:使用
Actor-Critic
方法山地车到达旗帜的次数
图 10.7.3:使用
演员评论家
方法山地车到达旗帜的次数
![](
img/B14853_10_15.png
)
...
...
@@ -1107,7 +1107,7 @@ self.value_model = Model(inputs, value, name='value')
![](
img/B14853_10_18.png
)
图 10.7.7:使用
Actor-Critic
方法获得的每集总奖励
图 10.7.7:使用
演员评论家
方法获得的每集总奖励
![](
img/B14853_10_19.png
)
...
...
@@ -1115,7 +1115,7 @@ self.value_model = Model(inputs, value, name='value')
以为基准的 REINFORCE 是唯一能够在 1,000 次训练中始终获得约 90 的总奖励的方法。 A2C 的表现仅次于第二名,但无法始终达到至少 90 分的总奖励。
在进行的实验中,我们使用相同的学习率
1e-3
进行对数概率和价值网络优化。 折扣系数设置为 0.99(A2C 除外),以 0.95 的折扣系数更容易训练。
在进行的实验中,我们使用相同的学习率
`1e-3`
进行对数概率和价值网络优化。 折扣系数设置为 0.99(A2C 除外),以 0.95 的折扣系数更容易训练。
鼓励阅读器通过执行以下操作来运行受过训练的网络:
...
...
@@ -1143,7 +1143,7 @@ python3 policygradient-car-10.1.1.py
# 8.结论
在本章中,我们介绍了策略梯度方法。 从策略梯度定理开始,我们制定了四种方法来训练策略网络。 详细讨论了四种方法:REINFORCE,带有基线的 REINFORCE,
Actor-Critic
和 A2C 算法。 我们探讨了如何在 Keras 中实现这四种方法。 然后,我们通过检查代理成功达到目标的次数以及每集获得的总奖励来验证算法。
在本章中,我们介绍了策略梯度方法。 从策略梯度定理开始,我们制定了四种方法来训练策略网络。 详细讨论了四种方法:REINFORCE,带有基线的 REINFORCE,
演员评论家
和 A2C 算法。 我们探讨了如何在 Keras 中实现这四种方法。 然后,我们通过检查代理成功达到目标的次数以及每集获得的总奖励来验证算法。
与上一章中讨论的深度 Q 网络
[
2]相似,基本策略梯度算法可以进行一些改进。 例如,最突出的一个是 A3C [3],它是 A2C 的多线程版本。 这使代理可以同时接触不同的经验,并异步优化策略和价值网络。 但是,在 [OpenAI
](
https://blog.openai.com/baselines-acktr-a2c/
)
进行的实验中,与 A2C 相比,A3C 没有强大的优势,因为前者无法利用 A3C 的优势 当今提供强大的 GPU。
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录