fix ch2 typos
This commit is contained in:
@@ -1,7 +1,5 @@
|
||||
# MDP
|
||||
|
||||

|
||||
|
||||
本章给大家介绍马尔可夫决策过程。
|
||||
|
||||
* 在介绍马尔可夫决策过程之前,先介绍它的简化版本:马尔可夫链以及马尔可夫奖励过程,通过跟这两种过程的比较,我们可以更容易理解马尔可夫决策过程。
|
||||
@@ -83,7 +81,7 @@ $$
|
||||
|
||||
这里我们进一步定义一些概念。
|
||||
|
||||
* `Horizon` 是指一个 episode 的长度(每个 episode 最大的时间步数),它是由有限个步数决定的。
|
||||
* `Horizon` 是指一个回合的长度(每个回合最大的时间步数),它是由有限个步数决定的。
|
||||
|
||||
* `Return(回报)` 说的是把奖励进行折扣后所获得的收益。Return 可以定义为奖励的逐步叠加,如下式所示:
|
||||
|
||||
@@ -113,7 +111,7 @@ $G_t$ 是之前定义的 `discounted return`,我们这里取了一个期望,
|
||||
* 在人的行为里面来说的话,大家也是想得到即时奖励。
|
||||
* 有些时候可以把这个系数设为 0,设为 0 过后,我们就只关注了它当前的奖励。我们也可以把它设为 1,设为 1 的话就是对未来并没有折扣,未来获得的奖励跟当前获得的奖励是一样的。
|
||||
|
||||
这个系数可以作为强化学习 agent 的一个 hyperparameter 来进行调整,然后就会得到不同行为的 agent。
|
||||
Discount factor 可以作为强化学习 agent 的一个超参数来进行调整,然后就会得到不同行为的 agent。
|
||||
|
||||

|
||||
|
||||
@@ -143,8 +141,8 @@ $$
|
||||
|
||||
* $s'$ 可以看成未来的所有状态。
|
||||
* 转移 $P(s'|s)$ 是指从当前状态转移到未来状态的概率。
|
||||
* 第二部分可以看成是一个 Discounted sum of future reward。
|
||||
* $V(s')$ 代表的是未来某一个状态的价值。我们从当前这个位置开始,有一定的概率去到未来的所有状态,所以我们要把这个概率也写上去,这个转移矩阵也写上去,然后我们就得到了未来状态,然后再乘以一个 $\gamma$,这样就可以把未来的奖励打折扣。
|
||||
* 第二部分可以看成是未来奖励的折扣总和(Discounted sum of future reward)。
|
||||
|
||||
**Bellman Equation 定义了当前状态跟未来状态之间的这个关系。**
|
||||
|
||||
@@ -233,14 +231,17 @@ $$
|
||||
接下来我们来求解这个价值函数。**我们可以通过迭代的方法来解这种状态非常多的 MRP,**比如说:
|
||||
|
||||
* 动态规划的方法,
|
||||
* 蒙特卡罗的办法(通过采样的办法去计算它),
|
||||
* Temporal-Difference Learning 的办法。 `Temporal-Difference Learning` 叫 `TD Leanring`,它是动态规划和蒙特卡罗的一个结合。
|
||||
* 蒙特卡罗的办法(通过采样的办法去计算它),
|
||||
* 时序差分学习(Temporal-Difference Learning)的办法。 `Temporal-Difference Learning` 叫 `TD Leanring`,它是动态规划和蒙特卡罗的一个结合。
|
||||
|
||||

|
||||
|
||||
**首先我们用蒙特卡罗(Monte Carlo)的办法来计算它的价值函数。**蒙特卡罗就跟我们之前采用的这个方法很类似,就说我们当得到一个 MRP 过后,我们可以从某一个状态开始,把这个小船放进去,让它随波逐流,这样就会产生一个轨迹。产生了一个轨迹过后,就会得到一个奖励,那么就直接把它的 discounted 的奖励 $g$ 算出来。算出来过后就可以把它积累起来,得到 return $G_t$。 当积累到一定的轨迹数量过后,直接用 $G_t$ 除以轨迹数量,就会得到它的价值。
|
||||
**首先我们用蒙特卡罗(Monte Carlo)的办法来计算它的价值函数。**蒙特卡罗就是说当得到一个 MRP 过后,我们可以从某一个状态开始,把这个小船放进去,让它随波逐流,这样就会产生一个轨迹。产生了一个轨迹过后,就会得到一个奖励,那么就直接把它的折扣的奖励 $g$ 算出来。算出来过后就可以把它积累起来,得到 return $G_t$。 当积累到一定的轨迹数量过后,直接用 $G_t$ 除以轨迹数量,就会得到它的价值。
|
||||
|
||||
比如说我们要算 $s_4$ 状态的一个价值。我们就可以从 $s_4$ 状态开始,随机产生很多轨迹,就产生很多小船,然后扔到这个转移矩阵里面去,然后它就会随波逐流,产生轨迹。每个轨迹,我们可以算到它的这个 return。每个轨迹都会得到一个 return,让我们得到大量的 return 。比如说一百个、一千个的 return ,然后直接取一个平均,那么就可以等价于现在 $s_4$ 这个价值,因为 $s_4$ 的价值 $V(s_4)$ 定义了你未来可能得到多少的奖励。这就是蒙特卡罗采样的方法。
|
||||
比如说我们要算 $s_4$ 状态的价值。
|
||||
|
||||
* 我们就可以从 $s_4$ 状态开始,随机产生很多轨迹,就是说产生很多小船,把小船扔到这个转移矩阵里面去,然后它就会随波逐流,产生轨迹。
|
||||
* 每个轨迹都会得到一个 return,我们得到大量的 return,比如说一百个、一千个 return ,然后直接取一个平均,那么就可以等价于现在 $s_4$ 这个价值,因为 $s_4$ 的价值 $V(s_4)$ 定义了你未来可能得到多少的奖励。这就是蒙特卡罗采样的方法。
|
||||
|
||||
**我们也可以用这个动态规划的办法**,一直去迭代它的 Bellman equation,让它最后收敛,我们就可以得到它的一个状态。所以在这里算法二就是一个迭代的算法,通过 bootstrapping(拔靴自助) 的办法,然后去不停地迭代这个 Bellman Equation。当这个最后更新的状态跟你上一个状态变化并不大的时候,更新就可以停止,我们就可以输出最新的 $V'(s)$ 作为它当前的状态。所以这里就是把 Bellman Equation 变成一个 Bellman Update,这样就可以得到它的一个价值。
|
||||
|
||||
@@ -254,7 +255,7 @@ $$
|
||||
|
||||
**相对于 MRP,`马尔可夫决策过程(Markov Decision Process)`多了一个 `decision`,其它的定义跟 MRP 都是类似的**:
|
||||
|
||||
* 这里多了一个决策,多了一个 action。
|
||||
* 这里多了一个决策,多了一个动作。
|
||||
* 状态转移也多了一个条件,变成了 $P\left(s_{t+1}=s^{\prime} \mid s_{t}=s, a_{t}=a\right)$。你采取某一种动作,然后你未来的状态会不同。未来的状态不仅是依赖于你当前的状态,也依赖于在当前状态 agent 采取的这个动作。
|
||||
* 对于这个价值函数,它也是多了一个条件,多了一个你当前的这个动作,变成了 $R\left(s_{t}=s, a_{t}=a\right)=\mathbb{E}\left[r_{t} \mid s_{t}=s, a_{t}=a\right]$。你当前的状态以及你采取的动作会决定你在当前可能得到的奖励多少。
|
||||
|
||||
@@ -447,7 +448,7 @@ $$
|
||||
|
||||
* 假设环境里面有两种动作:往左走和往右走。
|
||||
* 现在的奖励函数应该是关于动作以及状态两个变量的一个函数。但我们这里规定,不管你采取什么动作,只要到达状态 $s_1$,就有 5 的奖励。只要你到达状态 $s_7$ 了,就有 10 的奖励,中间没有任何奖励。
|
||||
* 假设我们现在采取的一个策略,这个策略是说不管在任何状态,我们采取的策略都是往左走。假设价值折扣因子是零,那么对于 deterministic policy,最后估算出的价值函数是一致的,即
|
||||
* 假设我们现在采取的一个策略,这个策略是说不管在任何状态,我们采取的策略都是往左走。假设价值折扣因子是零,那么对于确定性策略(deterministic policy),最后估算出的价值函数是一致的,即
|
||||
|
||||
$$
|
||||
V^{\pi}=[5,0,0,0,0,0,10]
|
||||
@@ -527,7 +528,7 @@ MDP 是满足动态规划的要求的,
|
||||
* 在 Bellman equation 里面,我们可以把它分解成一个递归的结构。当我们把它分解成一个递归的结构的时候,如果我们的子问题子状态能得到一个值,那么它的未来状态因为跟子状态是直接相连的,那我们也可以继续推算出来。
|
||||
* 价值函数就可以储存并重用它的最佳的解。
|
||||
|
||||
动态规划应用于 MDP 的规划问题(planning)而不是学习问题(learning),我们必须对环境是完全已知的(Model-Based),才能做动态规划,直观的说,就是要知道状态转移概率和对应的 reward 才行
|
||||
动态规划应用于 MDP 的规划问题(planning)而不是学习问题(learning),我们必须对环境是完全已知的(Model-Based),才能做动态规划,直观的说,就是要知道状态转移概率和对应的奖励才行
|
||||
|
||||
动态规划能够完成预测问题和控制问题的求解,是解 MDP prediction 和 control 一个非常有效的方式。
|
||||
|
||||
@@ -566,18 +567,16 @@ $$
|
||||
* 这个 agent 采取的动作,它的 policy function 就直接先给定了,它在每一个状态都是随机游走,它们在每一个状态就是上下左右行走。它在边缘状态的时候,比如说在第四号状态的时候,它往左走的话,它是依然存在第四号状态,我们加了这个限制。
|
||||
|
||||
* 这里我们给的奖励函数就是说你每走一步,就会得到 -1 的奖励,所以 agent 需要尽快地到达终止状态。
|
||||
* 状态之间的转移也是确定的。比如从第六号状态往上走,它就会直接到达第二号状态。很多时候有些环境是 `probabilistic` 的话,就是说 agent 在第六号状态,它选择往上走的时候,有可能地板是滑的,然后它可能滑到第三号状态或者第一号状态,这就是有概率的一个转移。但这里把这个环境进行了简化,从六号往上走,它就到了二号。
|
||||
* 状态之间的转移也是确定的。比如从第六号状态往上走,它就会直接到达第二号状态。很多时候有些环境是 `概率性的(probabilistic)`, 就是说 agent 在第六号状态,它选择往上走的时候,有可能地板是滑的,然后它可能滑到第三号状态或者第一号状态,这就是有概率的一个转移。但这里把这个环境进行了简化,从六号往上走,它就到了二号。
|
||||
* 所以直接用这个迭代来解它,因为我们已经知道每一个概率以及它的这个概率转移,那么就直接可以进行一个简短的迭代,这样就会算出它每一个状态的价值。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
我们再来看一个动态的例子,首先推荐斯坦福大学的一个网站:[GridWorld: Dynamic Programming Demo](https://cs.stanford.edu/people/karpathy/reinforcejs/gridworld_dp.html) ,这个网站模拟了单步更新的过程中,所有格子的一个状态价值的变化过程。
|
||||
|
||||
这里有很多格子,每个格子都代表了一个状态。在每个格子里面有一个初始值零。然后在每一个状态,它还有一些箭头,这个箭头就是说它在当前这个状态应该采取什么样的策略。我们这里采取一个随机的策略,不管它在哪一个状态,它上下左右的概率都是相同的。比如在某个状态,它都有上下左右 0.25 的概率采取某一个动作,所以它的动作是完全随机的。
|
||||
这里有很多格子,每个格子都代表了一个状态。在每个格子里面有一个初始值零。然后在每一个状态,它还有一些箭头,这个箭头就是说它在当前这个状态应该采取什么样的策略。我们这里采取一个随机的策略,不管它在哪一个状态,它上下左右的概率都是相同的。比如在某个状态,它都有上下左右 0.25 的概率采取某一个动作,所以它的动作是完全随机的。
|
||||
|
||||
在这样的环境里面,我们想计算它每一个状态的价值。我们也定义了它的 reward function,你可以看到有些状态上面有一个 R 的值。比如我们这边有些值是为负的,我们可以看到格子里面有几个 -1 的 reward,只有一个 +1 reward 的格子。在这个棋盘的中间这个位置,可以看到有一个 R 的值是 1.0,为正的一个价值函数。 所以每个状态对应了一个值,然后有一些状态没有任何值,就说明它的这个 reward function,它的奖励是为零的。
|
||||
在这样的环境里面,我们想计算它每一个状态的价值。我们也定义了它的 reward function,你可以看到有些状态上面有一个 R 的值。比如我们这边有些值是为负的,我们可以看到格子里面有几个 -1 的奖励,只有一个 +1 奖励的格子。在这个棋盘的中间这个位置,可以看到有一个 R 的值是 1.0,为正的一个价值函数。 所以每个状态对应了一个值,然后有一些状态没有任何值,就说明它的这个 reward function,它的奖励是为零的。
|
||||
|
||||

|
||||
|
||||
@@ -630,11 +629,7 @@ A: 当取得最佳的价值函数过后,我们可以通过对这个 Q 函数
|
||||
$$
|
||||
\pi^{*}(s)=\underset{\pi}{\arg \max } ~ v^{\pi}(s)
|
||||
$$
|
||||
对于一个事先定好的 MDP 过程,当 agent 去采取最佳策略的时候,
|
||||
|
||||
* 我们可以说最佳策略一般都是确定的。
|
||||
* 而且是 stationary,它不会随着时间的变化。
|
||||
* 但是不一定是 unique,多种动作可能会取得相同的这个价值。
|
||||
对于一个事先定好的 MDP 过程,当 agent 去采取最佳策略的时候,我们可以说最佳策略一般都是确定的,而且是稳定的(它不会随着时间的变化)。但是不一定是唯一的,多种动作可能会取得相同的这个价值。
|
||||
|
||||
**我们可以通过 policy iteration 和 value iteration 来解 MDP 的控制问题。**
|
||||
|
||||
@@ -675,15 +670,15 @@ $$
|
||||
|
||||

|
||||
|
||||
当一直在采取 arg max 这个操作的时候,我们会得到一个单调的递增。通过采取这种 greedy,即 arg max 操作,我们就会得到更好的或者不变的 policy,而不会使它这个价值函数变差。所以当这个改进停止过后,我们就会得到一个最佳策略。
|
||||
当一直在采取 arg max 操作的时候,我们会得到一个单调的递增。通过采取这种 greedy,即 arg max 操作,我们就会得到更好的或者不变的 policy,而不会使它这个价值函数变差。所以当这个改进停止过后,我们就会得到一个最佳策略。
|
||||
|
||||

|
||||
|
||||
当改进停止过后,我们取它极大化的这个 action,它直接就会变成它的价值函数,即
|
||||
当改进停止过后,我们取它最大化的这个 action,它直接就会变成它的价值函数,如下式所示:
|
||||
$$
|
||||
q^{\pi}\left(s, \pi^{\prime}(s)\right)=\max _{a \in \mathcal{A}} q^{\pi}(s, a)=q^{\pi}(s, \pi(s))=v^{\pi}(s)
|
||||
$$
|
||||
所以我们在这里有了一个新的等式:
|
||||
所以我们有了一个新的等式:
|
||||
$$
|
||||
v^{\pi}(s)=\max _{a \in \mathcal{A}} q^{\pi}(s, a)
|
||||
$$
|
||||
@@ -699,7 +694,7 @@ $$
|
||||
$$
|
||||
v^{*}(s)=\max _{a} q^{*}(s, a)
|
||||
$$
|
||||
当我们取最大的这个 action 的时候对应的那个值就是当前那个状态的最佳的价值函数。
|
||||
当我们取最大的这个 action 的时候对应的值就是当前状态的最佳的价值函数。
|
||||
|
||||
另外,我们给出第二个等式,即 Q 函数的 Bellman equation:
|
||||
$$
|
||||
@@ -758,7 +753,7 @@ $$
|
||||
$$
|
||||
v(s) \leftarrow \max _{a \in \mathcal{A}}\left(R(s, a)+\gamma \sum_{s^{\prime} \in \mathcal{S}} P\left(s^{\prime} \mid s, a\right) v\left(s^{\prime}\right)\right)
|
||||
$$
|
||||
之前我们说上面这个等式只有当整个 MDP 已经到达最佳的状态时才满足。但这里可以把它转换成一个 backup 的等式。 Backup 就是说一个迭代的等式。**我们不停地去迭代 Bellman Optimality Equation,到了最后,它能逐渐趋向于最佳的策略,这是 value iteration 算法的精髓。**
|
||||
之前我们说上面这个等式只有当整个 MDP 已经到达最佳的状态时才满足。但这里可以把它转换成一个 backup 的等式。Backup 就是说一个迭代的等式。**我们不停地去迭代 Bellman Optimality Equation,到了最后,它能逐渐趋向于最佳的策略,这是 value iteration 算法的精髓。**
|
||||
|
||||
为了得到最佳的 $v^*$ ,对于每个状态的 $v^*$,我们直接把这个 Bellman Optimality Equation 进行迭代,迭代了很多次之后,它就会收敛。
|
||||
|
||||
@@ -773,8 +768,8 @@ $$
|
||||

|
||||
|
||||
* value function 做的工作类似于 value 的反向传播,每次迭代做一步传播,所以中间过程的 policy 和 value function 是没有意义的。不像是 policy iteration,它每一次迭代的结果都是有意义的,都是一个完整的 policy。
|
||||
* 上图是一个可视化的过程,在一个 gridworld 中,我们设定了一个终点(goal),也就是左上角的点。不管你在哪一个位置开始,我们都希望能够到终点(实际上这个终点是在迭代过程中不必要的,只是为了更好的演示)。Value iteration 的迭代过程像是一个从某一个 state(这里是我们的 goal)反向传播其他各个状态的过程。因为每次迭代只能影响到与之直接相关的状态。
|
||||
* 让我们回忆下 Principle of Optimality Theorem:当你这次迭代求解的某个状态 s 的 value function $v_{k+1}(s)$ 是最优解,它的前提是能够从该状态到达的所有状态 s' 此时都已经得到了最优解;如果不是的话,它做的事情只是一个类似传递 value function 的过程。
|
||||
* 上图是一个可视化的过程,在一个 gridworld 中,我们设定了一个终点(goal),也就是左上角的点。不管你在哪一个位置开始,我们都希望能够到终点(实际上这个终点是在迭代过程中不必要的,只是为了更好的演示)。Value iteration 的迭代过程像是一个从某一个状态(这里是我们的 goal)反向传播其他各个状态的过程。因为每次迭代只能影响到与之直接相关的状态。
|
||||
* 让我们回忆下 `Principle of Optimality Theorem`:当你这次迭代求解的某个状态 s 的 value function $v_{k+1}(s)$ 是最优解,它的前提是能够从该状态到达的所有状态 s' 此时都已经得到了最优解;如果不是的话,它做的事情只是一个类似传递 value function 的过程。
|
||||
* 以上图为例,实际上,对于每一个状态,我们都可以看成一个终点。迭代由每一个终点开始,每次都根据 Bellman optimality equation 重新计算 value。如果它的相邻节点 value 发生变化,变得更好,那么它也会变得更好,一直到相邻节点都不变了。因此,**在我们迭代到** $v_7$ **之前,也就是还没将每个终点的最优的 value 传递给其他的所有状态之前,中间的几个 value function 只是一种暂存的不完整的数据,它不能代表每一个 state 的 value function,所以生成的 policy 是一个没有意义的 policy**。
|
||||
* 因为它是一个迭代过程,这里可视化了从 $v_1$ 到 $v_7$ 每一个状态的值的变化,它的这个值逐渐在变化。而且因为它每走一步,就会得到一个负的值,所以它需要尽快地到达左上角,可以发现离它越远的,那个值就越小。
|
||||
* $v_7$ 收敛过后,右下角那个值是 -6,相当于它要走六步,才能到达最上面那个值。而且离目的地越近,它的价值越大。
|
||||
@@ -827,14 +822,14 @@ $$
|
||||
|
||||

|
||||
|
||||
**我们再用 value iteration 来解 MDP,点第 3 个 value iteration。**
|
||||
**我们再用 value iteration 来解 MDP,点 Toggle value iteration。**
|
||||
|
||||
* 当它的这个值确定下来过后,它会产生它的最佳状态,这个最佳状态提取的策略跟 policy iteration 得出来的最佳策略是一致的。
|
||||
* 在每个状态,我们跟着这个最佳策略走,就会到达可以得到最多奖励的一个状态。
|
||||
|
||||

|
||||
|
||||
[这个 Demo](https://github.com/cuhkrlcourse/RLexample/tree/master/MDP) 里面是一个代码,就是为了解一个叫 `FrozenLake` 的例子,这个例子是 OpenAI Gym 里的一个环境,跟 gridworld 很像,不过它每一个状态转移是一个 probability。
|
||||
[这个 Demo](https://github.com/cuhkrlcourse/RLexample/tree/master/MDP) 里面是一个代码,就是为了解一个叫 `FrozenLake` 的例子,这个例子是 OpenAI Gym 里的一个环境,跟 gridworld 很像,不过它每一个状态转移是一个概率。
|
||||
|
||||

|
||||
|
||||
|
||||
Reference in New Issue
Block a user