fix ch2 typos

This commit is contained in:
qiwang067
2020-09-16 21:29:57 +08:00
parent bb0aa7d50d
commit 0ae0a63124

View File

@@ -44,7 +44,7 @@
![](img/2.8.png)
这里是我们刚才看的马尔可夫链,如果把奖励也放上去的话,就是说到达每一个状态,我们都会获得一个奖励。这里我们可以定义比如说到达 $s_1$ 状态的时候可以获得 5 的奖励,到达 $s_7$ 的时候,有 10 的奖励,其它状态没有任何奖励。因为这里状态是有限的,所以我们可以用一个向量来表示这个奖励函数,这个向量表示了每个点的奖励的大小。
这里是我们刚才看的马尔可夫链,如果把奖励也放上去的话,就是说到达每一个状态,我们都会获得一个奖励。这里我们可以设置对应的奖励,比如说到达 $s_1$ 状态的时候可以获得 5 的奖励,到达 $s_7$ 的时候,有 10 的奖励,其它状态没有任何奖励。因为这里状态是有限的,所以我们可以用一个向量来表示这个奖励函数,这个向量表示了每个点的奖励的大小。
我们可以通过一个形象的例子来理解 MRP你可以把它看成一个纸船。我们把一个纸船放到河流之中那么它就会随着这个河流而流动它自身是没有动力的所以你可以把 MRP 看成是一个随波逐流的例子,当我们从某一个点开始的时候,这个纸船就会随着事先定义好的状态转移进行流动,它到达每个状态过后,我们就有可能获得一些奖励。
@@ -56,7 +56,7 @@
* 这里我们再定义一个 `return`。Return 说的是我们把奖励进行折扣然后获得的这个收益。Return 可以定义为奖励的逐步叠加,然后这里有一个叠加系数,就是越往后得到的奖励,折扣得越多。这说明我们其实更希望得到现有的奖励,未来的奖励就要把它打折扣。
* 当我们有了这个 return 过后,就可以正式定义一个状态的价值了,就是 `state value function`。然后对于这个MRP它里面定义成是关于这个 return 的期望, $G_t$ 是我们之前定义的 discounted return。然后我们这里取了一个期望期望就是说从这个状态开始你有可能获得多大的价值。所以这个期望也可以看成是一个对未来可能获得奖励的它的当前价值的一个表现。就是当你进入某一个状态过后你现在就有多大的价值。
![](img/2.10.png)这里我们简短地解释一下为什么需要 discounted factor。
![](img/2.10.png)这里我们解释一下为什么需要 discounted factor。
* 第一点是有些马尔可夫过程是带环的,它并没有终结,我们想避免这个无穷的奖励。
* 另外,我们想把这个不确定性表示出来,希望尽可能快地得到奖励,而不是在未来某一个点得到奖励。
@@ -70,13 +70,30 @@
我们现在可以计算每一个轨迹得到的奖励,比如我们对于这个 $s_4,s_5,s_6,s_7$ 轨迹的奖励进行计算,这里折扣系数是 0.5。我们在 $s_4$ 的时候,奖励为零。下一个状态 $s_5$ 的时候,因为我们已经到了下一步了,所以我们要把 $s_5$ 进行一个折扣,$s_5$ 本身也是没有奖励的。然后是到 $s_6$,也没有任何奖励,折扣系数应该是 $\frac{1}{4}$ 。到达 $s_7$ 后,我们获得了一个奖励,但是因为 $s_7$ 这个状态是未来才获得的奖励,所以我们要进行三次折扣。所以对于这个轨迹,它的 return 就是一个 1.25,类似地,我们可以得到其它轨迹的 return 。
这里就引出了一个问题,当我们有了一些轨迹的实际 return怎么计算它的价值函数。比如说我们想知道 $s_4$ 状态的价值,就是当你进入 $s_4$ 后,它的价值到底如何。一个可行的做法就是说我们可以产生很多轨迹,然后把这里的轨迹都叠加起来。比如我们可以从 $s_4$ 开始,然后采样生成很多轨迹,然后都把它的 return 计算出来,然后可以直接把它取一个平均作为你进入 $s_4$ 它的价值。这其实是一种计算价值函数的一个办法,通过这个蒙特卡罗采样的办法计算 $s_4$ 的状态。接下来会进一步介绍这个蒙特卡罗算法。
这里就引出了一个问题,当我们有了一些轨迹的实际 return怎么计算它的价值函数。比如说我们想知道 $s_4$ 状态的价值,就是当你进入 $s_4$ 后,它的价值到底如何。一个可行的做法就是说我们可以产生很多轨迹,然后把这里的轨迹都叠加起来。比如我们可以从 $s_4$ 开始,采样生成很多轨迹,都把它的 return 计算出来,然后可以直接把它取一个平均作为你进入 $s_4$ 它的价值。这其实是一种计算价值函数的办法,通过这个蒙特卡罗采样的办法计算 $s_4$ 的状态。接下来会进一步介绍蒙特卡罗算法。
![](img/2.12.png)
但是这里我们采取了另外一种计算方法,我们通过一定的推导就可以从这个价值函数里面推导出 `Bellman Equation贝尔曼等式`。**Bellman Equation 定义了当前状态跟未来状态之间的这个关系**。比如 $s'$ 我们可以把它看成未来的所有状态。然后这里有一个转移 $P(s'|s)$ ,就是我们从当前状态转移到未来状态,那么它之间是满足于这个关系。然后我们可以把第二部分看成是一个 Discounted sum of future reward。$V(s')$ 代表的是未来某一个状态的价值,那么我们从当前这个位置开始有一定的概率去到未来的所有状态,所以我们要把这个概率也写上去,这个转移矩阵也写上去,然后我们就得到了未来状态。然后再乘以一个 $\gamma$。这样就可以把未来打折扣,然后再加上当前立刻可以得到的这个奖励,这样就组成了这个 Bellman Equation。这个推导过程大家其实可以去练习练习就从这个定义出发然后把它分解开我们就可以得到 Bellman Equation。
但是这里我们采取了另外一种计算方法,我们通过一定的推导就可以从这个价值函数里面推导出 `Bellman Equation贝尔曼等式`。**Bellman Equation 定义了当前状态跟未来状态之间的这个关系**。
>Bellman Equation 就是当前状态与未来状态的迭代关系表示当前状态的值函数可以通过下个状态的值函数来计算。Bellman Equation 因其提出者、动态规划创始人 Richard Bellman 而得名 ,也 叫作“动态规划方程”。
其中
* 我们可以把 $s'$ 看成未来的所有状态。
* 这里有一个转移 $P(s'|s)$ ,就是我们从当前状态转移到未来状态,那么它之间是满足于这个关系。
* 我们可以把第二部分看成是一个 Discounted sum of future reward。
* $V(s')$ 代表的是未来某一个状态的价值。我们从当前这个位置开始有一定的概率去到未来的所有状态,所以我们要把这个概率也写上去,这个转移矩阵也写上去,然后我们就得到了未来状态,然后再乘以一个 $\gamma$,这样就可以把未来的奖励打折扣。
未来打了折扣的奖励加上当前立刻可以得到的奖励,就组成了这个 Bellman Equation。Bellman Equation 的推导过程如下:
$$
\begin{aligned}
V(s)&=\mathbb{E}\left[G_{t} \mid s_{t}=s\right]\\
&=\mathbb{E}\left[R_{t+1}+\gamma R_{t+2}+\gamma^{2} R_{t+3}+\ldots \mid s_{t}=s\right] \\
&=\mathbb{E}\left[R_{t+1}+\gamma \mathbb{E}\left[R_{t+2}+\gamma R_{t+3}+\gamma^{2} R_{t+4}+\ldots\right] \mid s_{t}=s\right]\\
&=R(s)+\gamma \sum_{s^{\prime} \in S} P\left(s^{\prime} \mid s\right) V\left(s^{\prime}\right)
\end{aligned}
$$
>Bellman Equation 就是当前状态与未来状态的迭代关系表示当前状态的值函数可以通过下个状态的值函数来计算。Bellman Equation 因其提出者、动态规划创始人 Richard Bellman 而得名 ,也叫作“动态规划方程”。
![](img/2.13.png)
@@ -84,7 +101,7 @@ Bellman Equation 定义了状态之间的迭代关系。假设有一个马尔可
![](img/2.14.png)
我们可以把 Bellman Equation 写成一种矩阵的形式。首先有这个转移矩阵。我们当前这个状态是一个向量 $[V(s_1),V(s_2),\cdots,V(s_N)]^T$。我们可以写成迭代的形式。我们每一行来看的话,V 这个向量乘以了转移矩阵里面的某一行,然后再加上它当前的这个可以得到的 reward然后就会到它当前的这个价值。
我们可以把 Bellman Equation 写成一种矩阵的形式。首先有这个转移矩阵。我们当前这个状态是一个向量 $[V(s_1),V(s_2),\cdots,V(s_N)]^T$。我们可以写成迭代的形式。我们每一行来看的话,$V$ 这个向量乘以了转移矩阵里面的某一行,再加上它当前可以得到的 reward就会到它当前的价值。
当我们写成如下的矩阵形式后
$$
@@ -92,7 +109,7 @@ V = R+ \gamma PV
$$
我们可以直接得到一个`解析解(analytic solution)`,就通过矩阵求逆的过程,就可以把这个 V 的这个价值直接求出来。但是一个问题是这个矩阵求逆的过程的复杂度是 $O(N^3)$。所以就当我们状态非常多的时候,比如说从我们现在十个状态到一千个状态,到一百万个状态。那么当我们有一百万个状态的时候,这个转移矩阵就会是个一百万乘以一百万的一个矩阵这样一个大矩阵的话求逆是非常困难的所以这种通过解析解去解只能对于很小量的MRP。
我们可以直接得到一个`解析解(analytic solution)`,就通过矩阵求逆的过程,就可以把这个 V 的这个价值直接求出来。但是一个问题是这个矩阵求逆的过程的复杂度是 $O(N^3)$。所以状态非常多的时候,比如说从十个状态到一千个状态,到一百万个状态。那么当我们有一百万个状态的时候,这个转移矩阵就会是个一百万乘以一百万的矩阵这样一个大矩阵的话求逆是非常困难的,所以这种通过解析解去解,只能对于很小量的 MRP。
![](img/2.15.png)
@@ -100,7 +117,7 @@ $$
![](img/2.16.png)
首先我们来看蒙特卡罗的办法来计算它的一个价值函数。蒙特卡罗就跟我们之前采用的这个方法很类似就说我们当得到一个MRP过后我们可以从某一个状态开始然后让它让把这个小船放进去让它随波逐流这样就会产生一个轨迹。产生了一个轨迹过后就会得到一个奖励那么就直接把它的 Discounted 的奖励 $g$ 直接算出来。算出来过后就可以把它积累起来,当积累到一定的轨迹数量过后,然后直接除以这个轨迹,然后就会得到它的这个价值。
首先我们蒙特卡罗的办法来计算它的价值函数。蒙特卡罗就跟我们之前采用的这个方法很类似,就说我们当得到一个 MRP 过后,我们可以从某一个状态开始,然后让它让把这个小船放进去,让它随波逐流,这样就会产生一个轨迹。产生了一个轨迹过后,就会得到一个奖励,那么就直接把它的 discounted 的奖励 $g$ 直接算出来。算出来过后就可以把它积累起来,当积累到一定的轨迹数量过后,然后直接除以这个轨迹,然后就会得到它的这个价值。
比如说我们要算 $s_4$ 状态的一个价值,就可以从 $s_4$ 状态开始,随机产生很多轨迹,就产生很多小船,然后扔到这个转移矩阵里面去,然后它就会随波逐流,产生轨迹。每个轨迹,我们可以算到它的这个 return 。那么每个轨迹都会得到一个 return让我们得到大量的 return 。比如说一百个、一千个的 return ,然后直接取一个平均,那么就可以等价于它现在 $s_4$ 这个价值。因为 $s_4$ 的价值 $V(s_4)$ 定义了你未来可能得到多少的奖励。这就是蒙特卡罗采样的方法。
@@ -168,9 +185,12 @@ MDP你其实可以把它想象成一个摆渡的人在这个船上面
![](img/2.29.png)
我们再看下 policy evaluation 的例子,怎么在这个决策过程里面计算它每一个状态的价值。假设环境里面有两种行为:往左走和往右走。
我们再看下 policy evaluation 的例子,怎么在这个决策过程里面计算它每一个状态的价值。
现在的奖励函数应该是关于行为以及状态两个变量的一个函数。但我们这里就说,不管你采取什么行为,只要到达状态一,就有 5 的奖励。只要你到达状态 $s_7$ 了,就有 10 的奖励,中间没有任何奖励。假设我们现在采取的一个策略,这个策略是说不管在任何状态,我们采取的策略都是往左走,这里假设价值折扣因子是零,那么对于 deterministic policy最后估算出的价值函数是一致的。怎么得到这个结果我们可以直接在去 run 这个 iterative equation就把这个 Bellman Expectation Equation 拿到这个里面来,然后不停地迭代,最后它会收敛。收敛过后,它的值就是它每一个状态的价值
* 假设环境里面有两种行为:往左走和往右走
* 现在的奖励函数应该是关于行为以及状态两个变量的一个函数。但我们这里就说,不管你采取什么行为,只要到达状态 $s_1$,就有 5 的奖励。只要你到达状态 $s_7$ 了,就有 10 的奖励,中间没有任何奖励。
* 假设我们现在采取的一个策略,这个策略是说不管在任何状态,我们采取的策略都是往左走,这里假设价值折扣因子是零,那么对于 deterministic policy最后估算出的价值函数是一致的。怎么得到这个结果我们可以直接在去 run 这个 iterative equation就把这个 Bellman Expectation Equation 拿到这个里面来,然后不停地迭代,最后它会收敛。收敛过后,它的值就是它每一个状态的价值。
![](img/2.30.png)
@@ -190,7 +210,7 @@ $$
![](img/2.32.png)
首先我们来看一下`动态规划`。动态规划是说我们把可以把一个问题分解成一个最佳子结构当我们可以把一些子结构都可以解决的话那么它就可以组成一个最优的解。MDP是满足动态规划的要求的就是在 Bellman Equation 里面,我们可以把它分解成一个递归的一个结构。当我们把它分解成一个递归的结构的时候,如果我们的子问题子状态能得到一个值,那么它的未来状态因为跟子状态是直接相连的那我们也可以继续推算出来所以这个价值函数就可以储存它以及重用它的最佳的解。所以动态规划是解 MDP prediction 和 control 一个非常有效的方式。
首先我们来看一下`动态规划`。动态规划是说我们把可以把一个问题分解成一个最佳子结构当我们可以把一些子结构都可以解决的话那么它就可以组成一个最优的解。MDP是满足动态规划的要求的就是在 Bellman Equation 里面,我们可以把它分解成一个递归的一个结构。当我们把它分解成一个递归的结构的时候,如果我们的子问题子状态能得到一个值,那么它的未来状态因为跟子状态是直接相连的那我们也可以继续推算出来所以这个价值函数就可以储存它以及重用它的最佳的解。**所以动态规划是解 MDP prediction 和 control 一个非常有效的方式。**
![](img/2.33.png)
@@ -232,11 +252,11 @@ $$
![](img/2.41.png)
Policy evaluation 是说我们给定一个 MDP 以及给定一个 policy然后我们可以估算出它的价值函数。那么这个问题的另外一方面是说如果我们只有一个 MDP如何去寻找一个最佳的策略然后可以得到一个`最佳价值函数(Optimal Value Function)`。Optimal Value Function 的定义是说,我们去搜索一种 policy $\pi$ ,然后我们会得到每个状态它的状态值最大的一个情况,$v^*$ 就是到达每一个状态,它的值的极大化情况。在这种极大化情况上面,我们得到的策略就可以说它是最佳策略(optimal policy)。optimal policy 使得每个状态,它的状态函数都取得最大值。所以当我们说某一个 MDP 的环境被解了过后,就是说我们可以得到一个 optimal value function然后我们就说它被解了。在这种情况下面然后我们它的最佳的价值函数是一致的就它达到了这个 upper bound它的值是一致的但是这里可能有多个最佳的 policy多个 policy 可以取得相同的最佳价值。
Policy evaluation 是说给定一个 MDP 一个 policy我们可以估算出它的价值函数。这个问题的另外一方面是说如果我们只有一个 MDP如何去寻找一个最佳的策略然后可以得到一个`最佳价值函数(Optimal Value Function)`。Optimal Value Function 的定义是说,我们去搜索一种 policy $\pi$ ,然后我们会得到每个状态它的状态值最大的一个情况,$v^*$ 就是到达每一个状态,它的值的极大化情况。在这种极大化情况上面,我们得到的策略就可以说它是最佳策略(optimal policy)。Optimal policy 使得每个状态,它的状态函数都取得最大值。所以当我们说某一个 MDP 的环境被解了过后,就是说我们可以得到一个 optimal value function然后我们就说它被解了。在这种情况下面然后我们它的最佳的价值函数是一致的就它达到了这个 upper bound它的值是一致的但是这里可能有多个最佳的 policy多个 policy 可以取得相同的最佳价值。
![](img/2.42.png)
怎么去寻找这个最佳的 policy ,这里一个隐含条件是当我们取得最佳的价值函数过后,我们其实可以通过对这个 Q 函数进行极大化,然后得到最佳的价值。当所有东西都收敛过后,因为 Q 函数是关于状态跟动作的一个函数,所以对某一个状态采取一个行为,然后可以使得这个 Q 函数最大化,那么就这个行为就应该是最佳的行为。所以当我们能优化出一个 Q 函数,我们可以直接在这个 Q 函数上面取一个让这个 action 最大化的值,然后我们就可以直接提取出它的最佳策略。
怎么去寻找这个最佳的 policy ,这里一个隐含条件是当我们取得最佳的价值函数过后,我们其实可以通过对这个 Q 函数进行极大化,然后得到最佳的价值。当所有东西都收敛过后,因为 Q 函数是关于状态跟动作的一个函数,所以对某一个状态采取一个行为,然后可以使得这个 Q 函数最大化,那么就这个行为就应该是最佳的行为。所以当我们能优化出一个 Q 函数,我们可以直接在这个 Q 函数上面取一个让这个 action 最大化的值,就可以直接提取出它的最佳策略。
![](img/2.43.png)
@@ -327,7 +347,7 @@ Value iteration 算法的目的是为了得到一个最佳的策略。一个解
![](img/2.61.png)
再来在这个状态下面进行改变,现在你看基本没有什么变化,就说明整个 MDP 已经收敛了。所以现在它每个状态的值就是它当前最佳的 value function 的值以及它当前状态对应的这个 policy 已经是最佳的 policy。我们可以简单来看比如说现在我们在右上角这个 0.38 的这个位置,现在我们直接就可以根据它每个状态的这个值,比如现在右上角,然后它说现在应该往下走,我们往下走一步。它又说往下走,然后再往下走。现在我们有两个选择,一个是往左走,一个往下走。我们现在往下走,随着这个箭头的指示,我们就会到达中间 1.20 的一个价值的一个状态。如果能达到这个状态的话,我们会得到很多 reward 。这个说明了 policy iteration 的一个过程可以把 gridworld 解决掉。解决掉的意思是说,不管在哪个状态,都可以顺着它这个状态对应的最佳的这个策略来到达可以获得最多奖励的一个状态。
再来在这个状态下面进行改变,现在你看基本没有什么变化,就说明整个 MDP 已经收敛了。所以现在它每个状态的值就是它当前最佳的 value function 的值以及它当前状态对应的这个 policy 已经是最佳的 policy。我们可以简单来看比如说现在我们在右上角这个 0.38 的这个位置,现在我们直接就可以根据它每个状态的这个值,比如现在右上角,然后它说现在应该往下走,我们往下走一步。它又说往下走,然后再往下走。现在我们有两个选择,一个是往左走,一个往下走。我们现在往下走,随着这个箭头的指示,我们就会到达中间 1.20 的一个价值的一个状态。如果能达到这个状态的话,我们会得到很多 reward 。这个说明了 policy iteration 可以把 gridworld 解决掉。解决掉的意思是说,不管在哪个状态,都可以顺着它这个状态对应的最佳的这个策略来到达可以获得最多奖励的一个状态。
![](img/2.62.png)