Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
coolalex776
apachecn-dl-zh
提交
d13216fd
A
apachecn-dl-zh
项目概览
coolalex776
/
apachecn-dl-zh
与 Fork 源项目一致
Fork自
OpenDocCN / apachecn-dl-zh
通知
1
Star
1
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,发现更多精彩内容 >>
提交
d13216fd
编写于
12月 25, 2020
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2020-12-25 16:48:37
上级
54188e6c
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
34 addition
and
27 deletion
+34
-27
new/handson-rl-py/03.md
new/handson-rl-py/03.md
+19
-16
new/handson-rl-py/04.md
new/handson-rl-py/04.md
+8
-4
new/handson-rl-py/05.md
new/handson-rl-py/05.md
+5
-5
new/handson-rl-py/06.md
new/handson-rl-py/06.md
+2
-2
未找到文件。
new/handson-rl-py/03.md
浏览文件 @
d13216fd
...
...
@@ -61,11 +61,11 @@ MDP 是马尔可夫链的延伸。 它提供了用于建模决策情况的数学
MDP 由五个重要元素表示:
*
代理实际上可以处于的一组状态
!
[](
img/00020.jpeg
)
。
*
代理可以执行的一组动作
!
[](
img/00021.jpeg
)
,用于从一种状态转移到另一种状态。
*
转移概率(
!
[](
img/00022.jpeg
)
),是通过执行某些操作!
[](
img/00025.jpeg
)
从一种状态!
[](
img/00023.jpeg
)
转移到另一种!
[](
img/00024.jpeg
)
状态
的概率。
*
奖励概率(
!
[](
img/00026.jpeg
)
),是代理商通过执行某些动作!
[](
img/00029.jpeg
)
从一种状态!
[](
img/00027.jpeg
)
转移到另一种状态!
[](
img/00028.jpeg
)
所获得的奖励的概率。
*
折扣因子(
!
[](
img/00030.jpeg
)
),用于控制立即和将来奖励的重要性。 我们将在接下来的部分中详细讨论。
*
代理实际上可以处于的一组状态
`(S)`
。
*
代理可以执行的一组动作
`(A)`
,用于从一种状态转移到另一种状态。
*
转移概率(
`P[ss']^a`
),是通过执行某些操作
`a`
从一种状态
`s`
转移到另一种状态
`s'`
的概率。
*
奖励概率(
`R[ss']^a`
),是代理商通过执行某些动作
`a`
从一种状态
`s`
转移到另一种状态
`s'`
所获得的奖励的概率。
*
折扣因子(
`γ`
),用于控制立即和将来奖励的重要性。 我们将在接下来的部分中详细讨论。
# 奖励与退货
...
...
@@ -75,9 +75,8 @@ MDP 由五个重要元素表示:
![](
img/00031.jpeg
)
![](
img/00032.jpeg
)
是代理在执行步骤
![](
img/00034.jpeg
)
从一种状态转换到另一种状态时在时间步骤!
[](
img/00033.jpeg
)
时收到的奖励。 !
[](
img/00035.jpeg
)
是代理在执行从一个状态到另一状态的动作时,在
步骤!
[](
img/00036.jpeg
)
时收到的奖励。 类似地,!
[](
img/00037.jpeg
)
是代理在执行从一个状态到另一状态的动作时,在最后时间步骤!
[](
img/00038.jpeg
)
所收到的奖励。
`r[t + 1]`
是代理在执行操作
`a[0]`
从一种状态转换到另一种状态时在时间步骤
`t[0]`
时收到的奖励。
`r[t + 2]`
是代理在执行从一个状态到另一状态的动作时,在
步骤
`t[1]`
时收到的奖励。 类似地,
`r[T]`
是代理在执行从一个状态到另一状态的动作时,在最后时间步骤
`T`
所收到的奖励。
# 间歇性和连续性任务
...
...
@@ -93,7 +92,7 @@ MDP 由五个重要元素表示:
由于连续任务没有任何最终状态,因此我们可以将连续任务的收益定义为
`R[t] = r[t + 1] + r[t + 2] + ...`
,总和为无穷大。 但是,如果永不止息,我们如何才能最大化回报呢?
这就是为什么我们引入折扣因子的概念。 我们可以使用折扣因子
!
[](
img/00039.jpeg
)
重新定义收益,如下所示:
这就是为什么我们引入折扣因子的概念。 我们可以使用折扣因子
`γ`
重新定义收益,如下所示:
![](
img/00040.jpeg
)
---(1)
...
...
@@ -109,7 +108,7 @@ MDP 由五个重要元素表示:
我们已经在第 1 章,“强化学习简介”中了解了策略函数,该功能将状态映射到操作。 用π表示。
策略函数可以表示为
!
[](
img/00042.jpeg
)
,指示从状态到动作的映射。 因此,基本上,策略函数会说明在每种状态下要执行的操作。 我们的最终目标在于找到最佳策略,该策略指定在每个状态下执行的正确操作,从而最大化回报。
策略函数可以表示为
`π(s): s -> a`
,指示从状态到动作的映射。 因此,基本上,策略函数会说明在每种状态下要执行的操作。 我们的最终目标在于找到最佳策略,该策略指定在每个状态下执行的正确操作,从而最大化回报。
# 状态值功能
...
...
@@ -161,13 +160,13 @@ MDP 由五个重要元素表示:
#贝尔曼方程和最优性
以美国数学家理查德·贝尔曼(Richard Bellman)命名的贝尔曼方程式可帮助我们求解 MDP。 它在 RL 中无处不在。 当我们说解决 MDP 时,实际上意味着找到最佳的策略和价值功能。 根据不同的策略,可以有许多不同的价值函数。 与所有其他值函数相比,最优值函数
!
[](
img/00047.jpeg
)
是产生最大值的函数:
以美国数学家理查德·贝尔曼(Richard Bellman)命名的贝尔曼方程式可帮助我们求解 MDP。 它在 RL 中无处不在。 当我们说解决 MDP 时,实际上意味着找到最佳的策略和价值功能。 根据不同的策略,可以有许多不同的价值函数。 与所有其他值函数相比,最优值函数
`V*(s)`
是产生最大值的函数:
![](
img/00048.jpeg
)
类似地,最优策略是导致最优值函数的策略。
由于最优值函数
!
[](
img/00049.jpeg
)
是比所有其他值函数(即最大收益)更高的值的函数,因此它将是
`Q`
函数的最大值。 因此,可以通过将
`Q`
函数的最大值取如下来轻松地计算最佳值函数:
由于最优值函数
`V*(s)`
是比所有其他值函数(即最大收益)更高的值的函数,因此它将是
`Q`
函数的最大值。 因此,可以通过将
`Q`
函数的最大值取如下来轻松地计算最佳值函数:
![](
img/00050.jpeg
)
---(3)
...
...
@@ -193,11 +192,11 @@ MDP 由五个重要元素表示:
如果您对数学不感兴趣,可以跳过本节。 但是,数学将非常有趣。
首先,我们将
!
[](
img/00054.jpeg
)
定义为在执行动作
`a`
时从状态!
[](
img/00055.jpeg
)
转换为!
[](
img/00056.jpeg
)
的转移概率:
首先,我们将
`P[ss']^a`
定义为在执行动作
`a`
时从状态
`s`
转换为
`s'`
的转移概率:
![](
img/00057.jpeg
)
我们将
!
[](
img/00058.jpeg
)
定义为在执行动作
`a`
时从状态!
[](
img/00059.jpeg
)
移至!
[](
img/00060.jpeg
)
所获得的奖励概率:
我们将
`R[ss']^a`
定义为在执行动作
`a`
时从状态
`s`
移至
`s'`
所获得的奖励概率:
![](
img/00061.jpeg
)
...
...
@@ -219,7 +218,7 @@ MDP 由五个重要元素表示:
![](
img/00066.jpeg
)
在 RHS 中,我们将等式
`(5)`
中的
!
[](
img/00067.jpeg
)
替换为:
在 RHS 中,我们将等式
`(5)`
中的
`R[ss']^a`
替换为:
![](
img/00068.jpeg
)
...
...
@@ -235,7 +234,11 @@ MDP 由五个重要元素表示:
![](
img/00071.jpeg
)
代替!
[](
img/00072.jpeg
)
,我们可以用等式
`(6)`
代替!
[](
img/00073.jpeg
)
,我们的最终值函数如下所示:
代替
![](
img/00072.jpeg
)
我们可以用等式
`(6)`
代替
`V[s']^π`
,我们的最终值函数如下所示:
![](
img/00074.jpeg
)
...
...
new/handson-rl-py/04.md
浏览文件 @
d13216fd
...
...
@@ -43,7 +43,7 @@
估计π的步骤非常简单:
1.
首先,我们在正方形内生成一些随机点。
2.
然后,我们可以使用公式
!
[](
img/00096.jpeg
)
计算落入圆内的点数。
2.
然后,我们可以使用公式
`x^2 + y^2 <= size`
计算落入圆内的点数。
3.
然后,我们通过将圆内的点数除以平方内的点数的四倍来计算π的值。
4.
如果我们增加样本数(随机点数),则可以更好地近似
...
...
@@ -577,7 +577,7 @@ def epsilon_greedy_policy(state, epsilon):
非策略性蒙特卡洛是另一种有趣的蒙特卡洛控制方法。 在这种方法中,我们有两种策略:一种是行为策略,另一种是目标策略。 在非策略方法中,代理遵循一项策略,但与此同时,它会尝试学习和改进另一种策略。 代理遵循的策略称为行为策略,代理尝试评估和改进的策略称为目标策略。 行为与目标策略完全无关。 行为策略探索所有可能的状态和动作,这就是为什么将行为策略称为软策略,而将目标策略称为贪心策略(它选择具有最大值的策略)的原因。
我们的目标是为目标策略π估计
`Q`
函数,但我们的代理使用完全不同的策略(称为行为策略
!
[](
img/00106.jpeg
)
)进行操作。 我们现在能做什么? 我们可以通过使用!
[](
img/00108.jpeg
)
中发生的常见事件来估计!
[](
img/00107.jpeg
)
的值。 我们如何估算这两个策略之间的共同点? 我们使用一种称为重要性抽样的新技术。 这是一种在给定来自另一个分布的样本的情况下从一个分布估计值的技术。
我们的目标是为目标策略π估计
`Q`
函数,但我们的代理使用完全不同的策略(称为行为策略
`μ`
)进行操作。 我们现在能做什么? 我们可以通过使用
`μ`
中发生的常见事件来估计
`π`
的值。 我们如何估算这两个策略之间的共同点? 我们使用一种称为重要性抽样的新技术。 这是一种在给定来自另一个分布的样本的情况下从一个分布估计值的技术。
重要抽样有两种类型:
...
...
@@ -596,8 +596,12 @@ def epsilon_greedy_policy(state, epsilon):
5.
现在,对于情节中的每个州,我们执行以下操作:
1.
我们将计算回报
`G`
。 我们知道回报是折扣奖励的总和:
`G = 折扣因子 * G + 奖励`
。
2.
然后我们将
`C(s, a)`
更新为
`C(s, a) + C(s, a) + w`
。
3.
我们更新
`Q(s, a)`
:!
[](
img/00109.jpeg
)
。
4.
我们更新
`w`
:!
[](
img/00110.jpeg
)
的值。
3.
我们更新
`Q(s, a)`
:
!
[](
img/00109.jpeg
)
4.
我们更新
`w`
的值:
!
[](
img/00110.jpeg
)
# 概要
...
...
new/handson-rl-py/05.md
浏览文件 @
d13216fd
...
...
@@ -26,9 +26,9 @@ TD 学习算法由 Sutton 于 1988 年提出。该算法兼顾了蒙特卡洛方
这个方程实际上是什么意思?
如果您直观地想到此方程,则实际上是实际奖励(
!
[](
img/00112.jpeg
)
)和预期奖励(!
[](
img/00113.jpeg
)
)之间的差乘以学习率α
。 学习率代表什么? 学习速率(也称为步长)对于收敛很有用。
如果您直观地想到此方程,则实际上是实际奖励(
`r + γV(s')`
)和预期奖励(
`V(s)`
)之间的差乘以学习率
`α`
。 学习率代表什么? 学习速率(也称为步长)对于收敛很有用。
你注意到了吗? 由于我们将实际值和预测值之差作为
!
[](
img/00114.jpeg
)
,因此实际上是一个错误。 我们可以称其为 TD 错误。 在多次迭代中,我们将尝试最小化此错误。
你注意到了吗? 由于我们将实际值和预测值之差作为
`r + γV(s') - V(s)`
,因此实际上是一个错误。 我们可以称其为 TD 错误。 在多次迭代中,我们将尝试最小化此错误。
让我们通过前面几章中的冰湖示例来了解 TD 预测。 接下来显示的是冰冻的湖泊环境。 首先,对于所有状态,我们将值函数初始化为
`0`
,就像在
`V(S)`
中将其初始化为
`0`
一样,如以下状态值图所示 :
...
...
@@ -105,7 +105,7 @@ V(s) = -0.0315
前面的公式与 TD 预测更新规则相似,只是有一点点差异。 我们将逐步详细介绍这一点。 Q 学习涉及的步骤如下:
1.
首先,我们将
`Q`
函数初始化为一些任意值
2.
我们使用
`ε`
贪婪策略(
!
[](
img/00122.jpeg
)
)从某个州采取了一项行动,并将其移至新的州
2.
我们使用
`ε`
贪婪策略(
`ε > 0`
)从某个州采取了一项行动,并将其移至新的州
3.
我们通过遵循更新规则来更新先前状态的
`Q`
值:
![](
img/00123.jpeg
)
...
...
@@ -356,8 +356,8 @@ env.close()
在前面的等式中,您可能会注意到,没有最大的
`Q(s', a')`
,就像在 Q 学习中一样。 这里只是
`Q(s', a')`
。 我们可以通过执行一些步骤来详细了解这一点。 SARSA 涉及的步骤如下:
1.
首先,我们将
`Q`
值初始化为一些任意值
2.
我们通过
`ε`
贪婪策略(
!
[](
img/00134.jpeg
)
)选择一个动作,然后从一种状态转移到另一种状态
3.
我们遵循更新规则
!
[](
img/00135.jpeg
)
来更新
`Q`
值的先前状态,其中
`a'`
是由
`ε`
贪婪策略(!
[](
img/00136.jpeg
)
)选择的操作
2.
我们通过
`ε`
贪婪策略(
`ε > 0`
)选择一个动作,然后从一种状态转移到另一种状态
3.
我们遵循更新规则
`Q(s, a) = Q(s, a) + α(r + γQ(s', a') - Q(s, a))`
来更新
`Q`
值的先前状态,其中
`a'`
是由
`ε`
贪婪策略(
`ε > 0`
)选择的操作
现在,我们将逐步了解算法。 让我们考虑相同的冰冻湖的例子。 假设我们处于
`(4, 2)`
状态。 我们根据
`ε`
贪婪策略决定采取的措施。 假设我们使用概率为 1
`epsilon`
并选择最佳操作,即
**向右**
:
...
...
new/handson-rl-py/06.md
浏览文件 @
d13216fd
...
...
@@ -144,7 +144,7 @@ Softmax 探索(也称为玻尔兹曼探索)是用于找到最佳老虎机的
![](
img/00147.jpeg
)
![](
img/00148.jpeg
)
称为温度因子,它指定我们可以探索多少个随机臂。 当
!
[](
img/00149.jpeg
)
高时,将平等地探索所有手臂,但是当!
[](
img/00150.jpeg
)
低时,将选择高回报手臂。 请看以下步骤:
![](
img/00148.jpeg
)
称为温度因子,它指定我们可以探索多少个随机臂。 当
`τ`
高时,将平等地探索所有手臂,但是当
`τ`
低时,将选择高回报手臂。 请看以下步骤:
1.
首先,初始化变量:
...
...
@@ -231,7 +231,7 @@ UCB 背后的想法非常简单:
但是,我们如何计算 UCB?
我们可以使用公式
!
[](
img/00153.jpeg
)
计算 UCB,其中
`N(a)`
是拉动手臂的次数,
`t`
是回合的总数。
我们可以使用公式
`√(2log(t) / N(a))`
计算 UCB,其中
`N(a)`
是拉动手臂的次数,
`t`
是回合的总数。
因此,在 UCB 中,我们选择具有以下公式的手臂:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录