From b89336ee4c50d40c993856c4765568d5fe7e247f Mon Sep 17 00:00:00 2001 From: qiwang067 Date: Tue, 27 Oct 2020 15:33:56 +0800 Subject: [PATCH] fix ch2 typos --- docs/chapter2/chapter2.md | 81 ++++++++++++++++++++++++--------------- 1 file changed, 50 insertions(+), 31 deletions(-) diff --git a/docs/chapter2/chapter2.md b/docs/chapter2/chapter2.md index aabb53e..0f0c230 100644 --- a/docs/chapter2/chapter2.md +++ b/docs/chapter2/chapter2.md @@ -95,7 +95,7 @@ $$ 这里有一个叠加系数,越往后得到的奖励,折扣得越多。这说明我们其实更希望得到现有的奖励,未来的奖励就要把它打折扣。 -* 当我们有了这个 return 过后,就可以正式定义一个状态的价值了,就是 `state value function`。然后对于这个 MRP,它里面定义成是关于这个 return 的期望,如下式所示: +* 当我们有了 return 过后,就可以定义一个状态的价值了,就是 `state value function`。对于 MRP,state value function 被定义成是 return 的期望,如下式所示: $$ \begin{aligned} V_{t}(s) &=\mathbb{E}\left[G_{t} \mid s_{t}=s\right] \\ @@ -103,7 +103,7 @@ $$ \end{aligned} $$ -$G_t$ 是我们之前定义的 `discounted return`,我们这里取了一个期望,期望就是说从这个状态开始,你有可能获得多大的价值。所以这个期望也可以看成是一个对未来可能获得奖励的它的当前价值的一个表现。就是当你进入某一个状态过后,你现在就有多大的价值。 +$G_t$ 是之前定义的 `discounted return`,我们这里取了一个期望,期望就是说从这个状态开始,你有可能获得多大的价值。所以这个期望也可以看成是对未来可能获得奖励的它的当前价值的一个表现,就是当你进入某一个状态过后,你现在就有多大的价值。 ### Why Discount Factor @@ -232,13 +232,11 @@ $$ ![](img/2.15.png) -接下来我们来求解这个价值函数。**我们可以通过迭代的方法来解这种状态非常多的 MRP。** +接下来我们来求解这个价值函数。**我们可以通过迭代的方法来解这种状态非常多的 MRP,**比如说: -这里迭代的方法就有几种, - -* 我们可以通过动态规划的方法, -* 也可以通过蒙特卡罗的办法,就通过采样的办法去计算它, -* 也可以通过 Temporal-Difference Learning 的办法。这个 `Temporal-Difference Learning` 叫 `TD Leanring`,它是动态规划和蒙特卡罗的一个结合。 +* 动态规划的方法, +* 蒙特卡罗的办法(通过采样的办法去计算它), +* Temporal-Difference Learning 的办法。 `Temporal-Difference Learning` 叫 `TD Leanring`,它是动态规划和蒙特卡罗的一个结合。 ![](img/2.16.png) @@ -246,7 +244,7 @@ $$ 比如说我们要算 $s_4$ 状态的一个价值。我们就可以从 $s_4$ 状态开始,随机产生很多轨迹,就产生很多小船,然后扔到这个转移矩阵里面去,然后它就会随波逐流,产生轨迹。每个轨迹,我们可以算到它的这个 return。每个轨迹都会得到一个 return,让我们得到大量的 return 。比如说一百个、一千个的 return ,然后直接取一个平均,那么就可以等价于现在 $s_4$ 这个价值,因为 $s_4$ 的价值 $V(s_4)$ 定义了你未来可能得到多少的奖励。这就是蒙特卡罗采样的方法。 -![](img/2.17.png)**我们也可以用这个动态规划的办法**,一直去迭代它的 Bellman Equation,让它最后收敛,我们就可以得到它的一个状态。所以在这里算法二就是一个迭代的算法,通过 bootstrapping(拔靴自助) 的办法,然后去不停地迭代这个 Bellman Equation。当这个最后更新的状态跟你上一个状态变化并不大的时候,更新就可以停止,我们就可以输出最新的 $V'(s)$ 作为它当前的状态。所以这里就是把 Bellman Equation 变成一个 Bellman Update,这样就可以得到它的一个价值。 +![](img/2.17.png)**我们也可以用这个动态规划的办法**,一直去迭代它的 Bellman equation,让它最后收敛,我们就可以得到它的一个状态。所以在这里算法二就是一个迭代的算法,通过 bootstrapping(拔靴自助) 的办法,然后去不停地迭代这个 Bellman Equation。当这个最后更新的状态跟你上一个状态变化并不大的时候,更新就可以停止,我们就可以输出最新的 $V'(s)$ 作为它当前的状态。所以这里就是把 Bellman Equation 变成一个 Bellman Update,这样就可以得到它的一个价值。 >动态规划的方法基于后继状态值的估计来更新状态值的估计(算法二中的第 3 行用 $V'$ 来更新 $V$ )。也就是说,它们根据其他估算值来更新估算值。我们称这种基本思想为 bootstrapping。 @@ -326,7 +324,7 @@ $$ ![](img/2.23.png) -我们可以把状态-价值函数和 Q 函数拆解成两个部分:即时奖励(immediate reward) 和后续状态的折扣价值(discounted value of successor state)。 +**我们可以把状态-价值函数和 Q 函数拆解成两个部分:即时奖励(immediate reward) 和后续状态的折扣价值(discounted value of successor state)。** 通过对状态-价值函数进行一个分解,我们就可以得到一个类似于之前 MRP 的 Bellman Equation,这里叫 `Bellman Expectation Equation`,如式 (6) 所示: $$ @@ -336,11 +334,13 @@ $$ $$ q^{\pi}(s, a)=E_{\pi}\left[R_{t+1}+\gamma q^{\pi}\left(s_{t+1}, A_{t+1}\right) \mid s_{t}=s, A_{t}=a\right] \tag{7} $$ -**Bellman Expectation Equation 定义了你当前状态跟未来状态之间的一个关联。** +**Bellman expectation equation 定义了你当前状态跟未来状态之间的一个关联。** ![](img/2.24.png) -那我们进一步进行一个简单的分解。我们先给出等式 (8): +**那我们进一步进行一个简单的分解。** + +我们先给出等式 (8): $$ v^{\pi}(s)=\sum_{a \in A} \pi(a \mid s) q^{\pi}(s, a) \tag{8} $$ @@ -350,18 +350,20 @@ q^{\pi}(s, a)=R_{s}^{a}+\gamma \sum_{s^{\prime} \in S} P\left(s^{\prime} \mid s, $$ **等式 (8) 和等式 (9) 代表了价值函数跟 Q 函数之间的一个关联。** -我们把等式 (8) 插入到等式 (9),就可以得到等式 (11): -$$ -q^{\pi}(s, a)=R(s, a)+\gamma \sum_{s^{\prime} \in S} P\left(s^{\prime} \mid s, a\right) \sum_{a^{\prime} \in A} \pi\left(a^{\prime} \mid s^{\prime}\right) q^{\pi}\left(s^{\prime}, a^{\prime}\right) \tag{11} -$$ -**它象征了你当前时刻的 Q 函数跟未来时刻的 Q 函数之间的一个关联。** - 也可以把等式 (9) 插入等式 (8) 中,得到等式 (10): $$ v^{\pi}(s)=\sum_{a \in A} \pi(a \mid s)\left(R(s, a)+\gamma \sum_{s^{\prime} \in S} P\left(s^{\prime} \mid s, a\right) v^{\pi}\left(s^{\prime}\right)\right) \tag{10} $$ **等式 (10) 代表了当前状态的价值跟未来状态价值之间的一个关联。** +我们把等式 (8) 插入到等式 (9),就可以得到等式 (11): +$$ +q^{\pi}(s, a)=R(s, a)+\gamma \sum_{s^{\prime} \in S} P\left(s^{\prime} \mid s, a\right) \sum_{a^{\prime} \in A} \pi\left(a^{\prime} \mid s^{\prime}\right) q^{\pi}\left(s^{\prime}, a^{\prime}\right) \tag{11} +$$ +**等式 (11) 代表了当前时刻的 Q 函数跟未来时刻的 Q 函数之间的一个关联。** + +**等式 (10) 和等式 (11) 是 Bellman expectation equation 的另一种形式。** + ### Backup Diagram ![](img/2.25.png) @@ -421,11 +423,11 @@ q^{\pi}(s, a)=R(s, a)+\gamma \sum_{s^{\prime} \in S} P\left(s^{\prime} \mid s, a $$ **所以这个等式就决定了未来 Q 函数跟当前 Q 函数之间的这个关联。** -### Policy Evaluation +### Policy Evaluation(Prediction) ![](img/2.27.png) -当我们知道一个 MDP 以及要采取的策略 $\pi$ ,那我们计算价值函数的过程,就是 `policy evaluation`。就像我们在评估这个策略,我们会得到多大的奖励。**Policy evaluation 在有些地方也被叫做 `prediction`,也就是预测你当前采取的这个策略最终会产生多少的价值。** +当我们知道一个 MDP 以及要采取的策略 $\pi$ ,计算价值函数的过程就是 `policy evaluation`。就像我们在评估这个策略,我们会得到多大的奖励。**Policy evaluation 在有些地方也被叫做 `prediction`,也就是预测你当前采取的这个策略最终会产生多少的价值。** ![](img/2.28.png) @@ -433,22 +435,33 @@ MDP,你其实可以把它想象成一个摆渡的人在这个船上面,她 ![](img/2.29.png) -我们再看下 policy evaluation 的例子,怎么在这个决策过程里面计算它每一个状态的价值。 +我们再看下 policy evaluation 的例子,怎么在决策过程里面计算它每一个状态的价值。 * 假设环境里面有两种动作:往左走和往右走。 +* 现在的奖励函数应该是关于动作以及状态两个变量的一个函数。但我们这里规定,不管你采取什么动作,只要到达状态 $s_1$,就有 5 的奖励。只要你到达状态 $s_7$ 了,就有 10 的奖励,中间没有任何奖励。 +* 假设我们现在采取的一个策略,这个策略是说不管在任何状态,我们采取的策略都是往左走。假设价值折扣因子是零,那么对于 deterministic policy,最后估算出的价值函数是一致的,即 -* 现在的奖励函数应该是关于动作以及状态两个变量的一个函数。但我们这里就说,不管你采取什么动作,只要到达状态 $s_1$,就有 5 的奖励。只要你到达状态 $s_7$ 了,就有 10 的奖励,中间没有任何奖励。 -* 假设我们现在采取的一个策略,这个策略是说不管在任何状态,我们采取的策略都是往左走,这里假设价值折扣因子是零,那么对于 deterministic policy,最后估算出的价值函数是一致的。怎么得到这个结果,我们可以直接在去 run 这个 iterative equation,就把这个 Bellman Expectation Equation 拿到这个里面来,然后不停地迭代,最后它会收敛。收敛过后,它的值就是它每一个状态的价值。 +$$ +V^{\pi}=[5,0,0,0,0,0,10] +$$ + +Q: 怎么得到这个结果? + +A: 我们可以直接在去 run 下面这个 iterative equation: +$$ +v_{k}^{\pi}(s)=r(s, \pi(s))+\gamma \sum_{s^{\prime} \in S} P\left(s^{\prime} \mid s, \pi(s)\right) v_{k-1}^{\pi}\left(s^{\prime}\right) +$$ +就把 Bellman expectation equation 拿到这边来,然后不停地迭代,最后它会收敛。收敛过后,它的值就是它每一个状态的价值。 ![](img/2.30.png) -再来看另外一个情况,就是如果折扣因子是 0.5,我们可以通过这个等式进行迭代: +再来看一个例子(practice 1),如果折扣因子是 0.5,我们可以通过下面这个等式进行迭代: $$ v_{t}^{\pi}(s)=\sum_{a} P(\pi(s)=a)\left(r(s, a)+\gamma \sum_{s^{\prime} \in S} P\left(s^{\prime} \mid s, a\right) v_{t-1}^{\pi}\left(s^{\prime}\right)\right) $$ -然后就会得到它的状态。 +然后就会得到它的状态价值。 -另外一个练习的例子,就是说我们现在采取的 policy 在每个状态,我们有 0.5 的概率往左走,有 0.5 的概率往右走,那么放到这个状态里面去如何计算。其实也是把这个 Bellman Expectation Equation 拿出来,然后进行迭代就可以算出来了,就当我们开始的时候,我们可以初始化。初始化这个不同的 $v(s')$ 都会有一个值,那么放到这个里面去迭代,最后它的 $v$ ,然后就会算出来。 +另外一个例子(practice 2),就是说我们现在采取的 policy 在每个状态下,有 0.5 的概率往左走,有 0.5 的概率往右走,那么放到这个状态里面去如何计算。其实也是把这个 Bellman expectation equation 拿出来,然后进行迭代就可以算出来了。一开始的时候,我们可以初始化,不同的 $v(s')$ 都会有一个值,放到 Bellman expectation equation 里面去迭代,然后就可以算出它的状态价值。 ### Prediction and Control @@ -524,9 +537,12 @@ $$ ![](img/2.35.png) -比如现在这个环境是一个 small gridworld 的例子。这个 agent 的目的是从某一个状态开始,然后到达终点状态。它的终止状态就是左上角跟右上角,这里总共有 14 个状态,因为我们把每个位置就是用一个状态来表示。然后这个 agent 它采取的动作,我们说它的这个 policy function 就直接先给定了,它在每一个状态都是随机游走,它们在每一个状态就是上下左右行走。它在边缘状态的时候,比如说在第四号状态的时候,它往左走的话,它是依然存在第四号状态,我们加了这个限制。 +* 比如现在的环境是一个 small gridworld。这个 agent 的目的是从某一个状态开始,然后到达终点状态。它的终止状态就是左上角跟右上角,这里总共有 14 个状态,因为我们把每个位置用一个状态来表示。 +* 这个 agent 采取的动作,它的 policy function 就直接先给定了,它在每一个状态都是随机游走,它们在每一个状态就是上下左右行走。它在边缘状态的时候,比如说在第四号状态的时候,它往左走的话,它是依然存在第四号状态,我们加了这个限制。 -这里我们给的奖励函数就是说你每走一步,就会得到一个负的奖励。所以这个 agent 需要尽快地到达这个终止状态。状态之间的转移也是确定的。比如从第六号状态往上走,它就会直接到达第二号状态。很多时候有些环境是 `probabilistic` 的话,就是说 agent 在第六号状态,它选择往上走的时候,有可能地板是滑的,然后它可能滑到第三号状态或者第一号状态,这就是有概率的一个转移。但这里把这个环境进行了简化,从六号往上走,它就到了二号。所以直接用这个迭代来解它。因为我们已经知道每一个概率以及它的这个概率转移,那么就直接可以进行一个简短的迭代,然后就会算出它每一个状态的价值。 +* 这里我们给的奖励函数就是说你每走一步,就会得到 -1 的奖励,所以 agent 需要尽快地到达终止状态。 +* 状态之间的转移也是确定的。比如从第六号状态往上走,它就会直接到达第二号状态。很多时候有些环境是 `probabilistic` 的话,就是说 agent 在第六号状态,它选择往上走的时候,有可能地板是滑的,然后它可能滑到第三号状态或者第一号状态,这就是有概率的一个转移。但这里把这个环境进行了简化,从六号往上走,它就到了二号。 +* 所以直接用这个迭代来解它,因为我们已经知道每一个概率以及它的这个概率转移,那么就直接可以进行一个简短的迭代,这样就会算出它每一个状态的价值。 ![](img/2.36.png) @@ -546,7 +562,10 @@ $$ ![](img/2.40.png) -我们再迭代一次(one sweep),然后发现它就从周围的状态也开始有值。因为周围状态跟之前有值的状态是临近的,所以它就相当于把旁边这个状态转移过来。所以当我们逐渐迭代的话,你会发现这个值一直在变换。等迭代了很多次过后,很远的这些状态的价值函数已经有些值了,而且你可以发现它这里整个过程呈现逐渐扩散开的一个过程,这其实也是 policy evaluation 的一个可视化。当我们每一步在进行迭代的时候,就远的状态就会得到了一些值,就逐渐从一些已经有奖励的这些状态,逐渐扩散,当你 run 很多次过后,它就逐渐稳定下来,最后值就会确定不变,这样收敛过后,每个状态上面的值就是它目前得到的这个 value function 的值。 +* 我们再迭代一次(one sweep),然后发现它就从周围的状态也开始有值。因为周围状态跟之前有值的状态是临近的,所以它就相当于把旁边这个状态转移过来。所以当我们逐渐迭代的话,你会发现这个值一直在变换。 + +* 等迭代了很多次过后,很远的这些状态的价值函数已经有些值了,而且你可以发现它这里整个过程呈现逐渐扩散开的一个过程,这其实也是 policy evaluation 的一个可视化。 +* 当我们每一步在进行迭代的时候,远的状态就会得到了一些值,就逐渐从一些已经有奖励的这些状态,逐渐扩散,当你 run 很多次过后,它就逐渐稳定下来,最后值就会确定不变,这样收敛过后,每个状态上面的值就是它目前得到的这个 value function 的值。 ### MDP Control @@ -763,9 +782,9 @@ $$ ![](img/2.65.png) -这里是一个总结,就对于 MDP 里面的 prediction 和 control 都是用动态规划来讲,我们其实采取了不同的 Bellman Equation。 +这里是一个总结,就对于 MDP 里面的 prediction 和 control 都是用动态规划来解,我们其实采取了不同的 Bellman Equation。 -* 如果是一个 prediction 的问题,即 policy evaluation 的问题,那就直接是把这个 Bellman Expectation Equation 拿进来,就是不停地 run 这个 Bellman Expectation Equation,这样我们就可以去估计出给定的这个策略,然后得到价值函数。 +* 如果是一个 prediction 的问题,即 policy evaluation 的问题,直接就是不停地 run 这个 Bellman Expectation Equation,这样我们就可以去估计出给定的这个策略,然后得到价值函数。 * 对于 control, * 如果采取的算法是 policy iteration,那这里用的是 Bellman Expectation Equation 。把它分成两步,先上它的这个价值函数,再去优化它的策略,然后不停迭代。这里用到的只是 Bellman Expectation Equation。 * 如果采取的算法是 value iteration,那这里用到的 Bellman Equation 就是 Bellman Optimality Equation,通过 arg max 这个过程,不停地去 arg max 它,最后它就会达到最优的状态。