Skip to content

Commit

Permalink
docs: 8.5 预期与样本更新
Browse files Browse the repository at this point in the history
  • Loading branch information
qiwihui committed Apr 27, 2019
1 parent 6641e54 commit 0df5866
Show file tree
Hide file tree
Showing 3 changed files with 90 additions and 2 deletions.
Binary file added source/partI/chapter8/images/figure-8.6.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added source/partI/chapter8/images/figure-8.7.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -261,7 +261,8 @@ Dyna个体的整体架构,其中Dyna-Q算法就是一个例子,如图8.1所
即使采用 :math:`\varepsilon` -贪婪策略,个体也不太可能采取如此多的探索性行动来发现捷径。

.. figure:: images/figure-8.5.png
:width: 400px
:width: 350px
:align: right

**图8.5:** Dyna个体在捷径任务上的平均性能。左边的环境用于前3000个步骤,右边的环境用于剩下的步骤。

Expand All @@ -275,7 +276,7 @@ Dyna个体的整体架构,其中Dyna-Q算法就是一个例子,如图8.1所
经过的时间越长,这一对的动态变化的可能性就越大(我们可以推测),并且它的模型是不正确的。
为了鼓励测试长期未尝试的行为,对涉及这些行为的模拟经验给出了特殊的“奖金奖励”。
特别是,如果转换的建模奖励是 :math:`r`,并且没有在 :math:`\tau` 时间步骤中尝试转换,
那么计划更新就好像转换产生 :math:`r+\kappa\sqrt{\tau}` 的奖励,对于一些小 :math:`\kappa`。
那么规划更新就好像转换产生 :math:`r+\kappa\sqrt{\tau}` 的奖励,对于一些小 :math:`\kappa`。
这样可以鼓励个体继续测试所有可访问的状态转换,甚至可以找到很长的动作序列,以便进行测试 [1]_。
当然,所有这些测试都有其成本,但在很多情况下,就像在捷径迷宫中一样,这种计算的好奇心是非常值得额外的探索。

Expand Down Expand Up @@ -406,6 +407,93 @@ Peng和Williams(1993)以及Barto,Bradtke和Singh(1995)已经探索了
8.5 预期与样本更新
---------------------

前面章节中的示例给出了组合学习和规划方法的可能性的一些概念。
在本章的其余部分,我们分析所涉及的一些组件思想,从预期和样本更新的相对优势开始。

.. figure:: images/figure-8.6.png
:width: 350px
:align: right

**图8.6:** 本书中考虑的所有一步更新的备份图。

本书的大部分内容都是关于不同类型的价值函数更新,我们已经考虑了很多种类。
目前关注一步更新,它们主要沿三个二进制维度变化。前两个维度是它们是更新状态价值还是动作价值,
以及它们是否估计最优策略或任意给定策略的价值。
这两个维度产生四类更新,用于近似四个值函数 :math:`q_*`,:math:`v_*`,:math:`q_\pi` 和 :math:`v_\pi`。
另一个二进制维度是,更新是考虑所有可能发生的事件的 *预期* 更新,还是考虑可能发生的事件的单个样本的 *样本* 更新。
这三个二进制维度产生八种情况,其中七种对应于特定算法,如右图所示。(第八种情况似乎与任何有用的更新都不对应。)
这些一步更新中的任何一种都可用于规划方法。前面讨论的Dyna-Q个体使用 :math:`q_*` 样本更新,
但他们也可以使用 :math:`q_*` 预期更新,或预期或样本 :math:`q_\pi` 更新。
Dyna-AC系统使用 :math:`v_\pi` 样本更新和学习策略结构(如第13章所述)。
对于随机问题,优先扫描总是使用预期更新之一完成。

当我们在第6章介绍一步样本更新时,我们将它们作为预期更新的替代品。
在没有分布模型的情况下,不可能进行预期的更新,但可以使用来自环境或样本模型的样本转换来完成样本更新。
从这个角度来看,隐含的是,如果可能的话,预期更新比样本更新更可取。
但是他们是这样的吗?预期的更新肯定会产生更好的估计,因为它们不受采样误差的影响,
但它们也需要更多的计算,而计算通常是规划中的限制资源。
为了正确评估预期和样本更新的相对优点,我们必须控制其不同的计算要求。

具体来说,考虑近似 :math:`q_*` 的预期和样本更新,离散状态和动作的特殊情况,近似值函数 :math`Q` 的表查找表示,
以及估计动态形式的模型 :math:`\hat{p}\left(s^{\prime}, r | s, a\right)`。
状态-动作对 :math:`s, a` 的预期更新是:

.. math::
Q(s, a) \leftarrow \sum_{s^{\prime}, r} \hat{p}\left(s^{\prime}, r | s, a\right)\left[r+\gamma \max _{a^{\prime}} Q\left(s^{\prime}, a^{\prime}\right)\right]
\tag{8.1}
对于 :math:`s, a` 的相应样本更新,给定样本下一状态和奖励 :math:`S_0` 和 :math:`R` (来自模型),
是类似Q-learning的更新:

.. math::
Q(s, a) \leftarrow Q(s, a)+\alpha\left[R+\gamma \max _{a^{\prime}} Q\left(S^{\prime}, a^{\prime}\right)-Q(s, a)\right]
\tag{8.2}
其中 :math:`\alpha` 通常是正步长参数。

这些预期和样本更新之间的差异在环境是随机的程度上是显着的,
具体地,在给定状态和动作的情况下,可能以各种概率发生许多可能的下一状态。
如果只有一个下一个状态是可能的,那么上面给出的预期和样本更新是相同的(取 :math:`\alpha=1`)。
如果有许多可能的下一个状态,则可能存在重大差异。支持(In favor of)预期更新的是它是精确计算,
导致新的 :math:`Q(s,a)` 的正确性仅受后继状态下 :math:`Q(s_{\prime},a_0)` 的正确性的限制。
样本更新还受到采样误差的影响。
另一方面,样本更新在计算上更便宜,因为它只考虑一个下一个状态,而不是所有可能的下一个状态。
实际上,更新操作所需的计算通常由评估 :math:`Q` 的状态-动作对的数量决定。
对于特定的起始对,:math:`s, a`,令 :math:`b` 是 *分支因子(branching factor)*
(即 :math:`\hat{p}(s^{\prime} | s, a)>0` 的可能的下一状态 :math:`s_{\prime}` 的数量)。
然后,状态-动作对的预期更新需要大约样本更新计算的 :math:`b` 倍。

如果有足够的时间来完成预期更新,那么由于没有采样误差,所得到的估计通常优于 :math:`b` 样本更新。
但是,如果没有足够的时间来完成预期更新,那么样本更新总是更可取的,
因为它们至少会使用少于 :math:`b` 更新的价值估算进行一些改进。
在许多状态-动作对的大问题中,我们经常处于后一种情况。
有这么多的状态-动作对,所有这些状态-动作对的预期更新将花费很长时间。
在此之前,我们可能会在许多状态-动作对中进行一些样本更新,而不是在几对中预期更新。
给定计算单元,投入到一些预期的更新是否更好,或 :math:`b` 倍的样本更新更好?

图8.7显示了分析结果,提供了这个问题的答案。
它将估计误差显示为各种分支因子 :math:`b` 的预期和样本更新的计算时间的函数。
考虑的情况是所有 :math:`b` 后继状态同样可能并且初始估计中的误差为1。
下一个状态的值假定是正确的,因此预期更新在完成时将误差减少到零。
在这种情况下,样本更新根据 :math:`\sqrt{\frac{b-1}{b t}}` 减少误差,
其中 :math:`t` 是已经执行的样本更新的数量(假设样本平均值,即 :math:`\alpha=\frac{1}{t}`)。
关键的观察结果是,对于中等大小的 :math:`b`,误差会随着 :math:`b` 更新的一小部分而急剧下降。
对于这些情况,许多状态-动作对可以使其值显着改善,在预期更新的效果的几个百分点内,同时单个状态-动作对可以经历预期更新。

.. figure:: images/figure-8.7.png

**图8.7:** 预期更新和样本更新的效率比较。

图8.7中显示的样本更新的优点可能是低估了实际效果。在实际问题中,后继状态的值将是自身更新的估计值。
通过使估算更快更准确,样本更新将具有第二个优势,即从后继状态备份的值将更准确。
这些结果表明,样本更新可能优于大型随机分支因子问题的预期更新,并且要解决的状态太多。

*练习8.6* 上面的分析假设所有 :math:`b` 可能的下一个状态都可能同样发生。
相反,假设分布是高度偏斜的,那么 :math:`b` 状态中的一些比大多数状态更可能发生。
这是否会加强或削弱样本更新超过预期更新的情况?支持你的答案。


8.6 轨迹采样
-----------------
Expand Down

0 comments on commit 0df5866

Please sign in to comment.