update chapter2

This commit is contained in:
qiwang067
2020-08-09 22:28:53 +08:00
parent 4100da5041
commit a205cbb7ab

View File

@@ -6,7 +6,7 @@
![](img/2.2.png)
上图介绍了在强化学习里面 agent 跟 environment 之间的交互agent 在得到环境的状态过后,它会采取行为,它会把这个采取的行为返还给环境。环境在得到 agent 的行为过后,它会进入下一个状态,把下一个状态传回 agent。在强化学习中agent 跟环境就是这样进行交互的,这个交互过程是可以通过马尔可夫决策过程来表示的,所以马尔可夫决策过程是强化学习里面的一个基本框架。在马尔可夫决策过程中,它的环境是 fully observable ,就是全部可以观测的但是很多时候环境里面有些量是不可观测的,但是这个部分观测的问题也可以转换成一个 MDP 的问题。
上图介绍了在强化学习里面 agent 跟 environment 之间的交互agent 在得到环境的状态过后,它会采取行为,它会把这个采取的行为返还给环境。环境在得到 agent 的行为过后,它会进入下一个状态,把下一个状态传回 agent。在强化学习中agent 跟环境就是这样进行交互的,这个交互过程是可以通过马尔可夫决策过程来表示的,所以马尔可夫决策过程是强化学习里面的一个基本框架。在马尔可夫决策过程中,它的环境是 fully observable ,就是全部可以观测的但是很多时候环境里面有些量是不可观测的,但是这个部分观测的问题也可以转换成一个 MDP 的问题。
![](img/2.3.png)
@@ -18,7 +18,7 @@
![](img/2.5.png)
首先来看一看马尔可夫链。举个例子,这个图里面有四个状态,这四个状态从 $s_1,s_2,s_3,s_4$ 之间互相转移。比如说从 $s_1$ 开始, $s_1$ 有 0.1 的概率继续存活在 $s_1$ 状态。另外,它有 0.2 的概率转移到 $s_2$ ,有 0.7 的概率转移到 $s_4$ 。如果 $s_4$ 是我们当前状态的话,那么它有 0.3 的概率转移到 $s_2$ ,有 0.2 的概率转移到 $s_3$ ,另外有 0.5 的概率留在这里,所以描述这样的状态转移,我们可以用这一个状态转移矩阵。状态转移矩阵类似于一个 conditional probability。当我们知道当前我们在 $s_t$ 这个状态过后,到达下面所有状态的一个概念。所以它每一行其实描述了是从一个节点到达所有其它节点的这个概念
首先来看一看马尔可夫链。举个例子,这个图里面有四个状态,这四个状态从 $s_1,s_2,s_3,s_4$ 之间互相转移。比如说从 $s_1$ 开始, $s_1$ 有 0.1 的概率继续存活在 $s_1$ 状态。另外,它有 0.2 的概率转移到 $s_2$ ,有 0.7 的概率转移到 $s_4$ 。如果 $s_4$ 是我们当前状态的话,那么它有 0.3 的概率转移到 $s_2$ ,有 0.2 的概率转移到 $s_3$ ,另外有 0.5 的概率留在这里,所以描述这样的状态转移,我们可以用这一个状态转移矩阵。状态转移矩阵类似于一个 conditional probability。当我们知道当前我们在 $s_t$ 这个状态过后,到达下面所有状态的一个概念。所以它每一行其实描述了是从一个节点到达所有其它节点的概率
![](img/2.6.png)
@@ -40,7 +40,7 @@
* 第一个是这个 `Horizon` 的概念,它说明了同一个 episode 或者是整个一个轨迹的长度,它是由有限个步数决定的。
* 另外,这里我们再定义一个 `return`。Return 说的是我们把奖励进行折扣然后获得的这个收益。Return 可以定义为奖励的逐步叠加,然后这里有一个叠加系数,就是越往后得到的奖励,折扣得越多。这说明我们其实更希望得到现有的奖励,未来的奖励就要把它打折扣。
* 当我们有了这个 return 过后,我们就可以正式定义一个状态的价值了,就是 `state value function`。然后对于这个马尔可夫奖励过程,它里面定义成是关于这个 return 的期望, $G_t$ 是我们之前定义的 discounted return。然后我们这里取了一个期望期望就是说从这个状态开始你有可能获得多大的价值。所以这个期望也可以看成是一个对未来可能获得奖励的它的当前价值的一个表现。就是当你进入某一个状态过后你现在就有多大的价值。
* 当我们有了这个 return 过后,就可以正式定义一个状态的价值了,就是 `state value function`。然后对于这个马尔可夫奖励过程,它里面定义成是关于这个 return 的期望, $G_t$ 是我们之前定义的 discounted return。然后我们这里取了一个期望期望就是说从这个状态开始你有可能获得多大的价值。所以这个期望也可以看成是一个对未来可能获得奖励的它的当前价值的一个表现。就是当你进入某一个状态过后你现在就有多大的价值。
![](img/2.10.png)这里我们简短地解释一下为什么需要 discounted factor。
@@ -52,7 +52,7 @@
![](img/2.11.png)
这里我们再来看一看,在这个马尔可夫奖励过程里面,如何计算它的价值。这个马尔可夫奖励过程依旧是这个状态转移。它的奖励函数是定义成这样,它在进入第一个状态的时候,它会得到 5 的奖励,进入第七个状态的时候会得到 10 的奖励,其它状态都没有奖励。我们现在可以计算每一个轨迹得到的奖励,比如我们这里对于这个 $s_4,s_5,s_6,s_7$ 轨迹的奖励进行计算我们这里折扣系数是0.5。我们在 $s_4$ 的时候,并没有任何奖励,所以这里是零。下一个状态 $s_5$ 的时候,因为我们已经到了下一步了,所以我们要把 $s_5$ 进行一个折扣,$s_5$ 本身也是没有奖励的。然后是到$s_6$ ,然后也没有任何奖励。折扣系数应该是下两步,所以我们要再乘以 $\frac{1}{2}$ 。然后这里终于我们到达$s_7$ ,然后我们获得了一个奖励。但是因为 $s_7$ 这个状态是未来才获得的奖励,所以我们要进行三次折扣。所以对于这个轨迹,它的 return 就是一个1.25,类似地,我们可以得到其它轨迹的 return 。
这里我们再来看一看,在这个马尔可夫奖励过程里面,如何计算它的价值。这个马尔可夫奖励过程依旧是这个状态转移。它的奖励函数是定义成这样,它在进入第一个状态的时候,它会得到 5 的奖励,进入第七个状态的时候会得到 10 的奖励,其它状态都没有奖励。我们现在可以计算每一个轨迹得到的奖励,比如我们这里对于这个 $s_4,s_5,s_6,s_7$ 轨迹的奖励进行计算,我们这里折扣系数是 0.5。我们在 $s_4$ 的时候,并没有任何奖励,所以这里是零。下一个状态 $s_5$ 的时候,因为我们已经到了下一步了,所以我们要把 $s_5$ 进行一个折扣,$s_5$ 本身也是没有奖励的。然后是到$s_6$ ,然后也没有任何奖励。折扣系数应该是下两步,所以我们要再乘以 $\frac{1}{2}$ 。然后这里终于我们到达$s_7$ ,然后我们获得了一个奖励。但是因为 $s_7$ 这个状态是未来才获得的奖励,所以我们要进行三次折扣。所以对于这个轨迹,它的 return 就是一个 1.25,类似地,我们可以得到其它轨迹的 return 。
这里就引出了一个问题,当我们有了一些轨迹的实际 return怎么计算它的价值函数。比如说我们现在想知道 $s_4$ 状态的价值,就是当你进入 $s_4$ 后,它的价值到底如何。
@@ -100,7 +100,7 @@ $$
![](img/2.19.png)
policy 定义了在某一个状态应该采取什么样的行为,当我们知道当前状态过后,我们可以带入这个 policy function那我们会得到一个概率概率就代表了在所有可能的行为里面怎样去采取行动。就可能有 0.7 的概率往左走,有 0.3 的概率往右走,这样是一个概率的一个表示。另外这个策略也可能是确定的,它有可能是直接输出一个值,或者就直接告诉你当前应该采取什么样的行为,而不是一个行为的概率。然后这里我们有一个假设,就这个概率函数,它应该是静态的(stationary),不同时间点,你采取的行为其实都是对这个 policy function 进行采样。
Policy 定义了在某一个状态应该采取什么样的行为,当我们知道当前状态过后,我们可以带入这个 policy function那我们会得到一个概率概率就代表了在所有可能的行为里面怎样去采取行动。就可能有 0.7 的概率往左走,有 0.3 的概率往右走,这样是一个概率的一个表示。另外这个策略也可能是确定的,它有可能是直接输出一个值,或者就直接告诉你当前应该采取什么样的行为,而不是一个行为的概率。然后这里我们有一个假设,就这个概率函数,它应该是静态的(stationary),不同时间点,你采取的行为其实都是对这个 policy function 进行采样。
![](img/2.20.png)
@@ -110,11 +110,11 @@ policy 定义了在某一个状态应该采取什么样的行为,当我们知
这里我们看一看,马尔夫决策过程里面状态转移跟之前马尔可夫奖励过程以及马尔可夫链的一个差异。对于之前的马尔可夫链的过程,它的转移是直接就决定,就从你当前是 s那么就直接通过这个转移概率就直接决定了你下一个状态会是什么。但是对于马尔可夫决策过程它的中间多了一层这个行为 a ,就是说在你当前这个状态的时候,你首先要决定的是采取某一种行为。那么你会到了某一个黑色的这个节点,到了这个黑色的节点,因为你有一定的不确定性,当你当前状态决定过后以及你当前采取的行为过后,你到未来的状态其实也是一个概率分布。所以你采取行为以及你决定,然后你可能有有多大的概率到达某一个未来状态,以及另外有多大概率到达另外一个状态。所以在这个当前状态跟未来状态转移过程中这里多了一层决策性,这里是马尔可夫决策过程跟之前的马尔可夫过程很不同的一个地方。这里这个行为是由 agent 决定,所以这里我们多了一个 componentagent 会采取这个行为来决定这个未来的状态转移。
这里我们看一看,马尔夫决策过程里面状态转移跟之前马尔可夫奖励过程以及马尔可夫链的一个差异。对于之前的马尔可夫链的过程,它的转移是直接就决定,就从你当前是 s那么就直接通过这个转移概率就直接决定了你下一个状态会是什么。但是对于马尔可夫决策过程它的中间多了一层这个行为 a ,就是说在你当前这个状态的时候,你首先要决定的是采取某一种行为。那么你会到了某一个黑色的这个节点,到了这个黑色的节点,因为你有一定的不确定性,当你当前状态决定过后以及你当前采取的行为过后,你到未来的状态其实也是一个概率分布。所以你采取行为以及你决定,然后你可能有有多大的概率到达某一个未来状态,以及另外有多大概率到达另外一个状态。所以在这个当前状态跟未来状态转移过程中这里多了一层决策性,这里是马尔可夫决策过程跟之前的马尔可夫过程很不同的一个地方。这里这个行为是由 agent 决定,所以这里我们多了一个 componentagent 会采取这个行为来决定这个未来的状态转移。
![](img/2.22.png)
顺着马尔可夫决策过程的定义,我们可以把 state-value function就是在马尔可夫决策过程里面的价值函数也进行一个定义它的定义是跟马尔可夫奖励过程是类似的但是这里我们的一个期望 expectation over policy就是这个期望是基于这个你采取的这个 policy ,就当你的 policy 决定过后,让我们通过对这个 policy 进行采样,然后我们可以得到一个期望。那么就可以计算出它的这个价值函数。这里我们另外引入了一个 Q 函数action-value function。
顺着马尔可夫决策过程的定义,我们可以把 state-value function就是在马尔可夫决策过程里面的价值函数也进行一个定义它的定义是跟马尔可夫奖励过程是类似的但是这里我们的一个期望 expectation over policy就是这个期望是基于这个你采取的这个 policy ,就当你的 policy 决定过后,让我们通过对这个 policy 进行采样,然后我们可以得到一个期望。那么就可以计算出它的这个价值函数。这里我们另外引入了一个 `Q 函数(action-value function)`
这个 Q 函数定义的是某一个状态某一个行为,然后它有可能得到的这个 return 的一个期望,这里期望其实也是 over 这个 policy function。所以你需要对这个 policy function 进行一个加和。然后最后得到它的这个价值。第三步,这里导出了价值函数跟 Q 函数之间的一个关系。价值函数跟 Q 函数的关系,就是直接对价值函数中的行为函数进行加和,就可以得到这个价值。
@@ -134,7 +134,7 @@ Bellman Expectation Equation 定义了你当前状态跟未来状态之间的一
![](img/2.26.png)
同样对于 Q 函数,我们也可以进行这样的一个推导,就我们现在的根节点是这个Q函数的一个节点。这个 Q 函数是对于黑色的这个节点。我们下一时刻的这个Q函数是叶子节点,有四个黑色结点。那么我们这里也有两个加和。
同样对于 Q 函数,我们也可以进行这样的一个推导,就我们现在的根节点是这个 Q 函数的一个节点。这个 Q 函数是对于黑色的这个节点。我们下一时刻的这个 Q 函数是叶子节点,有四个黑色结点。那么我们这里也有两个加和。
第一层加和是我们先把这个叶子节点从黑节点推到这个白色的这个节点,进了它的这个状态,就当我们到达某一个状态过后,这个白色极点,然后再进行一个加和,这样就把它重新推回到当前节点的一个 Q 函数,所以这个等式就决定了未来 Q 函数跟当前 Q 函数之间的这个关联。
@@ -144,15 +144,15 @@ Bellman Expectation Equation 定义了你当前状态跟未来状态之间的一
![](img/2.28.png)
这个马尔可夫决策过程你其实可以把它想象成一个摆渡的一个人就在这个船上面其实有一个人它可以控制这个船的移动这样就避免了这个船随波逐流。因为你在每一个时刻这个人会决定采取什么样的一个行为这样会把这个船进行导向。这样就相对于马尔可夫奖励过程跟马尔可夫链的过程的话这个纸的小船只在一个随波逐流然后产生轨迹。这里MDP 的这个不同就是我们有一个主体,这个 agent 去控制这个船,然后这样我们就可以尽可能多获得奖励。
这个马尔可夫决策过程你其实可以把它想象成一个摆渡的一个人就在这个船上面其实有一个人它可以控制这个船的移动这样就避免了这个船随波逐流。因为你在每一个时刻这个人会决定采取什么样的一个行为这样会把这个船进行导向。这样就相对于马尔可夫奖励过程跟马尔可夫链的过程的话这个纸的小船只在一个随波逐流然后产生轨迹。这里MDP 的这个不同就是我们有一个主体,这个 agent 去控制这个船,然后这样我们就可以尽可能多获得奖励。
![](img/2.29.png)
这里我们再来进一步把这个例子,看一看这个怎么做 policy evaluation怎么在这个决策过程里面计算它每一个状态的价值。现在我们假设环境里面它有两种行为就是往左走跟往右走的行为。然后我们这里 reward 的定义。因为其实这个现在的奖励函数应该是关于行为以及状态两个变量的一个函数,但我们这里就说,对于所有行为不管你采取什么行为,然后你只要是到达状态一了,然后都有的奖励。只要你到达状态 $s_7$ 了,然后你有十的奖励,然后中间没有任何奖励。那么假设我们现在采取的一个策略,这个策略我们说我们不管在任何状态,我们采取的策略都是往左走,我们也这里假设我们的价值这个折扣因子是零,那么直接就可以得到对于这样一个 deterministic policy那么最后估算出的价值函数是是一致的。怎么得到这个结果其实我们可以直接在去 run 这个 iterative Equation就把这个 Bellman Expectation Equation 拿到这个里面来,然后不停迭代,最后它会收敛。收敛过后,然后它的值就是它每一个状态的价值。
这里我们看一看这个例子怎么做 policy evaluation怎么在这个决策过程里面计算它每一个状态的价值。现在我们假设环境里面它有两种行为就是往左走跟往右走的行为。然后我们这里 reward 的定义。因为其实这个现在的奖励函数应该是关于行为以及状态两个变量的一个函数,但我们这里就说,对于所有行为不管你采取什么行为,然后你只要是到达状态一了,然后都有 5 的奖励。只要你到达状态 $s_7$ 了,你就有 10 的奖励,然后中间没有任何奖励。那么假设我们现在采取的一个策略,这个策略我们说我们不管在任何状态,我们采取的策略都是往左走,我们也这里假设我们的价值这个折扣因子是零,那么直接就可以得到对于这样一个 deterministic policy那么最后估算出的价值函数是是一致的。怎么得到这个结果其实我们可以直接在去 run 这个 iterative Equation就把这个 Bellman Expectation Equation 拿到这个里面来,然后不停迭代,最后它会收敛。收敛过后,然后它的值就是它每一个状态的价值。
![](img/2.30.png)
我们再来看另外一个情况,就是如果我们这里有折扣了,这个折扣因子是 0.5,我们就可以通过这个等式进行迭代
我们再来看另外一个情况,就是如果我们这里有折扣了,这个折扣因子是 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)
$$
@@ -162,17 +162,17 @@ $$
接下来给大家介绍马尔可夫决策过程的 `prediction``control`,这两个问题是马尔可夫决策过程里面的核心问题。
* 对于 prediction它的意思是说给定一个马尔可夫决策过程以及一个给定的 policy $\pi$ ,那我们去计算它的 value function就等于每个状态它的价值函数是多少。
* control 这个问题是说我们去寻找一个最佳的一个策略,它的 input 就是马尔可夫决策过程,输出是通过去寻找它的最佳策略,然后同时输出它的最佳价值函数(optimal value function)以及它的这个最佳策略(optimal policy)。
* 对于 prediction它的意思是说给定一个马尔可夫决策过程以及一个给定的 policy $\pi$ ,那我们去计算它的 value function就等于每个状态它的价值函数是多少。
* Control 这个问题是说我们去寻找一个最佳的一个策略,它的 input 就是马尔可夫决策过程,输出是通过去寻找它的最佳策略,然后同时输出它的最佳价值函数(optimal value function)以及它的这个最佳策略(optimal policy)。
* 在 MDP 里面prediction 和 control 都可以通过这个动态规划去解决。
![](img/2.32.png)
首先我们来看一下`动态规划`。动态规划是说的是我们把可以把一个问题分解成一个最佳的一个子结构,当我们可以把一些子结构都可以解决的话,那么它总共就可以组成一个最优的一个解。马尔可夫决策过程是满足这个动态规划的要求的就是在 Bellman Equation 里面,大家都看到了,我们其实把它分解成一个递归的一个结构当我们把它分解成一个递归的结构的时候,如果我们的子问题子状态,然后能得到一个值,那么它的未来状态因为跟子状态是直接相连的。那我们也可以继续推算出来。所以这个价值函数就可以储存它以及重用它的最佳的解。所以动态规划是解 MDP prediction 和 control 一个非常有效的一个方式。
首先我们来看一下`动态规划`。动态规划是说的是我们把可以把一个问题分解成一个最佳子结构,当我们可以把一些子结构都可以解决的话,那么它就可以组成一个最优的解。马尔可夫决策过程是满足这个动态规划的要求的就是在 Bellman Equation 里面,我们其实把它分解成一个递归的一个结构当我们把它分解成一个递归的结构的时候,如果我们的子问题子状态能得到一个值,那么它的未来状态因为跟子状态是直接相连的。那我们也可以继续推算出来。所以这个价值函数就可以储存它以及重用它的最佳的解。所以动态规划是解 MDP prediction 和 control 一个非常有效的方式。
![](img/2.33.png)
首先我们来看一下 policy evaluation就是当我们给定一个 MDP 的时候,我们有一个事先定好的一个 policy。那么我们可以获得多少的价值就对于当前这个策略我们可以得到多大的这个 value function。这里一个方法是说我们直接把这个 Bellman Expectation Backup这个等式拿出来然后变成一个迭代的一个过程这样反复迭代直到收敛。这样就可以计算它的一个过程。这个迭代过程是可以看作是 synchronous backup 的一个过程这里大家可以看到这个等式14说的就是这个 Bellman Expectation Backup我们把这个转换成一个动态规划的一个迭代。当我们得到上一时刻的这个 $v_t$ 的时候,那我们下一时刻就通过这个递归的一个关系,我们可以推出下一时刻的这个值,那么反复去迭代它,最后它的值就是从 $v_1,v_2$,到最后收敛过后这个值。这个值就是我们当前给定的 policy 对应的价值函数。
首先来看一下 policy evaluation就是当我们给定一个 MDP 的时候,我们有一个事先定好的一个 policy。那么我们可以获得多少的价值就对于当前这个策略我们可以得到多大的这个 value function。这里一个方法是说我们直接把这个 Bellman Expectation Backup这个等式拿出来然后变成一个迭代的一个过程这样反复迭代直到收敛。这样就可以计算它的一个过程。这个迭代过程是可以看作是 synchronous backup 的一个过程这里大家可以看到这个等式14说的就是这个 Bellman Expectation Backup我们把这个转换成一个动态规划的一个迭代。当我们得到上一时刻的这个 $v_t$ 的时候,那我们下一时刻就通过这个递归的一个关系,我们可以推出下一时刻的这个值,那么反复去迭代它,最后它的值就是从 $v_1,v_2$,到最后收敛过后这个值。这个值就是我们当前给定的 policy 对应的价值函数。
![](img/2.34.png)
@@ -184,19 +184,19 @@ $$
![](img/2.35.png)
比如现在这个环境是一个 small gridworld 的一个例子,就在我们这个环境非常简单。然后这个 agent 的目的是从某一个状态开始它为了出去这个状态它的终止状态就是左上角跟右上角然后这里总共有14个状态因为我们把每个位置就是用一个状态来表示。然后这个 agent 它采取的行为,我们说它的这个 policy function 就直接先给定了。我们说它在每一个状态都是随机游走。你说它们在每一个状态就是上下左右行走,它在边缘状态的时候,比如说在第四号状态的时候,它往左走的话,它是依然存在现在这个第四号状态,我们加了这个限制。然后这里我们给的奖励函数就是说你在这个每走一步,然后你就会得到一个负的奖励。所以这个 agent 需要尽快地到达这个终止状态。转态之间的转移也是确定的。比如我们从第六号状态往上走,它就会直接到达第二状态,因为很多时候有些环境是 probabilistic 的话,就是说 agent 在第六号状态,它选择往上走的时候,有可能地板是滑的,然后它可能滑到第三号状态或者第一号状态去,这就是有概率的一个转移。但我们这里说这个环境把它简化,从六号往上走,然后它就到了二号或者往右走然后它就到达七号。所以直接把这个迭代来解它。因为我们已经知道每一个概率以及它的这个概率转移,那么就直接可以进行一个简短的迭代,然后就会算出它每一个状态的一个价值。
比如现在这个环境是一个 small gridworld 的例子。这个 agent 的目的是从某一个状态开始,它为了出去这个状态,它的终止状态就是左上角跟右上角,然后这里总共有 14 个状态,因为我们把每个位置就是用一个状态来表示。然后这个 agent 它采取的行为,我们说它的这个 policy function 就直接先给定了。我们说它在每一个状态都是随机游走。你说它们在每一个状态就是上下左右行走,它在边缘状态的时候,比如说在第四号状态的时候,它往左走的话,它是依然存在现在这个第四号状态,我们加了这个限制。然后这里我们给的奖励函数就是说你在这个每走一步,然后你就会得到一个负的奖励。所以这个 agent 需要尽快地到达这个终止状态。转态之间的转移也是确定的。比如我们从第六号状态往上走,它就会直接到达第二状态,因为很多时候有些环境是 probabilistic 的话,就是说 agent 在第六号状态,它选择往上走的时候,有可能地板是滑的,然后它可能滑到第三号状态或者第一号状态去,这就是有概率的一个转移。但我们这里说这个环境把它简化,从六号往上走,然后它就到了二号或者往右走然后它就到达七号。所以直接把这个迭代来解它。因为我们已经知道每一个概率以及它的这个概率转移,那么就直接可以进行一个简短的迭代,然后就会算出它每一个状态的一个价值。
![](img/2.36.png)
![](img/2.37.png)
我们再来看一个动态的一个例子,就你可以看见这里有很多格子。每个格子都代表了一个状态。然后在每个格子里面,你可以发现它初始有一个值,我们开始的时候它的所有值都是零。然后在每一个状态,你可以看下它还有一些箭头,这个箭头就是说它当前这个状态的时候,它应该采取什么样的策略,我们这里采取一个随机的一个策略,不管它在哪一个状态,然后它上下左右的概率都是相同的。就是比如在某个状态,它都有上下左右 0.25 的概率采取某一个行为,所以它是一个完全随机的一个行为。
我们再来看一个动态的例子,就你可以看见这里有很多格子。每个格子都代表了一个状态。然后在每个格子里面,你可以发现它初始有一个值,我们开始的时候它的所有值都是零。然后在每一个状态,你可以看下它还有一些箭头,这个箭头就是说它当前这个状态的时候,它应该采取什么样的策略,我们这里采取一个随机的一个策略,不管它在哪一个状态,然后它上下左右的概率都是相同的。就是比如在某个状态,它都有上下左右 0.25 的概率采取某一个行为,所以它是一个完全随机的一个行为。
![](img/2.38.png)
在这样的环境里面,现在我们想计算它每一个状态的价值。然后这里我们也定义了它的 reward function。你可以看到有些状态上面有一个 R 的这个值。比如我们这边有些值是为负的,然后在这个棋盘的中间这个位置,可以能看到有一个 R 1.0,为正的一个价值函数。 所以每个状态对应了一个值,然后有一些状态没有任何值,就说明它的这个 reward function它的奖励是为零的。
所以,当我们开始做这个 policy evaluationpolicy evaluation是一个不停迭代的过程。当我们初始化的时候所有的 $v(s)$ 都是0。我们现在迭代一次迭代一次过后你发现有些状态上面值已经产生了变化。比如说那些有奖励的值比如有些状态的值的 R 为 -1迭代一次过后它就会得到 -1 的这个奖励。对于中间这个绿色的,因为它的奖励为正,所以它是 + 1的状态。
所以,当我们开始做这个 policy evaluationpolicy evaluation是一个不停迭代的过程。当我们初始化的时候所有的 $v(s)$ 都是 0。我们现在迭代一次迭代一次过后你发现有些状态上面值已经产生了变化。比如说那些有奖励的值比如有些状态的值的 R 为 -1迭代一次过后它就会得到 -1 的这个奖励。对于中间这个绿色的,因为它的奖励为正,所以它是 + 1 的状态。
![](img/2.39.png)
@@ -204,21 +204,19 @@ $$
![](img/2.40.png)
然后我们再迭代一次(one sweep),然后发现它就从周围的状态也开始有值。因为周围状态跟之前有值的状态是临近的,所以它就相当于把旁边这个状态转移过来。所以当我们逐渐迭代的话,你会发现这个值一直在变换。等迭代了很多次过后,然后很远的这些状态的价值函数已经有些值了,而且你可以发现它这里整个过程呈现这个逐渐扩散开的一个过程,这其实也是 policy evaluation 的一个可视化。当我们每一步在进行迭代的时候,就远的状态就会得到了一些值,就逐渐从一些已经有奖励的这些状态,逐渐扩散,当你 run 很多次过后,然后它就逐渐稳定下来,最后值就会确定不变,这样收敛过后,每个状态上面的值就是它目前得到的这个 value function 的值。
然后我们再迭代一次(one sweep),然后发现它就从周围的状态也开始有值。因为周围状态跟之前有值的状态是临近的,所以它就相当于把旁边这个状态转移过来。所以当我们逐渐迭代的话,你会发现这个值一直在变换。等迭代了很多次过后,然后很远的这些状态的价值函数已经有些值了,而且你可以发现它这里整个过程呈现逐渐扩散开的一个过程,这其实也是 policy evaluation 的一个可视化。当我们每一步在进行迭代的时候,就远的状态就会得到了一些值,就逐渐从一些已经有奖励的这些状态,逐渐扩散,当你 run 很多次过后,然后它就逐渐稳定下来,最后值就会确定不变,这样收敛过后,每个状态上面的值就是它目前得到的这个 value function 的值。
![](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 函数。我们可以直接在这个Q 函数上面取一个关于这个动作 action 最大化的值,然后我们就可以直接提取出它的最佳策略。
怎么去寻找这个最佳的 policy ,这里一个隐含条件是当我们取得最佳的价值函数过后,我们其实可以通过对这个 Q 函数进行极大化,然后得到最佳的价值。就当所有东西都收敛过后,如果我们对于这个 Q 函数,因为 Q 函数是关于状态跟动作的一个函数,所以对某一个状态我们当采取一个行为,然后可以使得这个 Q 函数最大化。那么就这个行为就应该是最佳的行为。所以当我们能优化出一个 Q 函数。我们可以直接在这个 Q 函数上面取一个关于这个动作 action 最大化的值,然后我们就可以直接提取出它的最佳策略。
![](img/2.43.png)
这里一种策略搜索办法是我们可以去穷举。因为假设我们有有限多个状态、有限多个行为可能性,那么每个状态我们可以采取这个 A 种行为的策略,那么总共就是 $|A|^{|S|}$ 个可能的 policy。那么有一种方法是直接可以把这个把穷举一遍然后算出每种策略的 value function然后对比一下可以得到最佳策略。但是一个问题是这样的穷举非常没有效率,所以我们要采取另外的一些办法,所以在解这个搜索最佳策略的方法有两种比较常用的方法:一种是叫 policy iteration另外一种是叫 value iteration 的一个方法。
这里一种策略搜索办法是我们可以去穷举。假设我们有有限多个状态、有限多个行为可能性,那么每个状态我们可以采取这个 A 种行为的策略,那么总共就是 $|A|^{|S|}$ 个可能的 policy。那么有一种方法是直接可以把这个把穷举一遍然后算出每种策略的 value function然后对比一下可以得到最佳策略。但是一个问题是这样的穷举非常没有效率所以我们要采取另外的一些办法所以在解这个搜索最佳策略的方法有两种比较常用的方法一种是叫 `policy iteration`,另外一种是叫 `value iteration` 的一个方法。
![](img/2.44.png)
@@ -230,27 +228,21 @@ policy evaluation 是说我们给定一个 MDP 以及给定一个 policy
给定当前的policy function去估计这个 v 函数。取得 v 函数过后,我们可以进一步推算出它的 Q 函数。
得到 Q 函数过后,那我们就直接去取它的极大化。在 Q 函数上面取极大化,这样我们就有了第二步骤。第二步骤就是改进它的策略,通过在这个 Q 函数上面做一个贪心的一个搜索,这样就会进一步改进它的一个策略。这两个步骤就一直是在迭代进行,所以在这个 policy iteration 里面,在初始化的时候,我们有一个初始化的 $V$ 和 $\pi$ 。然后就是在这两个过程之间迭代,左边这幅图上面这根曲线就是我们当前这个 v 这个值,下面是 policy 的值。就跟踢皮球一样,我们先给定当前已有的这个 policy function然后去算它的这个 v。算出 v 过后,我们会得到一个 Q 函数Q 函数我们采取 greedy 的策略,这样我们有踢皮球,踢回这个 policy 。然后就会进一步改进那个 policy ,得到一个改进的 policy 过后,它还不是最佳的,我们再进行 policy evaluation然后又会得到一个新的一个 value function基于这个新的 value function 再进行 Q 函数的极大化 ,这样就逐渐迭代,然后就会得到收敛。
得到 Q 函数过后,那我们就直接去取它的极大化。在 Q 函数上面取极大化,这样我们就有了第二步骤。第二步骤就是改进它的策略,通过在这个 Q 函数上面做一个贪心的搜索,这样就会进一步改进它的一个策略。这两个步骤就一直是在迭代进行,所以在这个 policy iteration 里面,在初始化的时候,我们有一个初始化的 $V$ 和 $\pi$ 。然后就是在这两个过程之间迭代,左边这幅图上面这根曲线就是我们当前这个 v 这个值,下面是 policy 的值。就跟踢皮球一样,我们先给定当前已有的这个 policy function然后去算它的这个 v。算出 v 过后,我们会得到一个 Q 函数Q 函数我们采取 greedy 的策略,这样我们有踢皮球,踢回这个 policy 。然后就会进一步改进那个 policy ,得到一个改进的 policy 过后,它还不是最佳的,我们再进行 policy evaluation然后又会得到一个新的 value function基于这个新的 value function 再进行 Q 函数的极大化 ,这样就逐渐迭代,然后就会得到收敛。
![](img/2.46.png)
这里和我们再来看一下第二个步骤 policy improvement我们是如何改进它的这个策略。当我们等到这个 v 值过后,我们就可以通过这个 reward function 以及状态转移把它的这个 Q-function 算出来。对于每一个状态,第二个步骤会得到它的一个新一轮的这个 policy ,就在每一个状态,我们去取使它得到最大值的 action。你可以把这个 Q 函数看成一个 Q-table。横轴是它的所有状态纵轴是它的可能的 action。Q 函数得到过后Q-table 就得到了。
那么对于某一个状态,每一列里面我们会取最大的那个值,最大值对应的那个 action 就是它现在应该采取了更佳的action。
所以你看这里下面这个 arg max 操作就说在每个状态里面,我们去采取一个 action这个 action 就是能使这一列的 Q 最大化的那个动作。
那么对于某一个状态,每一列里面我们会取最大的那个值,最大值对应的那个 action 就是它现在应该采取了更佳的action。所以你看这里下面这个 arg max 操作就说在每个状态里面,我们去采取一个 action这个 action 就是能使这一列的 Q 最大化的那个动作。
![](img/2.47.png)
当我们采取一直在采取这个 arg max这个操作的时候我们会得到一个单调的递增。其实大致就是再说我们通过采取这种 greedy ,这种 arg max 这个操作,然后是会得到更好的这个或者是不变的这个 policy而不会使它这个价值函数变差。所以当这个改进停止过后然后我们就会得到一个最佳的一个策略。
当我们一直在采取这个 arg max这个操作的时候我们会得到一个单调的递增。其实大致就是再说我们通过采取这种 greedy ,这种 arg max 这个操作,然后是会得到更好的这个或者是不变的这个 policy而不会使它这个价值函数变差。所以当这个改进停止过后然后我们就会得到一个最佳策略。
![](img/2.48.png)
当改进停止过后,我们取它极大化的这个 action 之后,它直接就会变成它的这个价值函数。所以我们在这里有了一个新的一个等式,就叫 Bellman Optimality Equation。这个 Bellman Optimality Equation 满足的时候,是说整个 MDP 已经到达最佳的状态。
它到达最佳状态过后,对于我们这个 Q 函数,我们取它最大的 action 时候的那个值,就是直接等于它的最佳的这个 value function这个条件只有当整个状态已经收敛过后已经得到一个最佳的 policy 的时候,然后它是满足的。
当改进停止过后,我们取它极大化的这个 action 之后,它直接就会变成它的这个价值函数。所以我们在这里有了一个新的一个等式,就叫 `Bellman Optimality Equation`。这个 Bellman Optimality Equation 满足的时候,是说整个 MDP 已经到达最佳的状态。它到达最佳状态过后,对于我们这个 Q 函数,我们取它最大的 action 时候的那个值,就是直接等于它的最佳的这个 value function这个条件只有当整个状态已经收敛过后已经得到一个最佳的 policy 的时候,然后它是满足的。
![](img/2.49.png)
@@ -266,7 +258,7 @@ $$
![](img/2.50.png)
Value iteration 说的是我们把 Bellman Optimality Equation 当成一个 update rule 来进行,之前我们是说上面这个等式只有当整个状态已经到达最佳状态的时候,然后才满足。但是我们这里可以把它转换成一个 backup 的一个等式。 Backup 就是说一个迭代的一个等式,我们不停地去迭代 Bellman Optimality Equation就希望能不停的迭代到了最后它能逐渐趋向于最佳的策略所以这也是 value iteration 这个算法的精髓。就是我们去为了得到最佳的这个 $v^*$ ,对于每个状态它的 $v^*$ 这个值,我们直接把这个 Bellman Optimality Equation 进行迭代,迭代了很多次,之后它就会收敛。
Value iteration 说的是我们把 Bellman Optimality Equation 当成一个 update rule 来进行,之前我们是说上面这个等式只有当整个状态已经到达最佳状态的时候,然后才满足。但是我们这里可以把它转换成一个 backup 的等式。 Backup 就是说一个迭代的一个等式,我们不停地去迭代 Bellman Optimality Equation就希望能不停的迭代到了最后它能逐渐趋向于最佳的策略所以这也是 value iteration 这个算法的精髓。就是我们去为了得到最佳的这个 $v^*$ ,对于每个状态它的 $v^*$ 这个值,我们直接把这个 Bellman Optimality Equation 进行迭代,迭代了很多次,之后它就会收敛。
![](img/2.51.png)
@@ -274,7 +266,7 @@ Value iteration 这个算法目的是为了得到一个最佳的一个策略。
![](img/2.52.png)
上图是一个可视化的一个过程,其实也是一个 grid world ,我们希望能在这个棋盘里面,不管你在哪一个位置开始,我们都希望能够到 goal 的这个点,左上角的那个点。因为它是一个迭代过程,然后我这里可视化了从 $v_1$ 到 $v_7$ 上面每一个状态。它的这个值的变化,你发现它的这个值逐渐在变化,而且现在是因为它每走一步,让它会得到一个负的一个值,所以它需要尽快的到达左上角,可以发现离它越远的那个值就就越大。$v_7$ 收敛过后,右下角那个值是-6也就相当于它要走六步才能到达最上面那个值。而且离这个目的地越近了它的价值越大。
上图是一个可视化的一个过程,其实也是一个 grid world ,我们希望能在这个棋盘里面,不管你在哪一个位置开始,我们都希望能够到 goal 的这个点,左上角的那个点。因为它是一个迭代过程,然后我这里可视化了从 $v_1$ 到 $v_7$ 上面每一个状态。它的这个值的变化,你发现它的这个值逐渐在变化,而且现在是因为它每走一步,让它会得到一个负的一个值,所以它需要尽快的到达左上角,可以发现离它越远的那个值就就越大。$v_7$ 收敛过后,右下角那个值是 -6也就相当于它要走六步才能到达最上面那个值。而且离这个目的地越近了它的价值越大。
![](img/2.53.png)
@@ -288,9 +280,7 @@ Value iteration 这个算法目的是为了得到一个最佳的一个策略。
![](img/2.56.png)
现在我们进行第二个步骤 policy improvement按 policy update按这个 policy update 过后,你可以发现有些格子里面的这个 policy 已经产生变化。比如说现在对于中间这个-1的这个状态然后它的最佳策略是往下走。当你到达这个状态过后你应该往下这样就会得到最佳的这个值。让旁边这个绿色旁边的这个方块它的策略也改变了它现在选取的最佳策略是往左走你说你在当前状态的时候最佳策略应该是往左走才对。
现在我们进行第二个步骤 policy improvement按 policy update按这个 policy update 过后,你可以发现有些格子里面的这个 policy 已经产生变化。比如说现在对于中间这个-1的这个状态然后它的最佳策略是往下走。当你到达这个状态过后你应该往下这样就会得到最佳的这个值。让旁边这个绿色旁边的这个方块它的策略也改变了它现在选取的最佳策略是往左走你说你在当前状态的时候最佳策略应该是往左走才对。
![](img/2.57.png)
@@ -302,7 +292,7 @@ Value iteration 这个算法目的是为了得到一个最佳的一个策略。
![](img/2.59.png)
我们再 run 这个 policy evaluation它的值又再不停地变换,变化之后现在又收敛了。
我们再 run 这个 policy evaluation它的值又再不停地变换,变化之后现在又收敛了。
![](img/2.60.png)
@@ -311,7 +301,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 解决掉。解决掉的意思是说,不管在哪个状态,都可以顺着它这个状态对应的最佳的这个策略,然后到达我们可以获得最多奖励的一个状态。
@@ -323,17 +313,13 @@ Value iteration 这个算法目的是为了得到一个最佳的一个策略。
这个 Demo 里面是一个代码,就是为了解一个叫 FrozenLake 的一个例子,这个例子是 OpenAI Gym里的一个环境跟 gridworld 很像,不过它每一个状态转移是一个 probability。
![](img/2.64.png)
然后我们再来看一下 policy iteration 和 value iteration 的一个对比,这两个算法都是为了解 MDP 的控制问题policy iteration 是由两部分组成的policy evaluation 和 policy improvement。它很清楚的把这个过程分成了两步就首先对于当前的这个已经搜索到的策略函数然后对它进行一个估值得到估值过后把 Q 函数算出来,我们进一步进行改进。
但对于 value iteration 的话,它是直接把 Bellman Optimality Equation 拿进来,然后直接去寻找最佳的 value function这里没有 policy function 在这里面,当我们把这个 optimal value function 算出来过后,那我们可以在最后再执行一步这个提取过程,最佳策略提取过程。这样就可以把它的最佳策略抽取过来。
![](img/2.65.png)
这里是一个总结,就对于 MDP 里面的 prediction 和 control 都是用动态规划来讲,然后我们这里其实采取了不同的这个 Bellman Equation。如果是一个 Prediction 的问题,就是说 policy evaluation 的问题,那么是直接是把这个 Bellman Expectation Equation 拿进来,就是不停地 run 这个 Bellman Expectation Equation这样我们就可以去估计出给定的这个策略然后可以得到的价值函数。对于这个control如果我们的算法是 policy iteration 的话,那我们这里是直接是用的 Bellman Expectation Equation 。把它分成两步,先上它的这个价值函数,然后再去优化它的策略,然后不停迭代,然后这里用到的只是 Bellman Expectation Equation。如果我们这里采取的算法是 value iteration那么我们这里用到的 Bellman Equation 就是 Bellman Optimality Equation通过 arg max 这个过程,不停地去 arg max 它,最后它就会达到最优的状态。
这里是一个总结,就对于 MDP 里面的 prediction 和 control 都是用动态规划来讲,然后我们这里其实采取了不同的这个 Bellman Equation。如果是一个 prediction 的问题,就是说 policy evaluation 的问题,那么是直接是把这个 Bellman Expectation Equation 拿进来,就是不停地 run 这个 Bellman Expectation Equation这样我们就可以去估计出给定的这个策略然后可以得到的价值函数。对于这个control如果我们的算法是 policy iteration 的话,那我们这里是直接是用的 Bellman Expectation Equation 。把它分成两步,先上它的这个价值函数,然后再去优化它的策略,然后不停迭代,然后这里用到的只是 Bellman Expectation Equation。如果我们这里采取的算法是 value iteration那么我们这里用到的 Bellman Equation 就是 Bellman Optimality Equation通过 arg max 这个过程,不停地去 arg max 它,最后它就会达到最优的状态。