Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
冰.封万里
apachecn-dl-zh
提交
be31e8e0
A
apachecn-dl-zh
项目概览
冰.封万里
/
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,发现更多精彩内容 >>
提交
be31e8e0
编写于
1月 18, 2021
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2021-01-18 22:13:25
上级
b676492d
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
18 addition
and
18 deletion
+18
-18
new/rl-tf/05.md
new/rl-tf/05.md
+18
-18
未找到文件。
new/rl-tf/05.md
浏览文件 @
be31e8e0
...
...
@@ -125,7 +125,7 @@ Q 学习涉及的步骤如下:
1.
随机初始化 Q 表
2.
对于每个情节,请执行以下步骤:
1.
对于给定状态
`s`
,从 Q 表中选择动作
a
1.
对于给定状态
`s`
,从 Q 表中选择动作
`a`
2.
执行动作
`a`
3.
奖励
`R`
和状态
`s'`
4.
通过以下方法更新当前状态操作对的 Q 值,即
`Q(s, a)`
:
...
...
@@ -169,20 +169,20 @@ end
在这里,状态空间是连续的,由两点定义:位置和速度。 对于给定的状态(即位置和速度),代理可以采取三个离散的动作,即向前移动(向图中右上方),向相反方向(向图中左上方)或不使用引擎 ,即汽车处于空档。 代理会收到负面奖励,直到达到目标状态。
Q 学习可以轻松地应用于具有离散状态空间和动作的环境,但是这个问题成为了强化学习算法的测试平台,因为它具有连续状态空间,并且需要离散化连续状态空间或函数逼近才能将其映射到
a
离散类。
Q 学习可以轻松地应用于具有离散状态空间和动作的环境,但是这个问题成为了强化学习算法的测试平台,因为它具有连续状态空间,并且需要离散化连续状态空间或函数逼近才能将其映射到离散类。
下面列出了山地车问题的技术细节,供您参考:
状态空间是二维且连续的。 它由位置和速度组成,具有以下值:
*
**位置**
:
(-1.2,0.6)
*
**速度**
:
(-0.07,0.07)
*
**位置**
:
`(-1.2, 0.6)`
*
**速度**
:
`(-0.07, 0.07)`
动作空间是离散的和一维的,具有三个选项:
*
(左,中
立
,右)
*
(左,中,右)
每个时间步数都奖励-1。
每个时间步数都奖励
-1。
起始状态:
...
...
@@ -443,7 +443,7 @@ import gym
*
`learning_rate`
*
伽马,即折现因子
*
`n_feature`
:状态中的要素数,即状态中的尺寸数
*
`epsilon`
:
epsilon
贪婪条件的阈值,以利用或探索动作
*
`epsilon`
:
ε
贪婪条件的阈值,以利用或探索动作
*
`build_networks()`
:使用 Tensorflow 创建主要和目标网络
*
`target_params_replaced(self)`
:用主要网络参数替换目标网络参数
*
`store_experience(self,obs,a,r,obs_)`
:存储经验,即(状态,动作,奖励,新状态)的元组
...
...
@@ -613,7 +613,7 @@ def fit(self):
self
.
learning_counter
+=
1
```
我们已经讨论了探索与利用难题。
**ε 贪婪方法**
是用于选择阈值
`ε`
并产生随机数的方法之一。 如果小于
`ε`
,我们将遵循相同的策略;如果大于
·ε,我们将随机探索行动,反之亦然。 在
`epsilon_greedy(self,obs)`
中,我们以动态方式实现了 ε 贪婪方法,其中在 fit(self)
函数中,我们在每个学习步骤中都增加了
`ε`
的值:
我们已经讨论了探索与利用难题。
**ε 贪婪方法**
是用于选择阈值
`ε`
并产生随机数的方法之一。 如果小于
`ε`
,我们将遵循相同的策略;如果大于
`ε`
,我们将随机探索行动,反之亦然。 在
`epsilon_greedy(self,obs)`
中,我们以动态方式实现了 ε 贪婪方法,其中在
`fit(self)`
函数中,我们在每个学习步骤中都增加了
`ε`
的值:
```
py
def
epsilon_greedy
(
self
,
obs
):
...
...
@@ -698,7 +698,7 @@ Episode 10 with Reward : 38.7923903502 at epsilon 0.9002 in steps 126
车杆环境中的状态是一个 4 维连续空间,其中每个维如下:
*
`x`
:表示购物车位置(最小值
= -2.4,最大值=
2.4)
*
`x`
:表示购物车位置(最小值
为 -2.4,最大值为
2.4)
*
`x_dot`
:表示推车速度(最小值=-!
[](
img/f0d92660-1037-45a4-a905-f22cb45fe740.png
)
,最大值= !
[](
img/ec6de968-7ab1-4b6f-878f-fb54e27d6c45.png
)
)
*
`theta`
:显示以弧度为单位的角度(最小值= -0.73,最大值= 0.73)
*
`theta_dot`
:显示角速度(最小值=-!
[](
img/7de21974-59ca-4569-a5f7-e9fb9b9166f1.png
)
,最大值= !
[](
img/53b0fcd2-43c7-4b95-a66c-c5822cc6b7ef.png
)
)
...
...
@@ -850,7 +850,7 @@ Mean over last 100 episodes are: 248.72999999999999
# 适用于 OpenAI 体育馆 Atari 突破的深度 Q 网络
**Breakout**
环境是 Atari
,Inc.的 Nolan Bushnell,Steve Bristow 和 Steve Wozniak 团队开发的。与我们在山地车 Cartpole 中看到的状态相比,Atari Breakout 环境的状态要大得多。 或“冰湖”。 国家
空间与我们在 Atari Pong 中看到的范围相似。 因此,学习收敛需要很长时间。 以下屏幕快照说明了 Atari Breakout 环境的初始图像帧:
**Breakout**
环境是 Atari
的 Nolan Bushnell,Steve Bristow 和 Steve Wozniak 团队开发的。与我们在山地车 Cartpole 中看到的状态相比,Atari Breakout 环境的状态要大得多。 或“冰湖”。 状态
空间与我们在 Atari Pong 中看到的范围相似。 因此,学习收敛需要很长时间。 以下屏幕快照说明了 Atari Breakout 环境的初始图像帧:
![](
img/0ddf6045-7c46-45a8-b644-11756f45a966.png
)
...
...
@@ -986,7 +986,7 @@ def __init__(self,learning_rate,gamma,n_features,n_actions,epsilon,parameter_cha
```
以下代码定义了
`add_layer`
函数,该函数通过提供
`isconv`
的布尔参数来帮助根据卷积的要求创建不同的层或全连接层,如果
`isconv`
为
true
,则表示是卷积 层:
以下代码定义了
`add_layer`
函数,该函数通过提供
`isconv`
的布尔参数来帮助根据卷积的要求创建不同的层或全连接层,如果
`isconv`
为
`true`
,则表示是卷积 层:
```
py
def
add_layer
(
self
,
inputs
,
w_shape
=
None
,
b_shape
=
None
,
layer
=
None
,
activation_fn
=
None
,
c
=
None
,
isconv
=
False
):
...
...
@@ -1046,8 +1046,8 @@ def conv(self,inputs,w):
*
两者具有相同的结构,即:
*
卷积层 1
*
卷积层 2
*
全连接
第 1 层
*
全连接
第 2 层
*
全连接
层 1
*
全连接
层 2
*
使用的激活函数:ReLU
该功能还有助于:
...
...
@@ -1251,7 +1251,7 @@ if __name__ == "__main__":
env
.
render
()
```
由于权重参数很多,因此在普通计算机上进行收敛需要花费大量时间,而运行 GPU 的计算机运行成本很高。 但是,要见证在普通计算机上融合的可能性,请运行代码 5 到 6 个小时,以查看代理情况如何好转。 我建议,如果价格合理,请在带有 GPU 的计算机上运行它。 无论如何,前面的
main
函数的示例输出将如下所示:
由于权重参数很多,因此在普通计算机上进行收敛需要花费大量时间,而运行 GPU 的计算机运行成本很高。 但是,要见证在普通计算机上融合的可能性,请运行代码 5 到 6 个小时,以查看代理情况如何好转。 我建议,如果价格合理,请在带有 GPU 的计算机上运行它。 无论如何,前面的
`main`
函数的示例输出将如下所示:
```
py
....
...
...
@@ -1299,7 +1299,7 @@ Episode 1003 with Reward : 1.0 at epsilon 0.0008856 in steps 232
因此,通过搜索游戏树,由于节点和树中存在的节点和路径的组合,AI 代理可以选择最佳的移动方式。 这对于游戏复杂度处于可接受水平的问题很有用,因为随着复杂度的增加,游戏树的大小也会增加。 例如,国际象棋的游戏树具有比宇宙中原子更多的节点。 因此,在这种情况下,仅可能进行搜索。 因此,随着复杂度的增加,极大极小的可用性和游戏树减少。
另一个很好的例子是围棋的开放式中文游戏,其棋类复杂度为
10
<sup
class=
"calibre205"
>
360
</sup>
,而棋类的复杂度为 10
<sup
class=
"calibre205"
>
123
</sup>
。 由于具有如此高的复杂性,minimax 无法绘制评估函数,甚至无法创建如此大的游戏树。 因此,在《深蓝》取得成功的大约 20 年后,没有算法能够掌握 Go 的游戏。 原因很简单,当时的最新技术(例如 minimax)无法解决诸如 Go 游戏之类具有很高复杂性的问题。 而且,解决 Go
需要一种更人性化的学习方式,即基于交互。
另一个很好的例子是围棋的开放式中文游戏,其棋类复杂度为
`10^360`
,而棋类的复杂度为
`10^123`
。 由于具有如此高的复杂性,minimax 无法绘制评估函数,甚至无法创建如此大的游戏树。 因此,在《深蓝》取得成功的大约 20 年后,没有算法能够掌握围棋游戏。 原因很简单,当时的最新技术(例如 minimax)无法解决诸如围棋游戏之类具有很高复杂性的问题。 而且,解决围棋
需要一种更人性化的学习方式,即基于交互。
因此,Google DeepMind 的
**AlphaGo**
被认为是最先进的 AI 代理,它能够在 2016 年使用深度强化学习成功击败 Lee Sedol,该学习用于神经网络,强化学习和 蒙特卡洛树搜索。 这是第一次以人类可以实现的方式完成 AI 任务,即通过不断的交互,并通过不断的反复试验过程来获取知识。
...
...
@@ -1315,7 +1315,7 @@ MCTS 是独立于域的,不需要复杂的手写试探法。 因此,它是
# SARSA 算法
**状态-动作-奖励-状态-动作**
(
**SARSA**
)算法是一种基于策略的学习问题。 就像 Q 学习一样,SARSA 也是一个时差学习问题,也就是说,它会预测情节的下一步以估计未来的回报。 SARSA 和 Q 学习之间的主要区别在于,具有最大 Q 值的动作不用于更新当前状态动作对的 Q 值。 取而代之的是,选择作为当前策略结果的操作的 Q 值,或者由于采用诸如
!
[](
img/7c05c20a-2da5-422d-8b5e-78b2087f9585.png
)
-greedy
之类的探索步骤来更新当前状态操作对的 Q 值。 SARSA 之所以得名,是因为使用五元组
`Q(s, a, r, s', a')`
完成了 Q 值更新,其中:
**状态-动作-奖励-状态-动作**
(
**SARSA**
)算法是一种基于策略的学习问题。 就像 Q 学习一样,SARSA 也是一个时差学习问题,也就是说,它会预测情节的下一步以估计未来的回报。 SARSA 和 Q 学习之间的主要区别在于,具有最大 Q 值的动作不用于更新当前状态动作对的 Q 值。 取而代之的是,选择作为当前策略结果的操作的 Q 值,或者由于采用诸如
ε 贪婪
之类的探索步骤来更新当前状态操作对的 Q 值。 SARSA 之所以得名,是因为使用五元组
`Q(s, a, r, s', a')`
完成了 Q 值更新,其中:
*
`s`
,
`a`
:当前状态和操作
*
`r`
:采取行动后观察到的报酬
`a`
...
...
@@ -1336,7 +1336,7 @@ SARSA 算法涉及的步骤如下:
4. 对于新状态`s'`,请从 Q 表中选择操作`a'`
5. 通过以下操作更新当前状态操作的 Q 值,即
Q(s,a)
对:
5. 通过以下操作更新当前状态操作的 Q 值,即
`Q(s, a)`
对:
![](
img/356ee392-4f51-400f-a5af-90f2b50ee30c.png
)
...
...
@@ -1506,6 +1506,6 @@ Episode 10 completed with total reward 213.212231118 in 786 steps
我们知道强化学习可以优化环境中智能体的回报,
**马尔可夫决策过程**
(
**MDP**
)是一种环境表示和数学框架,用于使用状态对决策进行建模 ,动作和奖励。 在本章中,我们了解到 Q 学习是一种无需任何过渡模型即可为任何 MDP 找到最佳动作选择策略的方法。 另一方面,如果给出了转换模型,则值迭代会为任何 MDP 找到最佳的动作选择策略。
我们还学习了另一个重要的话题,称为
Deep-
Q 网络,这是一种经过改进的 Q 学习方法,它采用深度神经网络作为函数逼近器来在不同环境中进行泛化,这与特定于环境的 Q 表不同。 此外,我们还学会了在 OpenAI 体育馆环境中实施 Q 学习,深度 Q 网络和 SARSA 算法。 先前显示的大多数实现可能在具有更好的超参数值和更多训练集的情况下效果更好。
我们还学习了另一个重要的话题,称为
深度
Q 网络,这是一种经过改进的 Q 学习方法,它采用深度神经网络作为函数逼近器来在不同环境中进行泛化,这与特定于环境的 Q 表不同。 此外,我们还学会了在 OpenAI 体育馆环境中实施 Q 学习,深度 Q 网络和 SARSA 算法。 先前显示的大多数实现可能在具有更好的超参数值和更多训练集的情况下效果更好。
在下一章中,我们将详细介绍著名的异步优势参与者批评算法。
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录