fix some typos

This commit is contained in:
qiwang067
2020-10-24 21:40:52 +08:00
parent 09886f6ef8
commit aa1232d1f9
2 changed files with 228 additions and 64 deletions

View File

@@ -2,7 +2,7 @@
![](img/2.1.png)
这节课我会给大家介绍马尔可夫决策过程。
本节给大家介绍马尔可夫决策过程。
* 在介绍马尔可夫决策过程之前,先介绍它的简化版本:马尔可夫链以及马尔可夫奖励过程,通过跟这两种过程的比较,我们可以更生动地理解马尔可夫决策过程。
* 第二部分会介绍马尔可夫决策过程中的 `policy evaluation`,就是当给定一个决策过后,怎么去计算它的价值函数。
@@ -10,7 +10,9 @@
![](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 +20,22 @@
## Markov Process(MP)
![](img/2.4.png)如果一个状态转移是符合马尔可夫的,那就是说一个状态的下一个状态只取决于它当前状态,而跟它当前状态之前的状态都没有关系。比如说我们这里有一个 $h_t$,它包含了之前的所有状态。但是这里的转移从当前 $s_t$ 转到 $s_{t+1}$ 这个状态,它是直接就等于它之前所有的状态。如果某一个过程满足`马尔可夫性质(Markov Property)`,就是说未来的转移跟过去是独立的,它只取决于现在。**马尔可夫性质是所有马尔可夫过程的基础。**
### Markov Property
![](img/2.4.png)如果一个状态转移是符合马尔可夫的,那就是说一个状态的下一个状态只取决于它当前状态,而跟它当前状态之前的状态都没有关系。
我们设状态的历史为 $(h_{t}=\left\{s_{1}, s_{2}, s_{3}, \ldots, s_{t}\right\}$$h_t$ 包含了之前的所有状态),如果一个状态转移是符合马尔可夫的,也就是满足如下条件:
$$
p\left(s_{t+1} \mid s_{t}\right) =p\left(s_{t+1} \mid h_{t}\right) \tag{1}
$$
$$
p\left(s_{t+1} \mid s_{t}, a_{t}\right) =p\left(s_{t+1} \mid h_{t}, a_{t}\right) \tag{2}
$$
从当前 $s_t$ 转移到 $s_{t+1}$ 这个状态,它是直接就等于它之前所有的状态转移到 $s_{t+1}$。如果某一个过程满足`马尔可夫性质(Markov Property)`,就是说未来的转移跟过去是独立的,它只取决于现在。**马尔可夫性质是所有马尔可夫过程的基础。**
### Markov Process
![](img/2.5.png)
@@ -36,6 +53,8 @@
我们可以用`状态转移矩阵(State Transition Matrix)`来描述这样的状态转移。状态转移矩阵类似于一个 conditional probability当我们知道当前我们在 $s_t$ 这个状态过后,到达下面所有状态的一个概念。所以它每一行其实描述了是从一个节点到达所有其它节点的概率。
### Example of MP
![](img/2.6.png)
上图是一个马尔可夫链的例子,我们这里有七个状态。比如说从 $s_1$ 开始到 $s_2$ ,它有 0.4 的概率,然后它有 0.6 的概率继续存活在它当前的状态。 $s_2$ 有 0.4 的概率到左边,有 0.4 的概率到 $s_3$ ,另外有 0.2 的概率存活在现在的状态,所以给定了这个状态转移的马尔可夫链后,我们可以对这个链进行采样,这样就会得到一串的轨迹。
@@ -52,21 +71,43 @@
**`马尔可夫奖励过程(Markov Reward Process, MRP)` 是马尔可夫链再加上了一个奖励函数。**在 MRP 中,转移矩阵跟它的这个状态都是跟马尔可夫链一样的,多了一个`奖励函数(reward function)`。**奖励函数是一个期望**,就是说当你到达某一个状态的时候,可以获得多大的奖励,然后这里另外定义了一个 discount factor $\gamma$ 。
### Example of MRP
![](img/2.8.png)
这里是我们刚才看的马尔可夫链,如果把奖励也放上去的话,就是说到达每一个状态,我们都会获得一个奖励。这里我们可以设置对应的奖励,比如说到达 $s_1$ 状态的时候,可以获得 5 的奖励,到达 $s_7$ 的时候,有 10 的奖励,其它状态没有任何奖励。因为这里状态是有限的,所以我们可以用一个向量来表示这个奖励函数,这个向量表示了每个点的奖励的大小。
我们可以通过一个形象的例子来理解 MRP你可以把它看成一个纸船。我们把一个纸船放到河流之中那么它就会随着这个河流而流动它自身是没有动力的所以你可以把 MRP 看成是一个随波逐流的例子,当我们从某一个点开始的时候,这个纸船就会随着事先定义好的状态转移进行流动,它到达每个状态过后,我们就有可能获得一些奖励。
### Return and Value function
![](img/2.9.png)
这里我们进一步定义一些概念。
* 第一个是 `horizon` ,它说明了同一个 episode 或者是整个一个轨迹的长度,它是由有限个步数决定的。
* 这里我们再定义一个 `return`。Return 说的是我们把奖励进行折扣然后获得的这个收益。Return 可以定义为奖励的逐步叠加,然后这里有一个叠加系数,就是越往后得到的奖励,折扣得越多。这说明我们其实更希望得到现有的奖励,未来的奖励就要把它打折扣。
* 当我们有了这个 return 过后,就可以正式定义一个状态的价值了,就是 `state value function`。然后对于这个MRP它里面定义成是关于这个 return 的期望, $G_t$ 是我们之前定义的 `discounted return`。然后我们这里取了一个期望,期望就是说从这个状态开始,你有可能获得多大的价值。所以这个期望也可以看成是一个对未来可能获得奖励的它的当前价值的一个表现。就是当你进入某一个状态过后,你现在就有多大的价值。
* `Horizon` 说明了同一个 episode 或者是整个一个轨迹的长度,它是由有限个步数决定的。
![](img/2.10.png)**这里我们解释一下为什么需要 discount factor。**
* `Return` 说的是我们把奖励进行折扣然后获得的这个收益。Return 可以定义为奖励的逐步叠加,如下式所示:
$$
G_{t}=R_{t+1}+\gamma R_{t+2}+\gamma^{2} R_{t+3}+\gamma^{3} R_{t+4}+\ldots+\gamma^{T-t-1} R_{T}
$$
这里有一个叠加系数,越往后得到的奖励,折扣得越多。这说明我们其实更希望得到现有的奖励,未来的奖励就要把它打折扣。
* 当我们有了这个 return 过后,就可以正式定义一个状态的价值了,就是 `state value function`。然后对于这个 MRP它里面定义成是关于这个 return 的期望,如下式所示:
$$
\begin{aligned}
V_{t}(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+\gamma^{T-t-1} R_{T} \mid s_{t}=s\right]
\end{aligned}
$$
$G_t$ 是我们之前定义的 `discounted return`,我们这里取了一个期望,期望就是说从这个状态开始,你有可能获得多大的价值。所以这个期望也可以看成是一个对未来可能获得奖励的它的当前价值的一个表现。就是当你进入某一个状态过后,你现在就有多大的价值。
### Why Discount Factor
![](img/2.10.png)**这里解释一下为什么需要 discount factor。**
* 有些马尔可夫过程是带环的,它并没有终结,我们想避免这个无穷的奖励。
* 我们并没有建立一个完美的模拟环境的模型,也就是说,我们对未来的评估不一定是准确的,我们不一定完全信任我们的模型,因为这种不确定性,所以我们对未来的预估增加一个折扣。我们想把这个不确定性表示出来,希望尽可能快地得到奖励,而不是在未来某一个点得到奖励。
@@ -74,7 +115,7 @@
* 在人的行为里面来说的话,大家也是想得到即时奖励。
* 有些时候可以把这个系数设为 0设为 0 过后,我们就只关注了它当前的奖励。我们也可以把它设为 1设为 1 的话就是对未来并没有折扣,未来获得的奖励跟当前获得的奖励是一样的。
这个系数其实可以作为强化学习 agent 的一个 hyperparameter 来进行调整,然后就会得到不同行为的 agent。
这个系数可以作为强化学习 agent 的一个 hyperparameter 来进行调整,然后就会得到不同行为的 agent。
![](img/2.11.png)
@@ -92,10 +133,14 @@
这里就引出了一个问题,当我们有了一些轨迹的实际 return怎么计算它的价值函数。比如说我们想知道 $s_4$ 状态的价值,就是当你进入 $s_4$ 后,它的价值到底如何。一个可行的做法就是说我们可以产生很多轨迹,然后把这里的轨迹都叠加起来。比如我们可以从 $s_4$ 开始,采样生成很多轨迹,都把它的 return 计算出来,然后可以直接把它取一个平均作为你进入 $s_4$ 它的价值。这其实是一种计算价值函数的办法,通过这个蒙特卡罗采样的办法计算 $s_4$ 的状态。接下来会进一步介绍蒙特卡罗算法。
### Bellman Equation
![](img/2.12.png)
但是这里我们采取了另外一种计算方法,我们通过一定的推导就可以从这个价值函数里面推导出 `Bellman Equation贝尔曼等式`。**Bellman Equation 定义了当前状态跟未来状态之间的这个关系**。
但是这里我们采取了另外一种计算方法,我们通过一定的推导就可以从这个价值函数里面推导出 `Bellman Equation贝尔曼等式`,如下式所示:
$$
V(s)=\underbrace{R(s)}_{\text {Immediate reward }}+\underbrace{\gamma \sum_{s^{\prime} \in S} P\left(s^{\prime} \mid s\right) V\left(s^{\prime}\right)}_{\text {Discounted sum of future reward }}
$$
其中:
* $s'$ 可以看成未来的所有状态。
@@ -103,6 +148,8 @@
* 第二部分可以看成是一个 Discounted sum of future reward。
* $V(s')$ 代表的是未来某一个状态的价值。我们从当前这个位置开始,有一定的概率去到未来的所有状态,所以我们要把这个概率也写上去,这个转移矩阵也写上去,然后我们就得到了未来状态,然后再乘以一个 $\gamma$,这样就可以把未来的奖励打折扣。
**Bellman Equation 定义了当前状态跟未来状态之间的这个关系。**
未来打了折扣的奖励加上当前立刻可以得到的奖励,就组成了这个 Bellman Equation。Bellman Equation 的推导过程如下:
$$
\begin{aligned}
@@ -134,7 +181,9 @@ $$
$$
V=(I-\gamma P)^{-1} R
$$
我们可以通过矩阵求逆的过程把这个 V 的这个价值直接求出来。但是一个问题是这个矩阵求逆的过程的复杂度是 $O(N^3)$。所以当状态非常多的时候,比如说从十个状态到一千个状态,到一百万个状态。那么当我们有一百万个状态的时候,这个转移矩阵就会是个一百万乘以一百万的矩阵,这样一个大矩阵的话求逆是非常困难的,所以这种通过解析解去解,只能对于很小量的 MRP。
我们可以通过矩阵求逆把这个 V 的这个价值直接求出来。但是一个问题是这个矩阵求逆的过程的复杂度是 $O(N^3)$。所以当状态非常多的时候,比如说从十个状态到一千个状态,到一百万个状态。那么当我们有一百万个状态的时候,这个转移矩阵就会是个一百万乘以一百万的矩阵,这样一个大矩阵的话求逆是非常困难的,所以这种通过解析解去求解的方法只适用于很小量的 MRP。
### Iterative Algorithm for Computing Value of a MRP
![](img/2.15.png)
@@ -148,7 +197,7 @@ $$
![](img/2.16.png)
**首先我们用蒙特卡罗的办法来计算它的价值函数。**蒙特卡罗就跟我们之前采用的这个方法很类似,就说我们当得到一个 MRP 过后,我们可以从某一个状态开始,把这个小船放进去,让它随波逐流,这样就会产生一个轨迹。产生了一个轨迹过后,就会得到一个奖励,那么就直接把它的 discounted 的奖励 $g$ 算出来。算出来过后就可以把它积累起来,得到 return $G_t$。 当积累到一定的轨迹数量过后,直接用 $G_t$ 除以轨迹数量,就会得到它的价值。
**首先我们用蒙特卡罗(Monte Carlo)的办法来计算它的价值函数。**蒙特卡罗就跟我们之前采用的这个方法很类似,就说我们当得到一个 MRP 过后,我们可以从某一个状态开始,把这个小船放进去,让它随波逐流,这样就会产生一个轨迹。产生了一个轨迹过后,就会得到一个奖励,那么就直接把它的 discounted 的奖励 $g$ 算出来。算出来过后就可以把它积累起来,得到 return $G_t$。 当积累到一定的轨迹数量过后,直接用 $G_t$ 除以轨迹数量,就会得到它的价值。
比如说我们要算 $s_4$ 状态的一个价值。我们就可以从 $s_4$ 状态开始,随机产生很多轨迹,就产生很多小船,然后扔到这个转移矩阵里面去,然后它就会随波逐流,产生轨迹。每个轨迹,我们可以算到它的这个 return。每个轨迹都会得到一个 return让我们得到大量的 return 。比如说一百个、一千个的 return ,然后直接取一个平均,那么就可以等价于现在 $s_4$ 这个价值,因为 $s_4$ 的价值 $V(s_4)$ 定义了你未来可能得到多少的奖励。这就是蒙特卡罗采样的方法。
@@ -158,18 +207,32 @@ $$
## Markov Decision Process(MDP)
### MDP
![](img/2.18.png)
**相对于 MRP`马尔可夫决策过程(Markov Decision Process)`多了一个 `decision`,其它的定义跟 MRP 都是类似的。**这里我们多了一个决策,多了一个 action ,那么这个状态转移也多了一个 condition就是你采取某一种行为然后你未来的状态会不同。它不仅是依赖于你当前的状态也依赖于在当前状态你这个 agent 它采取的这个行为会决定它未来的这个状态走向。对于这个价值函数,它也是多了一个条件,多了一个你当前的这个行为,就是说你当前的状态以及你采取的行为会决定你在当前可能得到的奖励多少。
**相对于 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]$。你当前的状态以及你采取的行为会决定你在当前可能得到的奖励多少。
### Policy in MDP
![](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)
**这里说明了 MDP 跟 MRP 的之间的一个转换。**已知一个 MDP 和一个 policy $\pi$ 的时候,我们可以把 MDP 转换成 MRP。在 MDP 里面,转移函数 $P(s'|s,a)$ 是基于它当前状态以及它当前的 action。因为我们现在已知它 policy function就是说在每一个状态我们知道它可能采取的行为的概率那么就可以直接把这个 action 进行加和,直接把这个 a 去掉,那我们就可以得到对于 MRP 的一个转移,这里就没有 action。对于这个奖励函数我们也可以把 action 拿掉,这样就会得到一个类似于 MRP 的奖励函数。
### Comparison of MP/MRP and MDP
![](img/2.21.png)
@@ -179,34 +242,95 @@ $$
* 马尔可夫过程的转移是直接就决定。比如当前状态是 s那么就直接通过这个转移概率决定了下一个状态是什么。
* 但对于 MDP它的中间多了一层这个行为 a ,就是说在你当前这个状态的时候,首先要决定的是采取某一种行为,那么你会到了某一个黑色的节点。到了这个黑色的节点,因为你有一定的不确定性,当你当前状态决定过后以及你当前采取的行为过后,你到未来的状态其实也是一个概率分布。**所以在这个当前状态跟未来状态转移过程中这里多了一层决策性,这是 MDP 跟之前的马尔可夫过程很不同的一个地方。**在马尔可夫决策过程中,行为是由 agent 决定,所以多了一个 componentagent 会采取行为来决定未来的状态转移。
### Value function for MDP
![](img/2.22.png)
* 顺着 MDP 的定义,我们可以把 `state-value function`,就是在 MDP 里面的价值函数也进行一个定义,它的定义是跟 MRP 是类似的,但是这里 expectation over policy就是这个期望是基于你采取的这个 policy ,就当你的 policy 决定过后,**我们通过对这个 policy 进行采样来得到一个期望,那么就可以计算出它的这个价值函数。**
顺着 MDP 的定义,我们可以把 `状态-价值函数(state-value function)`,就是在 MDP 里面的价值函数也进行一个定义,它的定义是跟 MRP 是类似的,如式 (3) 所示:
$$
v^{\pi}(s)=\mathbb{E}_{\pi}\left[G_{t} \mid s_{t}=s\right] \tag{3}
$$
但是这里 expectation over policy就是这个期望是基于你采取的这个 policy ,就当你的 policy 决定过后,**我们通过对这个 policy 进行采样来得到一个期望,那么就可以计算出它的这个价值函数。**
* 这里我们另外引入了一个 `Q 函数(action-value function)`。**这个 Q 函数定义的是在某一个状态采取某一个行为,然后它有可能得到的这个 return 的一个期望**。这里期望其实也是 over policy function。所以你需要对这个 policy function 进行一个加和,然后最后得到它的这个价值。
* 对 Q 函数中的行为函数进行加和,就可以得到价值函数。
这里我们另外引入了一个 `Q 函数(action-value function)`。**Q 函数定义的是在某一个状态采取某一个行为,它有可能得到的这个 return 的一个期望**,如式 (4) 所示:
$$
q^{\pi}(s, a)=\mathbb{E}_{\pi}\left[G_{t} \mid s_{t}=s, A_{t}=a\right] \tag{4}
$$
这里期望其实也是 over policy function。所以你需要对这个 policy function 进行一个加和,然后得到它的这个价值。
**对 Q 函数中的行为函数进行加和,就可以得到价值函数**,如式 (5) 所示:
$$
v^{\pi}(s)=\sum_{a \in A} \pi(a \mid s) q^{\pi}(s, a) \tag{5}
$$
### Bellman Expectation Equation
![](img/2.23.png)
通过对状态-价值函数进行一个分解,我们就可以得到一个类似于之前 MRP 的 Bellman Equation这里叫 `Bellman Expectation Equation`
对于 Q 函数,我们也可以做类似的分解,也可以得到对于 Q 函数的 Bellman Expectation Equation。
通过对状态-价值函数进行一个分解,我们就可以得到一个类似于之前 MRP 的 Bellman Equation这里叫 `Bellman Expectation Equation`,如式 (6) 所示:
$$
v^{\pi}(s)=E_{\pi}\left[R_{t+1}+\gamma v^{\pi}\left(s_{t+1}\right) \mid s_{t}=s\right] \tag{6}
$$
对于 Q 函数,我们也可以做类似的分解,也可以得到对于 Q 函数的 Bellman Expectation Equation如式 (7) 所示:
$$
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 定义了你当前状态跟未来状态之间的一个关联。**
![](img/2.24.png)
那我们进一步进行一个简单的分解。等式 8 和等式 9 代表了价值函数跟 Q 函数之间的一个关联。我们把等式 8 插入到等式 9就可以得到等式 11它象征了你当前时刻的 Q 函数跟未来时刻的 Q 函数之间的一个关联。也可以把等式 9 插入等式 8 中,得到等式 10。等式 10 代表了当前状态的价值跟未来状态价值之间的一个关联。
那我们进一步进行一个简单的分解。我们先给出等式 (8)
$$
v^{\pi}(s)=\sum_{a \in A} \pi(a \mid s) q^{\pi}(s, a) \tag{8}
$$
再给出等式 (9)
$$
q^{\pi}(s, a)=R_{s}^{a}+\gamma \sum_{s^{\prime} \in S} P\left(s^{\prime} \mid s, a\right) v^{\pi}\left(s^{\prime}\right) \tag{9}
$$
等式 (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) 代表了当前状态的价值跟未来状态价值之间的一个关联。**
### Backup Diagram
![](img/2.25.png)
这里有一个概念叫 `Backup`。Backup 类似于 bootstrapping 之间这个迭代关系,就对于某一个状态,它的当前这个价值是跟它未来价值线性相关的。你可以看到我们这里有两层加和。第一层加和就是这个叶子节点,然后往上走一层的话,我们就可以把未来的这个价值 $s'$ backup 到黑色的节点。然后再有一层加和,第二层加和,这个加和是把 action 进行加和。得到黑色节点的价值过后,再往上 backup 一层,然后就会推到根节点的价值,根节点就是我们当前状态。所以 `Backup Diagram` **定义了你未来下一时刻的状态跟你上一时刻的状态之间的一个关联。**
这里有一个概念叫 `Backup`。Backup 类似于 bootstrapping 之间这个迭代关系,就对于某一个状态,它的当前这个价值是跟它未来价值线性相关的。
$$
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{12}
$$
如式 (12) 所示,你可以看到我们这里有两层加和:
* 第一层加和就是这个叶子节点,然后往上走一层的话,我们就可以把未来的这个价值 $s'$ backup 到黑色的节点。
* 第二层加和是把 action 进行加和。
得到黑色节点的价值过后,再往上 backup 一层,然后就会推到根节点的价值,根节点就是我们当前状态。**所以 `Backup Diagram` 定义了你未来下一时刻的状态跟你上一时刻的状态之间的一个关联。**
![](img/2.26.png)
同样对于 Q 函数,我们也可以进行这样的一个推导,就现在的根节点是这个 Q 函数的一个节点。这个 Q 函数是对于黑色的这个节点。我们下一时刻的这个 Q 函数是叶子节点,有四个黑色结点。那么我们这里也有两个加和。
$$
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{13}
$$
如式 (13) 所示,
第一层加和是先把这个叶子节点从黑节点推到这个白色的这个节点,进了它的这个状态,就当我们到达某一个状态过后,这个白色极点,然后再进行一个加和,这样就把它重新推回到当前节点的一个 Q 函数,所以这个等式就决定了未来 Q 函数跟当前 Q 函数之间的这个关联
* 第一层加和是先把这个叶子节点从黑节点推到这个白色的这个节点,进了它的这个状态。
* 当我们到达某一个状态过后,这个白色极点,然后再进行一个加和,这样就把它重新推回到当前节点的一个 Q 函数。
**所以这个等式就决定了未来 Q 函数跟当前 Q 函数之间的这个关联。**
### Policy Evaluation
![](img/2.27.png)
@@ -235,6 +359,8 @@ $$
另外一个练习的例子,就是说我们现在采取的 policy 在每个状态,我们有 0.5 的概率往左走,有 0.5 的概率往右走,那么放到这个状态里面去如何计算。其实也是把这个 Bellman Expectation Equation 拿出来,然后进行迭代就可以算出来了,就当我们开始的时候,我们可以初始化。初始化这个不同的 $v(s')$ 都会有一个值,那么放到这个里面去迭代,最后它的 $v$ ,然后就会算出来。
### Prediction and Control
![](img/2.31.png)
MDP 的 `prediction``control` 是 MDP 里面的核心问题。
@@ -265,11 +391,15 @@ MDP 的 `prediction` 和 `control` 是 MDP 里面的核心问题。
![](img/2.32.png)
首先我们来看一下`动态规划`。动态规划是说我们把可以把一个问题分解成一个最佳子结构,当我们可以把一些子结构都可以解决的话,那么它就可以组成一个最优的解。MDP是满足动态规划的要求的就是在 Bellman Equation 里面,我们可以把它分解成一个递归的一个结构。当我们把它分解成一个递归的结构的时候,如果我们的子问题子状态能得到一个值,那么它的未来状态因为跟子状态是直接相连的,那我们也可以继续推算出来,所以这个价值函数就可以储存它以及重用它的最佳的解。**所以动态规划是解 MDP prediction 和 control 一个非常有效的方式。**
首先我们来看一下`动态规划`。动态规划是说我们把可以把一个问题分解成一个最佳子结构,当我们可以把一些子结构都可以解决的话,那么它就可以组成一个最优的解。
MDP是满足动态规划的要求的就是在 Bellman Equation 里面,我们可以把它分解成一个递归的一个结构。当我们把它分解成一个递归的结构的时候,如果我们的子问题子状态能得到一个值,那么它的未来状态因为跟子状态是直接相连的,那我们也可以继续推算出来,所以这个价值函数就可以储存它以及重用它的最佳的解。**所以动态规划是解 MDP prediction 和 control 一个非常有效的方式。**
### Policy evaluation on MDP
![](img/2.33.png)
**首先看一下 policy evaluation。Policy evaluation 就是当给定一个 MDP 的时候,我们有一个事先定好的 policy。那么我们可以获得多少的价值。**就对于当前这个策略,我们可以得到多大的这个 value function。这里一个方法是说我们直接把这个 Bellman Expectation Backup这个等式拿出来变成一个迭代的过程这样反复迭代直到收敛。这样就可以计算它的一个过程。这个迭代过程是可以看作是 `synchronous backup` 的一个过程。等式 14 说的就是这个 Bellman Expectation Backup我们把这个转换成一个动态规划的迭代。当我们得到上一时刻的 $v_t$ 的时候,那我们下一时刻就通过这个递归的一个关系,我们可以推出下一时刻的这个值,那么反复去迭代它,最后它的值就是从 $v_1,v_2$ 到最后收敛过后这个值。这个值就是我们当前给定的 policy 对应的价值函数。
**首先看一下 policy evaluation。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)
@@ -313,7 +443,19 @@ $$
![](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 的定义如下式所示:
$$
v^{*}(s)=\max _{\pi} v^{\pi}(s)
$$
Optimal Value Function 是说,我们去搜索一种 policy $\pi$ ,然后我们会得到每个状态它的状态值最大的一个情况,$v^*$ 就是到达每一个状态,它的值的极大化情况。
在这种极大化情况上面,我们得到的策略就可以说它是最佳策略(optimal policy),如下式所示:
$$
\pi^{*}(s)=\underset{\pi}{\arg \max } v^{\pi}(s)
$$
Optimal policy 使得每个状态,它的状态函数都取得最大值。所以当我们说某一个 MDP 的环境被解了过后,就是说我们可以得到一个 optimal value function然后我们就说它被解了。在这种情况下面然后我们它的最佳的价值函数是一致的就它达到了这个 upper bound它的值是一致的但是这里可能有多个最佳的 policy多个 policy 可以取得相同的最佳价值。
### Finding Optimal Policy
![](img/2.42.png)
@@ -321,25 +463,39 @@ $$
![](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)
所以我们在寻找这个最佳策略的过程就是 MDP 的控制过程MDP Control 说的就是怎么去寻找一个最佳的策略,然后我们可以得到一个最大的价值函数。对于一个事先定好的 MDP 过程,当这个 agent 去采取策略的时候,我们可以说它这个最佳策略一般都是确定的。而且它是 stationary它不会随着时间的变化。但是不一定是 unique多种行为然后都会取得相同的这个这个价值。
**寻找这个最佳策略的过程就是 MDP 的控制过程**MDP Control 说的就是怎么去寻找一个最佳的策略,然后我们可以得到一个最大的价值函数,如下式所示:
$$
\pi^{*}(s)=\underset{\pi}{\arg \max } v^{\pi}(s)
$$
对于一个事先定好的 MDP 过程,当这个 agent 去采取最佳策略的时候,
* 我们可以说最佳策略一般都是确定的。
* 而且是 stationary它不会随着时间的变化。
* 但是不一定是 unique多种行为可能会取得相同的这个价值。
### Policy Iteration
![](img/2.45.png)
首先我们来看一下 policy iteration。policy iteration 是一个迭代算法它主要由两个步骤组成
**Policy iteration 是一个迭代算法它主要由两个步骤组成policy evaluation 和 policy improvement。**
* **第一个步骤是 policy evaluation**就跟我们之前说的这个评价一个已有的这个价值函数的价值是一致的,就是我们当前我们在优化这个 policy $\pi$ ,所以在优化过程中得到一个最新的这个 policy 。让我们先保证这个 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 函数的极大化 ,这样就逐渐迭代,然后就会得到收敛。
* **第一个步骤是 policy evaluation**,当前我们在优化这个 policy $\pi$ ,所以在优化过程中得到一个最新的 policy我们先保证这个 policy 不变,然后去估计它出来的这个价值。给定当前的 policy function估计这个 v 函数。
* v 函数过后,我们可以进一步推算出它的 Q 函数。得到 Q 函数过后,我们直接在 Q 函数上面取极大化,**这样我们就有了第二步骤:policy improvement。**通过在这个 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 最大化的那个动作。
### Bellman Optimality Equation
![](img/2.47.png)
@@ -355,7 +511,7 @@ $$
$$
v^{\pi}(s)=\max _{a \in \mathcal{A}} q^{\pi}(s, a)
$$
上式被称为 `Bellman Optimality Equation`。**这个 Bellman Optimality Equation 满足的时候,是说整个 MDP 已经到达最佳的状态。**它到达最佳状态过后,对于我们这个 Q 函,取它最大的 action 时候的那个值,就是直接等于它的最佳的这个 value function。只有当整个状态已经收敛过后得到一个最佳的 policy 的时候,这个条件才是满足的。
上式被称为 `Bellman Optimality Equation`。**这个 Bellman Optimality Equation 满足的时候,是说整个 MDP 已经到达最佳的状态。**它到达最佳状态过后,对于这个 Q 函,取它最大的 action 时候的那个值,就是直接等于它的最佳的这个 value function。只有当整个状态已经收敛过后得到一个最佳的 policy 的时候,这个条件才是满足的。
![](img/2.49.png)
@@ -368,23 +524,30 @@ $$
q^{*}(s, a)=R(s, a)+\gamma \sum_{s^{\prime} \in S} P\left(s^{\prime} \mid s, a\right) \max _{a^{\prime}} q^{*}\left(s^{\prime}, a^{\prime}\right)
$$
### Value Iteration
![](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 来进行**如下式所示:
$$
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)
$$
之前我们是说上面这个等式只有当整个状态已经到达最佳状态的时候,然后才满足。但这里可以把它转换成一个 backup 的等式。 Backup 就是说一个迭代的等式,我们不停地去迭代 Bellman Optimality Equation到了最后它能逐渐趋向于最佳的策略这是 value iteration 算法的精髓。我们去为了得到最佳的 $v^*$ ,对于每个状态的 $v^*$ 这个值,我们直接把这个 Bellman Optimality Equation 进行迭代,迭代了很多次之后,它就会收敛。
![](img/2.51.png)
* Value iteration 算法的目的是为了得到一个最佳的策略。
* 我们使用 value iteration 算法是为了得到一个最佳的策略。
* 一个解法是直接把这个 `Bellman Optimality backup`,把它这个等式拿进来进行迭代,迭代很多次,收敛过后得到的那个值就是它的最佳的那个值。
* 所以这个算法开始的时候,它是先把所有值初始化,通过每一个状态,然后它会进行这个迭代。把等式 22 插到等式 23 里面,就是 Bellman Optimallity backup 的那个等式。有了这个等式过后,然后进行不停地迭代,迭代过后,然后收敛。然后就会得到这个 $v^*$ 。当我们有这个 $v^*$ 过后,一个问题是如何进一步推算出它的最佳策略。
* 所以这个算法开始的时候,它是先把所有值初始化,通过每一个状态,然后它会进行这个迭代。把等式 (22) 插到等式 (23) 里面,就是 Bellman Optimallity backup 的那个等式。有了这个等式过后,然后进行不停地迭代,迭代过后,然后收敛。然后就会得到这个 $v^*$ 。当我们有这个 $v^*$ 过后,一个问题是如何进一步推算出它的最佳策略。
* 最佳策略的话,我们可以直接用 arg max就先把它的 Q 函数重构出来,重构出来过后,每一个列对应的最大的那个 action 就是它现在的最佳策略。这样就可以把最佳策略从最佳价值函数里面推导出来。
![](img/2.52.png)
上图是一个可视化的过程。在一个 grid world 中,不管你在哪一个位置开始,我们都希望能够到 goal 的这个点,左上角的那个点。因为它是一个迭代过程,然后这里可视化了从 $v_1$ 到 $v_7$ 每一个状态的值的变化,它的这个值逐渐在变化。而且因为它每走一步,就会得到一个负的值,所以它需要尽快地到达左上角,可以发现离它越远的那个值就越大。$v_7$ 收敛过后,右下角那个值是 -6也就相当于它要走六步才能到达最上面那个值。而且离这个目的地越近它的价值越大。
### Difference between Policy Iteration and Value Iteration
![](img/2.53.png)
![](img/2.54.png)
@@ -432,9 +595,10 @@ $$
我们再来对比下 policy iteration 和 value iteration这两个算法都可以解 MDP 的控制问题。
* Policy iteration 由两部分组成policy evaluation 和 policy improvement。它很清楚地把这个过程分成了两步,首先对当前已经搜索到的策略函数,然后对它进行一个估值得到估值过后,把 Q 函数算出来,我们进一步进行改进。
* Policy iteration 由两部分组成policy evaluation 和 policy improvement。Policy Iteration 分两步,首先对当前已经搜索到的策略函进行一个估值得到估值过后,把 Q 函数算出来,我们进一步进行改进。
* Value iteration 直接把 Bellman Optimality Equation 拿进来,然后直接去寻找最佳的 value function没有 policy function 在这里面,当算出 optimal value function 过后,我们可以在最后再执行一步这个提取过程,最佳策略提取过程。这样就可以把它的最佳策略抽取过来。
* 但对于 value iteration 的话,它是直接把 Bellman Optimality Equation 拿进来,然后直接去寻找最佳的 value function没有 policy function 在这里面,当我们把这个 optimal value function 算出来过后,那我们可以在最后再执行一步这个提取过程,最佳策略提取过程。这样就可以把它的最佳策略抽取过来。
### Summary for Prediction and Contro in MDP
![](img/2.65.png)

View File

@@ -4,22 +4,22 @@
![](img/6.1.png)
Q-learning 是 `value-based` 的方法。在 value based 的方法里面,我们 learn 的不是 policy我们要 learn 的是一个 `critic`。Critic 并不直接采取行为,它想要做的事情是评价现在的行为有多好或是有多不好。假设有一个 actor $\pi$ critic 的工作就是来评价这个 actor 的 policy $\pi$ 好还是不好,即 `Policy Evaluation(策略评估)`
**Q-learning 是 `value-based` 的方法。在 value based 的方法里面,我们 learn 的不是 policy我们要 learn 的是一个 `critic`。** Critic 并不直接采取行为,它想要做的事情是评价现在的行为有多好或是有多不好。假设有一个 actor $\pi$ critic 就是来评价这个 actor 的 policy $\pi$ 好还是不好,即 `Policy Evaluation(策略评估)`
> 注:李宏毅深度强化学习课程提到的 Q-learning其实是 DQN。
> 注:李宏毅深度强化学习课程提到的 Q-learning其实是 DQN。
>
> DQN 是指基于深度学习的 Q-learning 算法,主要结合了`价值函数近似(Value Function Approximation)`与神经网络技术,并采用了目标网络和经历回放的方法进行网络的训练。
>
> 在 Q-learning 中,我们使用表格来存储每个状态 s 下采取动作 a 获得的奖励,即状态-动作值函数 $Q(s,a)$。然而这种方法在状态量巨大甚至是连续的任务中会遇到维度灾难问题往往是不可行的。因此DQN 采用了价值函数近似的表示方法。
举例来说,有一种 critic 叫做 `state value function`。State value function 的意思就是说,假设 actor 叫做 $\pi$,拿 $\pi$ 跟环境去做互动。假设 $\pi$ 看到了某一个state s如果在玩 Atari 游戏的话state s 是某一个画面,看到某一个画面的时候,接下来一直玩到游戏结束,累积的 reward 的期望值有多大。所以 $V^{\pi}$ 是一个function这个 function input 一个 state然后它会 output 一个 scalar。这个 scalar 代表说,$\pi$ 这个 actor 看到 state s 的时候,接下来预期到游戏结束的时候,它可以得到多大的 value。
举例来说,有一种 critic 叫做 `state value function`。State value function 的意思就是说,假设 actor 叫做 $\pi$,拿 $\pi$ 跟环境去做互动。假设 $\pi$ 看到了某一个 state s如果在玩 Atari 游戏的话state s 是某一个画面,看到某一个画面的时候,接下来一直玩到游戏结束,累积的 reward 的期望值有多大。所以 $V^{\pi}$ 是一个 function这个 function input 一个 state然后它会 output 一个 scalar。这个 scalar 代表说,$\pi$ 这个 actor 看到 state s 的时候,接下来预期到游戏结束的时候,它可以得到多大的 value。
举个例子,假设你是玩 space invader 的话,
* 左边这个 state s这一个游戏画面你的 $V^{\pi}(s)$ 也许会很大,因为还有很多的怪可以杀, 所以你会得到很大的分数。一直到游戏结束的时候,你仍然有很多的分数可以吃。
* 右边那个case也许你得到的 $V^{\pi}(s)$ 就很小,因为剩下的怪也不多了,并且红色的防护罩已经消失了,所以可能很快就会死掉。所以接下来得到预期的 reward就不会太大。
这边需要强调的一个点是说,当你在讲这一个 critic 的时候,critic 都是绑一个 actor 的critic 没有办法去凭空去 evaluate 一个 state 的好坏,它所 evaluate 的东西是在给定某一个 state 的时候, 假设接下来互动的 actor 是 $\pi$,那我会得到多少 reward。因为就算是给同样的 state你接下来的 $\pi$ 不一样,你得到的 reward 也是不一样的。举例来说在左边那个case虽然假设是一个正常的 $\pi$,它可以杀很多怪,那假设他是一个很弱的 $\pi$,它就站在原地不动,然后马上就被射死了,那你得到的 V 还是很小。所以 critic output 值有多大其实是取决于两件事state 和 actor。所以你的 critic 其实都要绑一个 actor它是在衡量某一个 actor 的好坏,而不是 generally 衡量一个 state 的好坏。这边要强调一下critic output 是跟 actor 有关的state value 其实是 depend on 你的 actor。当你的 actor 变的时候state value function 的output 其实也是会跟着改变的。
这边需要强调的一个点是说critic 都是绑一个 actor 的critic 没有办法去凭空去 evaluate 一个 state 的好坏,它所 evaluate 的东西是在给定某一个 state 的时候, 假设接下来互动的 actor 是 $\pi$,那我会得到多少 reward。因为就算是给同样的 state你接下来的 $\pi$ 不一样,你得到的 reward 也是不一样的。举例来说,在左边那个 case虽然假设是一个正常的 $\pi$,它可以杀很多怪,那假设他是一个很弱的 $\pi$,它就站在原地不动,然后马上就被射死了,那你得到的 V 还是很小。所以 critic output 值有多大其实是取决于两件事state 和 actor。所以你的 critic 其实都要绑一个 actor它是在衡量某一个 actor 的好坏,而不是 generally 衡量一个 state 的好坏。这边要强调一下critic output 是跟 actor 有关的state value 其实是 depend on 你的 actor。当你的 actor 变的时候state value function 的 output 其实也是会跟着改变的。
### State-value Function Bellman Equation
@@ -37,9 +37,11 @@ $$
![](img/6.2.png)
怎么衡量这个 state value function $V^{\pi}(s)$ 呢?有两种不同的做法。一个是用` Monte-Carlo(MC) based` 的方法。MC based 的方法就是让 actor 去跟环境做互动,你要看 actor 好不好, 你就让 actor 去跟环境做互动,给 critic 看。然后critic 就统计说actor 如果看到 state $s_a$,接下来 accumulated reward 会有多大。如果它看到 state $s_b$接下来accumulated reward 会有多大。但是实际上你不可能把所有的state 通通都扫过。如果你是玩 Atari 游戏的话,你的 state 是 image 你没有办法把所有的state 通通扫过。所以实际上我们的 $V^{\pi}(s)$ 是一个 network。对一个 network 来说,就算是 input state 是从来都没有看过的,它也可以想办法估测一个 value 的值。
**怎么衡量这个 state value function $V^{\pi}(s)$ 呢?**有两种不同的做法。
怎么训练这个 network 呢?因为如果在 state $s_a$,接下来的 accumulated reward 就是 $G_a$。也就是说,对这个 value function 来说,如果 input 是 state $s_a$,正确的 output 应该是$G_a$。如果 input state $s_b$,正确的 output 应该是value $G_b$。所以在 training 的时候, 它就是一个 `regression problem`。Network 的 output 就是一个 value你希望在 input $s_a$ 的时候output value 跟 $G_a$ 越近越好input $s_b$ 的时候output value 跟 $G_b$ 越近越好。接下来把 network train 下去就结束了。这是第一个方法MC based 的方法
一个是用` Monte-Carlo(MC) based` 的方法。MC based 的方法就是让 actor 去跟环境做互动,你要看 actor 好不好, 你就让 actor 去跟环境做互动,给 critic 看。然后critic 就统计说actor 如果看到 state $s_a$,接下来 accumulated reward 会有多大。如果它看到 state $s_b$接下来accumulated reward 会有多大。但是实际上,你不可能把所有的 state 通通都扫过。如果你是玩 Atari 游戏的话,你的 state 是 image ,你没有办法把所有的 state 通通扫过。所以实际上我们的 $V^{\pi}(s)$ 是一个 network。对一个 network 来说,就算是 input state 是从来都没有看过的,它也可以想办法估测一个 value 的值
怎么训练这个 network 呢?因为如果在 state $s_a$,接下来的 accumulated reward 就是 $G_a$。也就是说,对这个 value function 来说,如果 input 是 state $s_a$,正确的 output 应该是 $G_a$。如果 input state $s_b$,正确的 output 应该是 value $G_b$。所以在 training 的时候, 它就是一个 `regression problem`。Network 的 output 就是一个 value你希望在 input $s_a$ 的时候output value 跟 $G_a$ 越近越好input $s_b$ 的时候output value 跟 $G_b$ 越近越好。接下来把 network train 下去就结束了。这是第一个方法MC based 的方法。
![](img/6.3.png)
@@ -54,44 +56,44 @@ $$
![](img/6.4.png)
MC 跟 TD 有什么样的差别呢?**MC 最大的问题就是 variance 很大**。因为我们在玩游戏的时候,它本身是有随机性的。所以你可以把 $G_a$ 看成一个 random variable。因为你每次同样走到 $s_a$ 的时候,最后你得到的 $G_a$ 其实是不一样的。你看到同样的state $s_a$,最后玩到游戏结束的时候,因为游戏本身是有随机性的,玩游戏的 model 搞不好也有随机性,所以你每次得到的 $G_a$ 是不一样的,每一次得到$G_a$ 的差别其实会很大。为什么它会很大呢?因为 $G_a$ 其实是很多个不同的 step 的 reward 的和。假设你每一个step 都会得到一个reward$G_a$ 是从 state $s_a$ 开始一直玩到游戏结束每一个timestamp reward 的和。
MC 跟 TD 有什么样的差别呢?**MC 最大的问题就是 variance 很大**。因为我们在玩游戏的时候,它本身是有随机性的。所以你可以把 $G_a$ 看成一个 random variable。因为你每次同样走到 $s_a$ 的时候,最后你得到的 $G_a$ 其实是不一样的。你看到同样的 state $s_a$,最后玩到游戏结束的时候,因为游戏本身是有随机性的,玩游戏的 model 搞不好也有随机性,所以你每次得到的 $G_a$ 是不一样的,每一次得到 $G_a$ 的差别其实会很大。为什么它会很大呢?因为 $G_a$ 其实是很多个不同的 step 的 reward 的和。假设你每一个 step 都会得到一个 reward$G_a$ 是从 state $s_a$ 开始一直玩到游戏结束每一个timestamp reward 的和。
举例来说,我在右上角就列一个式子是说,
$$
\operatorname{Var}[k X]=k^{2} \operatorname{Var}[X]
$$
Var 是指 variance。
通过这个式子,我们知道 $G_a$ 的 variance 相较于某一个 state 的 reward它会是比较大的$G_a$ 的variance 是比较大的。
Var 是指 variance。
通过这个式子,我们知道 $G_a$ 的 variance 相较于某一个 state 的 reward它会是比较大的$G_a$ 的 variance 是比较大的。
如果用 TD 的话,你是要去 minimize 这样的一个式子:
![](img/6.5.png)
在这中间会有随机性的是 r。因为计算你在 $s_t$ 采取同一个 action你得到的 reward 也不一定是一样的,所以 r 是一个 random variable。但这个 random variable 的 variance 会比 $G_a$ 还要小,因为 $G_a$ 是很多 r 合起来,这边只是某一个 r 而已。$G_a$ 的 variance 会比较大r 的 variance 会比较小。但是这边你会遇到的**一个问题是你这个 V 不一定估得准**。假设你的这个 V 估得是不准的,那你 apply 这个式子 learn 出来的结果,其实也会是不准的。所以 MC 跟 TD各有优劣。**今天其实 TD 的方法是比较常见的MC 的方法其实是比较少用的。**
在这中间会有随机性的是 r。因为计算你在 $s_t$ 采取同一个 action你得到的 reward 也不一定是一样的,所以 r 是一个 random variable。但这个 random variable 的 variance 会比 $G_a$ 还要小,因为 $G_a$ 是很多 r 合起来,这边只是某一个 r 而已。$G_a$ 的 variance 会比较大r 的 variance 会比较小。但是这边你会遇到的**一个问题是你这个 V 不一定估得准**。假设你的这个 V 估得是不准的,那你 apply 这个式子 learn 出来的结果,其实也会是不准的。所以 MC 跟 TD 各有优劣。**今天其实 TD 的方法是比较常见的MC 的方法其实是比较少用的。**
![](img/6.6.png)
上图是讲 TD 跟 MC 的差异。假设有某一个 critic它去观察某一个 policy $\pi$ 跟环境互动的 8 个 episode 的结果。有一个actor $\pi$ 跟环境互动了8 次得到了8 次玩游戏的结果。接下来这个 critic 去估测 state 的 value。
* 我们看看 $s_b$ 的 value 是多少。$s_b$ 这个state 在 8 场游戏里面都有经历过其中有6 场得到 reward 1有两场得到 reward 0所以如果你是要算期望值的话就看到 state $s_b$ 以后得到的 reward一直到游戏结束的时候得到的 accumulated reward 期望值是 3/4。
* 我们看看 $s_b$ 的 value 是多少。$s_b$ 这个state 在 8 场游戏里面都有经历过,其中有 6 场得到 reward 1有两场得到 reward 0所以如果你是要算期望值的话就看到 state $s_b$ 以后得到的 reward一直到游戏结束的时候得到的 accumulated reward 期望值是 3/4。
* 但 $s_a$ 期望的 reward 到底应该是多少呢?这边其实有两个可能的答案:一个是 0一个是 3/4。为什么有两个可能的答案呢这取决于你用MC 还是TD。用 MC 跟用 TD 算出来的结果是不一样的。
假如你用 MC 的话,你会发现这个$s_a$ 就出现一次,看到$s_a$ 这个state接下来 accumulated reward 就是 0。所以今天 $s_a$ expected reward 就是 0。
假如你用 MC 的话,你会发现这个 $s_a$ 就出现一次,看到 $s_a$ 这个 state接下来 accumulated reward 就是 0。所以今天 $s_a$ expected reward 就是 0。
但 TD 在计算的时候它要update 下面这个式子。
但 TD 在计算的时候,它要 update 下面这个式子。
$$
V^{\pi}\left(s_{a}\right)=V^{\pi}\left(s_{b}\right)+r
$$
因为我们在 state $s_a$ 得到 reward r=0 以后,跳到 state $s_b$。所以 state $s_b$ 的 reward 会等于 state $s_b$ 的 reward 加上在state $s_a$ 跳到 state $s_b$ 的时候可能得到的 reward r。而这个得到的 reward r 的值是 0$s_b$ expected reward 是3/4那$s_a$ 的reward 应该是3/4。
因为我们在 state $s_a$ 得到 reward r=0 以后,跳到 state $s_b$。所以 state $s_b$ 的 reward 会等于 state $s_b$ 的 reward 加上在state $s_a$ 跳到 state $s_b$ 的时候可能得到的 reward r。而这个得到的 reward r 的值是 0$s_b$ expected reward 是3/4那$s_a$ 的reward 应该是 3/4。
用 MC 跟 TD 估出来的结果,其实很有可能是不一样的。就算 critic 观察到一样的 training data它最后估出来的结果。也不见得会是一样。那为什么会这样呢你可能问说那一个比较对呢其实就都对。
因为在第一个 trajectory $s_a$ 得到 reward 0 以后,再跳到 $s_b$ 也得到 reward 0。这边有两个可能。
* 一个可能是$s_a$,它就是一个带 sign 的 state所以只要看到 $s_a$ 以后,$s_b$ 就会拿不到reward有可能$s_a$ 其实影响了$s_b$。如果是用 MC 的算法的话,它会把 $s_a$ 影响 $s_b$ 这件事考虑进去。所以看到 $s_a$ 以后,接下来 $s_b$ 就得不到 reward所以看到$s_a$ 以后期望的reward 是 0。
* 一个可能是 $s_a$,它就是一个带 sign 的 state所以只要看到 $s_a$ 以后,$s_b$ 就会拿不到 reward有可能 $s_a$ 其实影响了 $s_b$。如果是用 MC 的算法的话,它会把 $s_a$ 影响 $s_b$ 这件事考虑进去。所以看到 $s_a$ 以后,接下来 $s_b$ 就得不到 reward所以看到 $s_a$ 以后,期望的 reward 是 0。
* 另一个可能是,看到$s_a$ 以后, $s_b$ 的 reward 是0 这件事只是一个巧合,就并不是 $s_a$ 所造成,而是因为说 $s_b$ 有时候就是会得到 reward 0这只是单纯运气的问题。其实平常 $s_b$ 会得到 reward 期望值是 3/4跟 $s_a$ 是完全没有关系的。所以假设 $s_a$ 之后会跳到 $s_b$,那其实得到的 reward 按照 TD 来算应该是 3/4。
* 另一个可能是,看到 $s_a$ 以后, $s_b$ 的 reward 是 0 这件事只是一个巧合,就并不是 $s_a$ 所造成,而是因为说 $s_b$ 有时候就是会得到 reward 0这只是单纯运气的问题。其实平常 $s_b$ 会得到 reward 期望值是 3/4跟 $s_a$ 是完全没有关系的。所以假设 $s_a$ 之后会跳到 $s_b$,那其实得到的 reward 按照 TD 来算应该是 3/4。
所以不同的方法考虑了不同的假设,运算结果不同。
@@ -104,7 +106,7 @@ $$
* state value function 的 input 是一个 state它是根据 state 去计算出看到这个state 以后的 expected accumulated reward 是多少。
* state-action value function 的 input 是一个 state 跟 action 的 pair它的意思是说在某一个 state 采取某一个action假设我们都使用 actor $\pi$ ,得到的 accumulated reward 的期望值有多大。
Q-function 有一个需要注意的问题是,这个 actor $\pi$,在看到 state s 的时候,它采取的 action 不一定是 a。Q-function 假设在 state s 强制采取 action a。不管你现在考虑的这个 actor $\pi$ 它会不会采取 action a这不重要。在state s 强制采取 action a。接下来都用 actor $\pi$ 继续玩下去,就只有在 state s我们才强制一定要采取 action a接下来就进入自动模式让actor $\pi$ 继续玩下去,得到的 expected reward 才是$Q^{\pi}(s,a)$ 。
Q-function 有一个需要注意的问题是,这个 actor $\pi$,在看到 state s 的时候,它采取的 action 不一定是 a。Q-function 假设在 state s 强制采取 action a。不管你现在考虑的这个 actor $\pi$ 它会不会采取 action a这不重要。在state s 强制采取 action a。接下来都用 actor $\pi$ 继续玩下去,就只有在 state s我们才强制一定要采取 action a接下来就进入自动模式让actor $\pi$ 继续玩下去,得到的 expected reward 才是 $Q^{\pi}(s,a)$ 。
Q-function 有两种写法:
@@ -113,7 +115,7 @@ Q-function 有两种写法:
假设 action 是 discrete 的action 就只有3 个可能,往左往右或是开火。那这个 Q-function output 的3 个 values 就分别代表 a 是向左的时候的 Q valuea 是向右的时候的Q value还有 a 是开火的时候的 Q value。
那你要注意的事情是,上图右边的 function 只有discrete action 才能够使用。如果 action 是无法穷举的,你只能够用上图左边这个式子,不能够用右边这个式子。
那你要注意的事情是,上图右边的 function 只有 discrete action 才能够使用。如果 action 是无法穷举的,你只能够用上图左边这个式子,不能够用右边这个式子。
![](img/6.8.png)
@@ -121,7 +123,7 @@ Q-function 有两种写法:
* 假设是在第一个 state不管是采取哪个 action最后到游戏结束的时候得到的 expected reward 其实都差不多。因为球在这个地方就算是你向下接下来你其实应该还来的急救所以今天不管是采取哪一个action就差不了太多。
* 假设在第二个s tate这个乒乓球它已经反弹到很接近边缘的地方这个时候你采取向上你才能得到 positive reward才接的到球。如果你是站在原地不动或向下的话接下来你都会 miss 掉这个球。你得到的 reward 就会是负的。
* 假设在第二个 state这个乒乓球它已经反弹到很接近边缘的地方这个时候你采取向上你才能得到 positive reward才接的到球。如果你是站在原地不动或向下的话接下来你都会 miss 掉这个球。你得到的 reward 就会是负的。
* 假设在第三个 state球很近了所以就要向上。
@@ -133,7 +135,7 @@ Q-function 有两种写法:
虽然表面上我们 learn 一个 Q-function它只能拿来评估某一个 actor $\pi$ 的好坏,但只要有了这个 Q-function我们就可以做 reinforcement learning。有了这个 Q-function我们就可以决定要采取哪一个 action我们就可以进行`策略改进(Policy Improvement)`
它的大原则是这样,假设你有一个初始的 actor也许一开始很烂 随机的也没有关系。初始的 actor 叫做 $\pi$,这个 $\pi$ 跟环境互动,会 collect data。接下来你 learn 一个 $\pi$ 这个 actor 的 Q value你去衡量一下 $\pi$ 这个actor 在某一个 state 强制采取某一个 action接下来用 $\pi$ 这个 policy 会得到的 expected reward那用 TD 或 MC 也是可以的。你 learn 出一个 Q-function 以后,就保证你可以找到一个新的 policy $\pi'$ policy $\pi'$ 一定会比原来的 policy $\pi$ 还要好。那等一下会定义说,什么叫做好。所以这边神奇的地方是,假设你有一个 Q-function 和 某一个 policy $\pi$,你根据 policy $\pi$ learn 出 policy $\pi$ 的 Q-function接下来保证你可以找到一个新的 policy $\pi'$ ,它一定会比 $\pi$ 还要好,然后你用 $\pi'$ 取代 $\pi$,再去找它的 Q-function得到新的以后再去找一个更好的 policy。这样一直循环下去policy 就会越来越好。
它的大原则是这样,假设你有一个初始的 actor也许一开始很烂 随机的也没有关系。初始的 actor 叫做 $\pi$,这个 $\pi$ 跟环境互动,会 collect data。接下来你 learn 一个 $\pi$ 这个 actor 的 Q value你去衡量一下 $\pi$ 这个 actor 在某一个 state 强制采取某一个 action接下来用 $\pi$ 这个 policy 会得到的 expected reward那用 TD 或 MC 也是可以的。你 learn 出一个 Q-function 以后,就保证你可以找到一个新的 policy $\pi'$ policy $\pi'$ 一定会比原来的 policy $\pi$ 还要好。那等一下会定义说,什么叫做好。所以这边神奇的地方是,假设你有一个 Q-function 和 某一个 policy $\pi$,你根据 policy $\pi$ learn 出 policy $\pi$ 的 Q-function接下来保证你可以找到一个新的 policy $\pi'$ ,它一定会比 $\pi$ 还要好,然后你用 $\pi'$ 取代 $\pi$,再去找它的 Q-function得到新的以后再去找一个更好的 policy。这样一直循环下去policy 就会越来越好。
![](img/6.10.png)
上图就是讲我们刚才讲的到底是什么。
@@ -250,8 +252,6 @@ $$
在实现的时候,你会把左边的 Q-network update 好几次以后,再去用 update 过的 Q-network 替换这个 target network 。但它们两个不要一起动,它们两个一起动的话, 结果会很容易坏掉。一开始这两个 network 是一样的,然后在 train 的时候,你会把右边的 Q-network fix 住。你在做 gradient decent 的时候,只调左边这个 network 的参数那你可能update 100 次以后才把这个参数复制到右边的 network 去,把它盖过去。把它盖过去以后,你这个 target value 就变了。就好像说你本来在做一个 regression problem那你 train 后把这个 regression problem 的 loss 压下去以后,接下来你把这边的参数把它 copy 过去以后,你的 target 就变掉了,接下来就要重新再 train。
### Intuition
![](img/6.13.png)
@@ -268,7 +268,7 @@ $$
## Exploration
![](img/6.16.png)**第二个 tip 是`Exploration`。**当我们使用 Q-function 的时候policy 完全 depend on Q-function。给定某一个 state你就穷举所有的 a 看哪个 a 可以让 Q value 最大,它就是采取的 action。那其实这个跟 policy gradient 不一样,在做 policy gradient 的时候output 其实是 stochastic 的。我们 output 一个 action 的 distribution根据这个 action 的distribution 去做sample 所以在 policy gradient 里面,你每次采取的 action 是不一样的,是有随机性的。那像这种 Q-function 如果你采取的 action 总是固定的,会有什么问题呢?你会遇到的问题就是这不是一个好的收集 data 的方式。因为假设我们今天真的要估某一个 state你可以采取 action $a_{1}$, $a_{2}$, $a_{3}$。你要估测在某一个state 采取某一个 action 会得到的 Q value你一定要在那一个 state 采取过那一个 action才估得出它的 value。如果你没有在那个 state 采取过那个action你其实估不出那个 value 的。当然如果是用 deep 的network就你的 Q-function 其实是一个 network这种情形可能会没有那么严重。但是 in general 而言,假设 Q-function 是一个 table没有看过的 state-action pair它就是估不出值来。Network 也是会有一样的问题就是, 只是没有那么严重。所以今天假设你在某一个 stateaction $a_{1}$, $a_{2}$, $a_{3}$ 你都没有采取过,那你估出来的 $Q(s,a_{1})$, $Q(s,a_{2})$, $Q(s,a_{3})$ 的 value 可能都是一样的,就都是一个初始值,比如说 0
![](img/6.16.png)**第二个 tip 是`Exploration`。**当我们使用 Q-function 的时候policy 完全 depend on Q-function。给定某一个 state你就穷举所有的 a 看哪个 a 可以让 Q value 最大,它就是采取的 action。那其实这个跟 policy gradient 不一样,在做 policy gradient 的时候output 其实是 stochastic 的。我们 output 一个 action 的 distribution根据这个 action 的distribution 去做sample 所以在 policy gradient 里面,你每次采取的 action 是不一样的,是有随机性的。那像这种 Q-function 如果你采取的 action 总是固定的,会有什么问题呢?你会遇到的问题就是这不是一个好的收集 data 的方式。因为假设我们今天真的要估某一个 state你可以采取 action $a_{1}$, $a_{2}$, $a_{3}$。你要估测在某一个 state 采取某一个 action 会得到的 Q value你一定要在那一个 state 采取过那一个 action才估得出它的 value。如果你没有在那个 state 采取过那个action你其实估不出那个 value 的。当然如果是用 deep 的network就你的 Q-function 其实是一个 network这种情形可能会没有那么严重。但是 in general 而言,假设 Q-function 是一个 table没有看过的 state-action pair它就是估不出值来。Network 也是会有一样的问题就是, 只是没有那么严重。所以今天假设你在某一个 stateaction $a_{1}$, $a_{2}$, $a_{3}$ 你都没有采取过,那你估出来的 $Q(s,a_{1})$, $Q(s,a_{2})$, $Q(s,a_{3})$ 的 value 可能都是一样的,就都是一个初始值,比如说 0
$$
\begin{array}{l}
@@ -328,7 +328,7 @@ A没关系。这并不是因为过去的 $\pi$ 跟现在的 $\pi$ 很像,
$$
y=r_{i}+\max _{a} \hat{Q}\left(s_{i+1}, a\right)
$$
其中 a 就是让 $\hat{Q}$ 的值最大的 a。因为我们在 state $s_{i+1}$会采取的action a其实就是那个可以让 Q value 的值最大的那一个 a。接下来我们要update Q 的值,那就把它当作一个 regression problem。希望$Q(s_i,a_i)$ 跟你的target 越接近越好。然后假设已经 update 了某一个数量的次,比如说 C 次,设 C = 100 那你就把 $\hat{Q}$ 设成 Q这就是 DQN。
其中 a 就是让 $\hat{Q}$ 的值最大的 a。因为我们在 state $s_{i+1}$会采取的action a其实就是那个可以让 Q value 的值最大的那一个 a。接下来我们要 update Q 的值,那就把它当作一个 regression problem。希望 $Q(s_i,a_i)$ 跟你的 target 越接近越好。然后假设已经 update 了某一个数量的次,比如说 C 次,设 C = 100 那你就把 $\hat{Q}$ 设成 Q这就是 DQN。
Q: DQN 和 Q-learning 有什么不同?