fix some errors

This commit is contained in:
qiwang067
2020-07-08 20:20:02 +08:00
parent df13a454c8
commit 3d6e2c9f06
9 changed files with 69 additions and 44 deletions

View File

@@ -5,23 +5,35 @@
在 reinforcement learning 中有 3 个components一个`actor`,一个`environment`,一个`reward function`
让机器玩video game时actor 做的事情就是去操控游戏的摇杆, 比如说向左、向右、开火等操作environment 就是游戏的主机, 负责控制游戏的画面负责控制说,怪物要怎么移动, 你现在要看到什么画面等等。reward function就是当你做什么事情发生什么状况的时候你可以得到多少分数 比如说杀一只怪兽得到20分等等。
让机器玩 video game 时,
同样的概念用在围棋上也是一样的actor 就是alpha Go它要决定下哪一个位置environment 就是对手reward function 就是按照围棋的规则, 赢就是得一分输就是负一分等等。在reinforcement 里面environment 跟 reward function 不是你可以控制的environment 跟reward function 是在开始学习之前就已经事先给定的。你唯一能做的事情是调整你的actor调整你actor 里面的policy使得它可以得到最大的reward。这个actor 里面会有一个policy 这个policy 决定了actor 的行为, policy 就是给一个外界的输入然后它会输出actor 现在应该要执行的行为。
* actor 做的事情就是去操控游戏的摇杆, 比如说向左、向右、开火等操作;
* environment 就是游戏的主机, 负责控制游戏的画面负责控制说,怪物要怎么移动, 你现在要看到什么画面等等;
* reward function 就是当你做什么事情,发生什么状况的时候,你可以得到多少分数, 比如说杀一只怪兽得到20分等等。
同样的概念用在围棋上也是一样的,
* actor 就是 alpha Go它要决定下哪一个位置
* environment 就是对手;
* reward function 就是按照围棋的规则, 赢就是得一分,输就是负一分等等。
在 reinforcement learning 里面environment 跟 reward function 不是你可以控制的environment 跟 reward function 是在开始学习之前,就已经事先给定的。你唯一能做的事情是调整 actor 里面的 policy使得 actor 可以得到最大的 reward。Actor 里面会有一个 policy 这个policy 决定了actor 的行为, policy 就是给一个外界的输入,然后它会输出 actor 现在应该要执行的行为。
![](img/1.2.png)
Policy 一般写成 $\pi$。假设你是用 deep learning 的技术来做 reinforcement learning 的话,**policy 就是一个 network**network 里面就有一堆参数, 我们用 $\theta$ 来代表 $\pi$ 的参数。Network 的 input 就是现在 machine 看到的东西,如果让 machine 打电玩的话, 那 machine 看到的东西就是游戏的画面。让 machine 看到什么东西,会影响你现在 training 到底好不好 train。
**Policy 一般写成 $\pi$**。假设你是用 deep learning 的技术来做 reinforcement learning 的话,**policy 就是一个 network**network 里面就有一堆参数, 我们用 $\theta$ 来代表 $\pi$ 的参数。Network 的 input 就是现在 machine 看到的东西,如果让 machine 打电玩的话, 那 machine 看到的东西就是游戏的画面。让 machine 看到什么东西,会影响你现在 training 到底好不好 train。
举例来说,在玩游戏的时候, 也许你觉得游戏的画面,前后是相关的,也许你觉得说,你应该让你的 policy看从游戏初始到现在这个时间点所有画面的总和。你可能会觉得你要用到 RNN 来处理它,不过这样子,你会比较难处理。要让你的 machine你的 policy 看到什么样的画面, 这个是你自己决定的。让你知道说给机器看到什么样的游戏画面可能是比较有效的。Output 的就是今天机器要采取什么样的行为。
上图就是具体的例子,
* policy 就是一个 network
* input 就是游戏的画面,它通常就是由 pixels 所组成的;
* output 就是看看说现在有那些选项是你可以去执行的,你的 output layer 就有几个 neurons。
假设你现在可以做的行为就是有 3 个, 你的 output layer 就是有 3 个 neurons。每个 neuron 对应到一个可以采取的行为。input 一个东西后network 就会给每一个可以采取的行为一个分数。接下来,你把这个分数,当作是概率。 actor 就是看这个概率的分布,根据这个机率的分布,决定它要采取的行为。比如说 70% 会走 left20% 走 right10% 开火等等。概率分布不同,你的 actor 采取的行为,就会不一样。
上图就是具体的例子,
* policy 就是一个 network
* input 就是游戏的画面,它通常是由 pixels 所组成的;
* output 就是看看说有那些选项是你可以去执行的output layer 就有几个 neurons。
假设你现在可以做的行为就是有 3 个output layer 就是有 3 个 neurons。每个 neuron 对应到一个可以采取的行为。Input 一个东西后network 就会给每一个可以采取的行为一个分数。接下来,你把这个分数当作是概率。 actor 就是看这个概率的分布,根据这个机率的分布,决定它要采取的行为。比如说 70% 会走 left20% 走 right10% 开火等等。概率分布不同,你的 actor 采取的行为,就会不一样。
![](img/1.3.png)
接下来用一个例子来说明 actor 是怎么样跟环境互动的。 首先 actor 会看到一个游戏画面,我们用 $s_1$ 来表示这个游戏画面,它代表游戏初始的画面。接下来 actor 看到这个游戏的初始画面以后,根据它内部的 network根据它内部的 policy,它就会决定一个 action。假设它现在决定的 action 是向右。那它决定完 action 以后,它就会得到一个 reward 代表它采取这个 action 以后,它会得到多少的分数。
接下来用一个例子来说明 actor 是怎么样跟环境互动的。 首先 actor 会看到一个游戏画面,我们用 $s_1$ 来表示这个游戏画面,它代表游戏初始的画面。接下来 actor 看到这个游戏的初始画面以后,根据它内部的 network根据它内部的 policy决定一个 action。假设它现在决定的 action 是向右它决定完 action 以后,它就会得到一个 reward 代表它采取这个 action 以后得到的分数。
我们把一开始的初始画面,写作 $s_1$ 把第一次执行的动作叫做 $a_1$,把第一次执行动作完以后得到的 reward 叫做$r_1$。不同的书会有不同的定义,有人会觉得说这边应该要叫做 $r_2$这个都可以你自己看得懂就好。Actor 决定一个的行为以后, 就会看到一个新的游戏画面,这边是 $s_2$。然后把这个 $s_2$ 输入给 actor这个 actor 决定要开火,然后它可能杀了一只怪,就得到五分。然后这个 process 就反复地持续下去,直到今天走到某一个 timestamp 执行某一个 action得到 reward 之后, 这个 environment 决定这个游戏结束了。比如说,如果在这个游戏里面,你是控制绿色的船去杀怪,如果你被杀死的话,游戏就结束,或是你把所有的怪都清空,游戏就结束了。
@@ -57,9 +69,9 @@ $$
![](img/1.6.png)
在 reinforcement learning 里面,除了 environment 跟 actor 以外, 还有`reward function`。Reward function 根据在某一个 state 采取的某一个 action 决定说现在这个行为可以得到多少的分数。 它是一个 function给它 $s_1$$a_1$,它告诉你得到 $r_1$。给它 $s_2$ $a_2$,它告诉你得到 $r_2$。 把所有的 $r$ 都加起来,我们就得到了 R。
在 reinforcement learning 里面,除了 environment 跟 actor 以外, 还有`reward function`。Reward function 根据在某一个 state 采取的某一个 action 决定说现在这个行为可以得到多少的分数。 它是一个 function给它 $s_1$$a_1$,它告诉你得到 $r_1$。给它 $s_2$ $a_2$,它告诉你得到 $r_2$。 把所有的 $r$ 都加起来,我们就得到了 R。
这边写做 $R(\tau)$ ,代表说是某一个 trajectory $\tau$。在某一场游戏里面, 某一个 episode 里面,我们会得到 R。**我们要做的事情就是调整 actor 内部的参数 $\theta$ 使得 R 的值越大越好。** 但实际上 reward 并不只是一个 scalarreward 其实是一个 random variableR 其实是一个 random variable。 因为 actor 在给定同样的 state 会做什么样的行为这件事情是有随机性的。environment 在给定同样的 observation 要采取什么样的 action要产生什么样的 observation本身也是有随机性的。所以 R 是一个 random variable你能够计算的是它的期望值。你能够计算的是说在给定某一组参数 $\theta$ 的情况下,我们会得到的 R 的期望值是多少。
这边写做 $R(\tau)$ ,代表说是某一个 trajectory $\tau$。在某一场游戏里面, 某一个 episode 里面,我们会得到 R。**我们要做的事情就是调整 actor 内部的参数 $\theta$ 使得 R 的值越大越好。** 但实际上 reward 并不只是一个 scalarreward 其实是一个 random variableR 其实是一个 random variable。 因为 actor 在给定同样的 state 会做什么样的行为这件事情是有随机性的。environment 在给定同样的 observation 要采取什么样的 action要产生什么样的 observation本身也是有随机性的。所以 R 是一个 random variable你能够计算的是它的期望值。你能够计算的是说在给定某一组参数 $\theta$ 的情况下,我们会得到的 R 的期望值是多少。
$$
\bar{R}_{\theta}=\sum_{\tau} R(\tau) p_{\theta}(\tau)
$$
@@ -198,7 +210,12 @@ $$
本来的 weight 是整场游戏的 reward 的总和。那现在改一下,改成从某个时间 $t$ 开始,假设这个 action 是在 t 这个时间点所执行的,从 $t$ 这个时间点,一直到游戏结束所有 reward 的总和,才真的代表这个 action 是好的还是不好的。
![](img/1.18.png)
接下来再更进一步,我们把未来的 reward 做一个 discount。为什么要把未来的 reward 做一个 discount 呢?因为虽然在某一个时间点,执行某一个 action会影响接下来所有的结果有可能在某一个时间点执行的 action接下来得到的 reward 都是这个 action 的功劳。但在比较真实的情况下, 如果时间拖得越长,影响力就越小。 比如说在第二个时间点执行某一个 action 那我在第三个时间点得到 reward 可能是在第二个时间点执行某个 action 的功劳,但是在 100 个 timestamp 之后,又得到 reward那可能就不是在第二个时间点执行某一个 action 得到的功劳。 所以我们实际上在做的时候,你会在你的 R 前面 乘上一个 term 叫做 $\gamma$ $\gamma$ 它是小于 1 的,它会设个 0.9 或 0.99。 如果 time stamp $t'$ 越大,它前面就乘上越多次的 $\gamma$,就代表说现在在某一个 state $s_t$ 执行某一个 action $a_t$ 的时候,它真正的 credit 是在执行这个 action 之后 所有 reward 的总和,而且你还要乘上 $\gamma$。
**接下来再更进一步,我们把未来的 reward 做一个 discount**,由此得到的回报被称为 `Discounted Return(折扣回报)`。为什么要把未来的 reward 做一个 discount 呢?因为虽然在某一个时间点,执行某一个 action会影响接下来所有的结果有可能在某一个时间点执行的 action接下来得到的 reward 都是这个 action 的功劳。但在比较真实的情况下, 如果时间拖得越长,影响力就越小。 比如说在第二个时间点执行某一个 action 那我在第三个时间点得到 reward 可能是在第二个时间点执行某个 action 的功劳,但是在 100 个 timestamp 之后,又得到 reward那可能就不是在第二个时间点执行某一个 action 得到的功劳。 所以我们实际上在做的时候,你会在 R 前面乘上一个 `discount factor` $\gamma$ $\gamma \in [0,1] $ ,一般会设个 0.9 或 0.99
* $\gamma = 0$ : Only care about the immediate reward
* $\gamma = 1$ : Future reward is equal to the immediate reward。
如果 time stamp $t'$ 越大,它前面就乘上越多次的 $\gamma$,就代表说现在在某一个 state $s_t$ 执行某一个 action $a_t$ 的时候,它真正的 credit 是在执行这个 action 之后所有 reward 的总和,而且你还要乘上 $\gamma$。
举一个例子, 你就想成说,这是游戏的第 1、2、3、4 回合,那你在游戏的第二回合的某一个 $s_t$ 你执行 $a_t$,它真正的 credit 得到的分数应该是,假设你这边得到 +1 分 这边得到 +3 分,这边得到 -5 分,它的真正的 credit应该是 1 加上一个 discount 的 credit 叫做 $\gamma$ 乘上 3再加上 $\gamma^2$ 乘上 -5。
@@ -209,3 +226,9 @@ $$
把 $R-b$ 这一项合起来,我们统称为` advantage function``A` 来代表 advantage function。Advantage function 是 dependent on s and a我们就是要计算的是在某一个 state s 采取某一个 action a 的时候advantage function 有多大。
这个 advantage function 它的上标是 $\theta$ $\theta$ 是什么意思呢? 因为在算 advantage function时你要计算$\sum_{t^{\prime}=t}^{T_{n}} r_{t^{\prime}}^{n}$ ,你会需要有一个 interaction 的结果。你会需要有一个 model 去跟环境做 interaction你才知道你接下来得到的 reward 会有多少。这个 $\theta$ 就是代表说是用 $\theta$ 这个 model 跟环境去做 interaction然后你才计算出这一项。从时间 t 开始到游戏结束为止,所有 R 的 summation 把这一项减掉 b然后这个就叫 advantage function。它的意义就是假设我们在某一个 state $s_t$ 执行某一个 action $a_t$,相较于其他可能的 action它有多好。它真正在意的不是一个绝对的好 而是说在同样的 state 的时候 是采取某一个 action $a_t$ 相较于其它的 action 它有多好,它是相对的好。因为会减掉一个 b减掉一个 baseline 所以这个东西是相对的好,不是绝对的好。 $A^{\theta}\left(s_{t}, a_{t}\right)$ 通常可以是由一个 network estimate 出来的,这个 network 叫做 critic。
## References
* [Intro to Reinforcement Learning (强化学习纲要)](https://github.com/zhoubolei/introRL)
* [神经网络与深度学习](https://nndl.github.io/)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 184 KiB

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

Binary file not shown.

View File

@@ -1,10 +1,10 @@
# PPO
## From On-policy to Off-policy
在讲 PPO 之前,我们先讲一下 on-policy and off-policy 这两种 training 方法的区别。
在讲 PPO 之前,我们先讲一下 on-policy off-policy 这两种 training 方法的区别。
在 reinforcement learning 里面,我们要 learn 的就是一个agent。
* 如果要 learn 的 agent 跟和环境互动的 agent 是同一个的话, 这个叫做`on-policy`
* 如果要 learn 的 agent 跟和环境互动的 agent 不是同一个的话, 那这个叫做`off-policy`
* 如果要 learn 的 agent 跟和环境互动的 agent 是同一个的话, 这个叫做`on-policy(同策略)`
* 如果要 learn 的 agent 跟和环境互动的 agent 不是同一个的话, 那这个叫做`off-policy(异策略)`
比较拟人化的讲法是如果要学习的那个 agent一边跟环境互动一边做学习这个叫 on-policy。 如果它在旁边看别人玩,通过看别人玩来学习的话,这个叫做 off-policy。
@@ -21,7 +21,7 @@ $$
问题是上面这个 update 的式子中的 $E_{\tau \sim p_{\theta}(\tau)}$ 应该是你现在的 policy $\theta$ 所 sample 出来的 trajectory $\tau$ 做 expectation。一旦 update 了参数,从 $\theta$ 变成 $\theta'$ $p_\theta(\tau)$这个概率就不对了之前sample 出来的 data 就变的不能用了。所以 policy gradient 是一个会花很多时间来 sample data 的 algorithm你会发现大多数时间都在 sample dataagent 去跟环境做互动以后,接下来就要 update 参数。你只能 update 参数一次。接下来你就要重新再去 collect data 然后才能再次update 参数,这显然是非常花时间的。所以我们想要从 on-policy 变成 off-policy。 这样做就可以用另外一个policy 另外一个actor $\theta'$ 去跟环境做互动。用 $\theta'$ collect 到的data 去训练 $\theta$。假设我们可以用 $\theta'$ collect 到的data 去训练 $\theta$,意味着说我们可以把$\theta'$ collect 到的data 用非常多次。我们可以执行 gradient ascent 好几次,我们可以 update 参数好几次, 都只要用同一笔data 就好了。因为假设 $\theta$ 有能力学习另外一个actor $\theta'$ 所 sample 出来的 data 的话, 那$\theta'$ 就只要sample 一次也许sample 多一点的data 让$\theta$ 去update 很多次,这样就会比较有效率。
![](img/2.2.png)
具体怎么做呢?这边就需要介绍 important sampling 的概念。假设你有一个function $f(x)$,你要计算从 p 这个 distribution sample x再把 x 带到 f 里面,得到$f(x)$。你要该怎么计算这个 $f(x)$ 的期望值?假设你不能对 p 这个distribution 做积分的话,那你可以从 p 这个 distribution 去 sample 一些data $x^i$。把 $x^i$ 代到 $f(x)$ 里面,然后取它的平均值,就可以近似 $f(x)$ 的期望值。
具体怎么做呢?这边就需要介绍 `important sampling` 的概念。假设你有一个function $f(x)$,你要计算从 p 这个 distribution sample x再把 x 带到 f 里面,得到$f(x)$。你要该怎么计算这个 $f(x)$ 的期望值?假设你不能对 p 这个distribution 做积分的话,那你可以从 p 这个 distribution 去 sample 一些data $x^i$。把 $x^i$ 代到 $f(x)$ 里面,然后取它的平均值,就可以近似 $f(x)$ 的期望值。
现在有另外一个问题,我们没有办法从 p 这个 distribution 里面 sample data。假设我们不能从 p sample data只能从另外一个 distribution q 去 sample dataq 可以是任何 distribution。我们不能够从 p 去sample data但可以从 q 去 sample $x$。我们从 q 去 sample $x^i$ 的话就不能直接套下面的式子。
$$
@@ -33,7 +33,7 @@ $$
$$
我们就可以写成对 q 里面所 sample 出来的 x 取期望值。我们从q 里面 sample x然后再去计算$f(x) \frac{p(x)}{q(x)}$,再去取期望值。所以就算我们不能从 p 里面去 sample data只要能够从 q 里面去sample data然后代入上式你就可以计算从 p 这个distribution sample x 代入 f 以后所算出来的期望值。
这边是从 q 做 sample所以从 q 里 sample 出来的每一笔data你需要乘上一个 weight 来修正这两个 distribution 的差异weight 就是$\frac{p(x)}{q(x)}$。$q(x)$是任何distribution 都可以,唯一的限制就是 $q(x)$ 的概率是0 的时候,$p(x)$ 的概率不为 0不然这样会没有定义。假设 $q(x)$ 的概率是0 的时候,$p(x)$ 的概率也都是 0 的话,那这样 $p(x)$ 除以$q(x)$是有定义的。所以这个时候你就可以 apply important sampling 这个技巧。你就可以从 p 做sample 换成从 q 做sample。
这边是从 q 做 sample所以从 q 里 sample 出来的每一笔data你需要乘上一个 weight 来修正这两个 distribution 的差异weight 就是$\frac{p(x)}{q(x)}$。$q(x)$ 可以是任何 distribution唯一的限制就是 $q(x)$ 的概率是 0 的时候,$p(x)$ 的概率不为 0不然这样会没有定义。假设 $q(x)$ 的概率是 0 的时候,$p(x)$ 的概率也都是 0 的话,那这样 $p(x)$ 除以 $q(x)$是有定义的。所以这个时候你就可以 apply important sampling 这个技巧。你就可以从 p 做 sample 换成从 q 做 sample。
![](img/2.3.png)
@@ -89,7 +89,7 @@ $$
=E_{\left(s_{t}, a_{t}\right) \sim \pi_{\theta^{\prime}}}\left[\frac{P_{\theta}\left(s_{t}, a_{t}\right)}{P_{\theta^{\prime}}\left(s_{t}, a_{t}\right)} A^{\theta}\left(s_{t}, a_{t}\right) \nabla \log p_{\theta}\left(a_{t}^{n} | s_{t}^{n}\right)\right]
$$
这边 A 有一个上标 $\theta$$\theta$ 代表说这个是 actor $\theta$ 跟环境互动的时候所计算出来的 A。但是实际上从 $\theta$ 换到 $\theta'$ 的时候,$A^{\theta}(s_t,a_t)$ 应该改成 $A^{\theta'}(s_t,a_t)$为什么A 这一项是想要估测说现在在某一个 state 采取某一个 action接下来会得到 accumulated reward 的值减掉base line 。你怎么估 A 这一项,你就会看在 state $s_t$,采取 action $a_t$接下来会得到的reward 的总和再减掉baseline。之前是 $\theta$ 在跟环境做互动,所以你观察到的是 $\theta$ 可以得到的reward。但现在是 $\theta'$ 在跟环境做互动所以你得到的这个advantage 其实是根据 $\theta'$ 所estimate 出来的advantage。但我们现在先不要管那么多 我们就假设这两项可能是差不多的。
这边 $A^{\theta}(s_t,a_t)$ 有一个上标 $\theta$$\theta$ 代表说这个是 actor $\theta$ 跟环境互动的时候所计算出来的 A。但是实际上从 $\theta$ 换到 $\theta'$ 的时候,$A^{\theta}(s_t,a_t)$ 应该改成 $A^{\theta'}(s_t,a_t)$为什么A 这一项是想要估测说现在在某一个 state 采取某一个 action接下来会得到 accumulated reward 的值减掉base line 。你怎么估 A 这一项,你就会看在 state $s_t$,采取 action $a_t$接下来会得到的reward 的总和再减掉baseline。之前是 $\theta$ 在跟环境做互动,所以你观察到的是 $\theta$ 可以得到的reward。但现在是 $\theta'$ 在跟环境做互动所以你得到的这个advantage 其实是根据 $\theta'$ 所estimate 出来的advantage。但我们现在先不要管那么多 我们就假设这两项可能是差不多的。
那接下来,我们可以拆解 $p_{\theta}\left(s_{t}, a_{t}\right)$ 和 $p_{\theta'}\left(s_{t}, a_{t}\right)$,即
$$
@@ -140,7 +140,7 @@ $$
![](img/2.7.png)
我们可以把 on-policy 换成off-policy但 importance sampling 有一个 issue如果 $p_{\theta}\left(a_{t} | s_{t}\right)$ 跟$p_{\theta'}\left(a_{t} | s_{t}\right)$ 差太多的话这两个distribution 差太多的话importance sampling 的结果就会不好。怎么避免它差太多呢?这个就是PPO 在做的事情。它实际上做的事情就是这样,在 off-policy 的方法里要optimize 的是 $J^{\theta^{\prime}}(\theta)$。但是这个objective function 又牵涉到 importance sampling。在做importance sampling 的时候,$p_{\theta}\left(a_{t} | s_{t}\right)$ 不能跟 $p_{\theta'}\left(a_{t} | s_{t}\right)$差太多。你做 demonstration 的model 不能够跟真正的model 差太多,差太多的话 importance sampling 的结果就会不好。我们在 training 的时候多加一个constrain。这个constrain 是 $\theta$ 跟 $\theta'$ output 的 action 的 KL divergence简单来说这一项的意思就是要衡量说 $\theta$ 跟 $\theta'$ 有多像。
我们可以把 on-policy 换成 off-policy但 importance sampling 有一个 issue如果 $p_{\theta}\left(a_{t} | s_{t}\right)$ 跟 $p_{\theta'}\left(a_{t} | s_{t}\right)$ 差太多的话,这两个 distribution 差太多的话importance sampling 的结果就会不好。怎么避免它差太多呢?这个就是 `Proximal Policy Optimization (PPO) ` 在做的事情。它实际上做的事情就是这样,在 off-policy 的方法里要optimize 的是 $J^{\theta^{\prime}}(\theta)$。但是这个 objective function 又牵涉到 importance sampling。在做 importance sampling 的时候,$p_{\theta}\left(a_{t} | s_{t}\right)$ 不能跟 $p_{\theta'}\left(a_{t} | s_{t}\right)$差太多。你做 demonstration 的 model 不能够跟真正的 model 差太多,差太多的话 importance sampling 的结果就会不好。我们在 training 的时候,多加一个 constrain。这个constrain 是 $\theta$ 跟 $\theta'$ output 的 action 的 KL divergence简单来说这一项的意思就是要衡量说 $\theta$ 跟 $\theta'$ 有多像。
然后我们希望在 training 的过程中learn 出来的 $\theta$ 跟 $\theta'$ 越像越好。因为如果 $\theta$ 跟 $\theta'$ 不像的话,最后的结果就会不好。所以在 PPO 里面有两个式子,一方面是 optimize 本来要 optimize 的东西,但再加一个 constrain。这个 constrain 就好像那个 regularization 的 term 一样,在做 machine learning 的时候不是有 L1/L2 的regularization。这一项也很像 regularization这样 regularization 做的事情就是希望最后 learn 出来的 $\theta$ 不要跟 $\theta'$ 太不一样。
@@ -168,7 +168,7 @@ KL divergence 到底指的是什么?这边我是直接把 KL divergence 当做
![](img/2.9.png)
在PPO 的paper 里面还有一个 `adaptive KL divergence`,这边会遇到一个问题就是 $\beta$ 要设多少它就跟那个regularization 一样。regularization 前面也要乘一个weight所以这个 KL divergence 前面也要乘一个 weight但 $\beta$ 要设多少呢?所以有个动态调整 $\beta$ 的方法。在这个方法里面呢,你先设一个 KL divergence你可以接受的最大值。然后假设你发现说你 optimize 完这个式子以后KL divergence 的项太大,那就代表说后面这个 penalize 的 term 没有发挥作用,那就把 $\beta$ 调大。那另外你定一个 KL divergence 的最小值。如果发现 optimize 完上面这个式子以后KL divergence 比最小值还要小,那代表后面这一项的效果太强了,你怕他只弄后面这一项,那$\theta$ 跟$\theta^k$ 都一样,这不是你要的,所以你这个时候你叫要减少 $\beta$。所以 $\beta$ 是可以动态调整的。这个叫做 adaptive KL penalty。
在PPO 的paper 里面还有一个 `adaptive KL divergence`,这边会遇到一个问题就是 $\beta$ 要设多少它就跟那个regularization 一样。regularization 前面也要乘一个weight所以这个 KL divergence 前面也要乘一个 weight但 $\beta$ 要设多少呢?所以有个动态调整 $\beta$ 的方法。在这个方法里面呢,你先设一个 KL divergence你可以接受的最大值。然后假设你发现说你 optimize 完这个式子以后KL divergence 的项太大,那就代表说后面这个 penalize 的 term 没有发挥作用,那就把 $\beta$ 调大。那另外你定一个 KL divergence 的最小值。如果发现 optimize 完上面这个式子以后KL divergence 比最小值还要小,那代表后面这一项的效果太强了,你怕他只弄后面这一项,那$\theta$ 跟$\theta^k$ 都一样,这不是你要的,所以你这个时候你叫要减少 $\beta$。所以 $\beta$ 是可以动态调整的。这个叫做 adaptive KL penalty。
![](img/2.10.png)

View File

@@ -4,7 +4,7 @@
![](img/3.1.png)
Q-learning 是 `value-based` 的方法。在 value based 的方法里面,我们 learn 的不是 policy我们要 learn 的是一个 `critic`。Critic 并不直接采取行为,它想要做的事情是评价现在的行为有多好或是有多不好。假设有一个 actor $\pi$ critic 的工作就是来评价这个 actor $\pi$ 做得有多好或者有多不好
Q-learning 是 `value-based` 的方法。在 value based 的方法里面,我们 learn 的不是 policy我们要 learn 的是一个 `critic`。Critic 并不直接采取行为,它想要做的事情是评价现在的行为有多好或是有多不好。假设有一个 actor $\pi$ critic 的工作就是来评价这个 actor 的 policy $\pi$ 好还是不好,即 `Policy Evaluation(策略评估)`
举例来说,有一种 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。
@@ -25,7 +25,7 @@ Q-learning 是 `value-based` 的方法。在 value based 的方法里面,我
![](img/3.3.png)
第二个方法是`Temporal-difference` 的方法, `即 TD based ` 的方法。在 MC based 的方法中每次我们都要算accumulated reward也就是从某一个 state $s_a$ 一直玩到游戏结束的时候得到的所有reward 的总和。所以你要 apply MC based 的 approach你必须至少把这个游戏玩到结束。但有些游戏非常的长你要玩到游戏结束才能够 update network你可能根本收集不到太多的资料花的时间太长了。所以怎么办?有另外一种 TD based 的方法。TD based 的方法不需要把游戏玩到底,只要在游戏的某一个情况,某一个 state $s_t$ 的时候,采取 action $a_t$ 得到 reward $r_t$ ,跳到 state $s_{t+1}$就可以apply TD 的方法。
第二个方法是`Temporal-difference(时序差分)` 的方法, `即 TD based ` 的方法。在 MC based 的方法中每次我们都要算accumulated reward也就是从某一个 state $s_a$ 一直玩到游戏结束的时候得到的所有reward 的总和。所以你要 apply MC based 的 approach你必须至少把这个游戏玩到结束。但有些游戏非常的长你要玩到游戏结束才能够 update network你可能根本收集不到太多的资料花的时间太长了。所以我们会采用 TD based 的方法。TD based 的方法不需要把游戏玩到底,只要在游戏的某一个情况,某一个 state $s_t$ 的时候,采取 action $a_t$ 得到 reward $r_t$ ,跳到 state $s_{t+1}$,就可以 apply TD 的方法。
怎么 apply TD 的方法呢?这边是基于以下这个式子:
$$
@@ -111,22 +111,24 @@ Q-function 有两种写法:
![](img/3.9.png)
虽然表面上我们 learn 一个Q-function它只能拿来评估某一个actor $\pi$ 的好坏,但只要有了这个 Q-function我们就可以做 reinforcement learning。有这个Q-function我们就可以决定要采取哪一个action。它的大原则是这样假设你有一个初始的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得到新的以后再去找一个更好的policy。 然后这个循环一直下去你的policy 就会越来越好。
虽然表面上我们 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 就会越来越好。
![](img/3.10.png)
上图就是讲我们刚才讲的到底是什么。
* 首先要定义的是什么叫做比较好?我们说$\pi'$ 一定会比$\pi$ 还要好什么叫做好呢这边所谓好的意思是说对所有可能的state s 而言对同一个state s 而言,$\pi$ 的 value function 一定会小于$\pi'$ 的value function。也就是说我们走到同一个 state s 的时候,如果拿 $\pi$ 继续跟环境互动下去,我们得到的 reward 一定会小于用$\pi'$ 跟环境互动下去得到的reward。所以不管在哪一个state你用$\pi'$ 去做interaction得到的expected reward 一定会比较大。所以 $\pi'$ 是比 $\pi$ 还要好的一个policy。
* 有了这个 Q 以后,怎么找这个$\pi'$ 呢?事实上这个$\pi'$ 是什么?这个$\pi'$ 就是, 如果你根据以下的这个式子去决定你的action
* 有了这个 Q-function 以后,怎么找这个 $\pi'$ 呢?事实上这个 $\pi'$ 是什么?这个$\pi'$ 就是, 如果你根据以下的这个式子去决定你的action
$$
\pi^{\prime}(s)=\arg \max _{a} Q^{\pi}(s, a)
$$
根据上式去决定你的action 的步骤叫做 $\pi'$ 的话,那这个 $\pi'$ 一定会比$\pi$ 还要好。这个意思是说假设你已经learn 出 $\pi$ 的Q-function今天在某一个state s你把所有可能的action a 都一一带入这个Q-function看看说那一个 a 可以让 Q-function 的value 最大那这一个action就是$\pi'$ 会采取的action。这边要注意一下今天given 这个state s你的policy $\pi$ 并不一定会采取action a。今天是 given 某一个state s 强制采取 action a用$\pi$ 继续互动下去得到的expected reward才是这个Q-function 的定义。所以在state s 里面不一定会采取action a。假设用这一个 $\pi'$ 在state s 采取action a 跟 $\pi$ 所谓采取action 是不一定会一样的。然后 $\pi'$ 所采取的action 会让他得到比较大的reward。
根据上式去决定你的action 的步骤叫做 $\pi'$ 的话,那这个 $\pi'$ 一定会比$\pi$ 还要好。这个意思是说,假设你已经 learn 出 $\pi$ 的Q-function今天在某一个state s你把所有可能的 action a 都一一带入这个 Q-function看看说那一个 a 可以让 Q-function 的 value 最大那这一个 action就是 $\pi'$ 会采取的 action。这边要注意一下given 这个 state s你的 policy $\pi$ 并不一定会采取 action a。我们是 given 某一个 state s 强制采取 action a $\pi$ 继续互动下去得到的 expected reward这个才是 Q-function 的定义。所以在 state s 里面不一定会采取 action a。假设用这一个 $\pi'$ 在 state s 采取action a 跟 $\pi$ 所谓采取 action 是不一定会一样的。然后 $\pi'$ 所采取的 action 会让他得到比较大的 reward。
* 所以根本就没有一个policy 叫做 $\pi'$,这个$\pi'$ 其实就是用 Q-function 推出来的。所以没有另外一个 network 决定 $\pi'$ 怎么interactionQ 就可以找出$\pi'$。
* 所以根本就没有一个 policy 叫做 $\pi'$,这个$\pi'$ 是用 Q-function 推出来的。所以没有另外一个 network 决定 $\pi'$ 怎么interaction Q-function 就可以找出$\pi'$。
* 但是这边有另外一个问题就是,在这边要解一个 arg max 的 problem。所以 a 如果是continuous 的就会有问题如果是discrete 的a 只有3 个选项,一个一个带进去, 看谁的 Q 最大,没有问题。但如果是 continuous 要解 arg max problem你就会有问题但这个是之后才会解决的。
![](img/3.11.png)
@@ -211,7 +213,7 @@ $$
V^{\pi}(s)\le V^{\pi'}(s)
$$
这边告诉我们的事情如下你可以estimate 某一个policy 的Q-function接下来你就一定可以找到另外一个policy 叫做$\pi'$它一定比原来的policy 还要更好。
**从这边我们可以知道,你可以 estimate 某一个 policy 的 Q-function接下来你就一定可以找到另外一个 policy $\pi'$,它一定比原来的 policy 还要更好。**
## Target Network
@@ -223,7 +225,7 @@ $$
=r_{t}+\mathrm{Q}^{\pi}\left(s_{t+1}, \pi\left(s_{t+1}\right)\right)
$$
所以你在learn 的时候你会说我们有Q-functioninput $s_t$, $a_t$ 得到的value跟input $s_{t+1}$, $\pi (s_{t+1})$ 得到的value 中间,我们希望它差了一个$r_t$ 这跟刚才讲的TD 的概念是一样的。但是实际上在learn 的时候你会发现这样的一个function 并不好 learn。因为假设你说这是一个regression 的problem$\mathrm{Q}^{\pi}\left(s_{t}, a_{t}\right) $是你network 的output$r_{t}+\mathrm{Q}^{\pi}\left(s_{t+1}, \pi\left(s_{t+1}\right)\right)$是你的target你会发现 target 是会动的。当然你要implement 这样的training其实也没有问题。就是你在做 back propagation 的时候, $Q^{\pi}$ 的参数会被 update你会把两个update 的结果加在一起。它们是同一个model $Q^{\pi}$ 所以两个update 的结果会加在一起。但是实际上在做的时候你的training 会变得不太稳定,因为假设你把 $\mathrm{Q}^{\pi}\left(s_{t}, a_{t}\right) $ 当作你model 的output $r_{t}+\mathrm{Q}^{\pi}\left(s_{t+1}, \pi\left(s_{t+1}\right)\right)$ 当作target 的话。你要去 fit 的 target 是一直在变的这种一直在变的target 的training 是不太好train 的。所以实际上你会把其中一个 Q通常是你就选择下面这个 Q把它固定住。也就是说你在training 的时候,你并不 update 这个Q 的参数你只update 左边这个Q 的参数而右边这个Q 的参数,它会被固定住,我们叫它 `target network`。它负责产生target所以叫做target network。因为target network 是固定的所以你现在得到的target也就是 $r_{t}+\mathrm{Q}^{\pi}\left(s_{t+1}, \pi\left(s_{t+1}\right)\right)$ 的值也是固定的。
所以你在learn 的时候你会说我们有Q-functioninput $s_t$, $a_t$ 得到的value跟input $s_{t+1}$, $\pi (s_{t+1})$ 得到的value 中间,我们希望它差了一个$r_t$ 这跟刚才讲的TD 的概念是一样的。但是实际上在learn 的时候你会发现这样的一个function 并不好 learn。因为假设这是一个 regression 的 problem$\mathrm{Q}^{\pi}\left(s_{t}, a_{t}\right) $network 的output$r_{t}+\mathrm{Q}^{\pi}\left(s_{t+1}, \pi\left(s_{t+1}\right)\right)$是你的target你会发现 target 是会动的。当然你要implement 这样的training其实也没有问题。就是你在做 back propagation 的时候, $Q^{\pi}$ 的参数会被 update你会把两个update 的结果加在一起。它们是同一个model $Q^{\pi}$ 所以两个update 的结果会加在一起。但是实际上在做的时候你的training 会变得不太稳定,因为假设你把 $\mathrm{Q}^{\pi}\left(s_{t}, a_{t}\right) $ 当作你model 的output $r_{t}+\mathrm{Q}^{\pi}\left(s_{t+1}, \pi\left(s_{t+1}\right)\right)$ 当作target 的话。你要去 fit 的 target 是一直在变的这种一直在变的target 的training 是不太好train 的。所以实际上你会把其中一个 Q通常是你就选择下面这个 Q把它固定住。也就是说你在training 的时候,你并不 update 这个Q 的参数你只update 左边这个Q 的参数而右边这个Q 的参数,它会被固定住,我们叫它 `target network`。它负责产生target所以叫做 target network。因为 target network 是固定的所以你现在得到的target也就是 $r_{t}+\mathrm{Q}^{\pi}\left(s_{t+1}, \pi\left(s_{t+1}\right)\right)$ 的值也是固定的。
因为 target network 是固定的我们只调左边network 的参数它就变成是一个regression 的problem。我们希望 model 的output它的值跟你的目标越接近越好你会minimize 它的 mean square error。你会 minimize 它们 L2 的distance。这个东西就是regression。在实现上你会把这个Q update 好几次以后,再去用 update 过的 Q 替换这个 target network 。但它们两个不要一起动,它们两个一起动的话, 你的结果会很容易坏掉。一开始这两个network 是一样的然后接下来在train 的时候,你会把右边的 network fix 住。你在做 gradient decent 的时候只调左边这个network 的参数那你可能update 100 次以后才把这个参数,复制到右边的 network 去把它盖过去。把它盖过去以后你这个target 的value 就变了。就好像说你今天本来在做一个regression 的problem那你train后把这个regression problem 的loss 压下去以后接下来你把这边的参数把它copy 过去以后你的target 就变掉了。 那你接下来就要重新再train。
@@ -268,20 +270,20 @@ $$
Q我们明明是要观察 $\pi$ 的value 我们要量的是 $\pi$ 的value ,里面混杂了一些不是$\pi$ 的 experience 到底有没有关系?
A没关系。这并不是因为过去的 $\pi$ 跟现在的 $\pi$ 很像, 就算过去的$\pi$ 没有很像,其实也是没有关系的。主要的原因是因为, 我们并不是去sample 一个trajectory我们只sample 了一笔experience所以跟是不是 off-policy 这件事是没有关系的。就算是off-policy就算是这些 experience 不是来自于 $\pi$,我们其实还是可以拿这些 experience 来估测 $Q^{\pi}(s,a)$。这件事有点难解释,不过你就记得说 replay buffer 这招在理论上也是没有问题的。
A没关系。这并不是因为过去的 $\pi$ 跟现在的 $\pi$ 很像, 就算过去的$\pi$ 没有很像,其实也是没有关系的。主要的原因是因为, 我们并不是去sample 一个trajectory我们只sample 了一笔experience所以跟是不是 off-policy 这件事是没有关系的。就算是off-policy就算是这些 experience 不是来自于 $\pi$,我们其实还是可以拿这些 experience 来估测 $Q^{\pi}(s,a)$。这件事有点难解释,不过你就记得说 Experience Replay 在理论上也是没有问题的。
## Typical Q-learing Algorithm
## DQN
![](img/3.16.png)
上图就是一般的 Q-learning 的算法。
上图就是一般的 `Deep Q-network(DQN)` 的算法。
这个算法是这样我们需要一个target network 先开始initialize 的时候你initialize 2 个network一个是 Q一个是$\hat{Q}$,其实 $\hat{Q}$ 就等于 Q。一开始这个 target Q-network跟你原来的 Q network 是一样的。在每一个episode就你拿你的 agent你拿你的 actor 去跟环境做互动那在每一次互动的过程中你都会得到一个state $s_t$一个游戏的画面那你会采取某一个action $a_t$那怎么知道采取哪一个action $a_t$ 呢?你就根据你现在的 Q-function。但是记得你要有exploration 的机制。比如说你用 Boltzmann exploration 或是 Epsilon Greedy 的 exploration。那接下来你得到reward $r_t$然后跳到state $s_{t+1}$。所以现在collect 到一笔data这笔data 是 $s_t$, $a_t$ ,$r_t$, $s_{t+1}$。结果这笔 data 就塞到你的buffer 里面去。如果buffer 满的话, 你就再把一些旧有的资料丢掉。那接下来你就从你的buffer 里面去sample data那你sample 到的是$s_{i}, a_{i}, r_{i}, s_{i+1}$。这笔data 跟你刚放进去的不一定是同一笔。你把这笔data 塞到buffer 里面再到buffer 里面去抽data抽出来并不是同一笔你可能抽到一个旧的。
这个算法是这样,我们需要一个 target network 先开始 initialize 的时候,你 initialize 2 个network一个是 Q一个是$\hat{Q}$,其实 $\hat{Q}$ 就等于 Q。一开始这个 target Q-network跟你原来的 Q-network 是一样的。在每一个episode就你拿你的 agent你拿你的 actor 去跟环境做互动那在每一次互动的过程中你都会得到一个state $s_t$一个游戏的画面那你会采取某一个action $a_t$那怎么知道采取哪一个action $a_t$ 呢?你就根据你现在的 Q-function。但是记得你要有exploration 的机制。比如说你用 Boltzmann exploration 或是 Epsilon Greedy 的 exploration。那接下来你得到reward $r_t$然后跳到state $s_{t+1}$。所以现在collect 到一笔data这笔data 是 $s_t$, $a_t$ ,$r_t$, $s_{t+1}$。结果这笔 data 就塞到你的buffer 里面去。如果buffer 满的话, 你就再把一些旧有的资料丢掉。那接下来你就从你的buffer 里面去sample data那你sample 到的是$s_{i}, a_{i}, r_{i}, s_{i+1}$。这笔data 跟你刚放进去的不一定是同一笔。你把这笔data 塞到buffer 里面再到buffer 里面去抽data抽出来并不是同一笔你可能抽到一个旧的。
那这边另外要注意的是其实你sample 出来不是一笔data你 sample 出来的是一个batch 的data你sample 一个batch 出来sample 一把experiences 出来接下来你要做的事情就是计算你的target。假设你 sample 出这么一笔data。根据这笔data 去算你的target。你的target 是什么呢target 记得要用target network也就是$\hat{Q}$ 来算。我们用$\hat{Q}$ 来代表target network。Target 就是:
$$
y=r_{i}+\max _{a} \hat{Q}\left(s_{i+1}, a\right)
$$
其中 a 就是看现在哪一个 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这就是Q-learning
其中 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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 306 KiB

After

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 424 KiB

After

Width:  |  Height:  |  Size: 280 KiB

View File

@@ -1,6 +1,6 @@
# Imitation Learning
![](img/8.1.png)
Imitation learning 讨论的问题是,假设我们连 reward 都没有那要怎么办呢Imitation learning 又叫做 `learning from demonstration(示范学习)` `apprenticeship learning(学徒学习)``learning by watching(观察学习)`。在 Imitation learning 里面,你有一些 expert 的 demonstration那 machine 也可以跟环境互动,但它没有办法从环境里面得到任何的 reward它只能看着 expert 的 demonstration 来学习什么是好,什么是不好。其实,多数的情况,我们都没有办法真的从环境里面得到非常明确的 reward。举例来说如果是棋类游戏或者是电玩你有非常明确的 reward。但是其实多数的任务都是没有 reward 的。以 chat-bot 为例,机器跟人聊天,聊得怎么样算是好,聊得怎么样算是不好,你无法给出明确的 reward。所以很多 task 是根本就没有办法给出 reward 的。
`Imitation learning` 讨论的问题是,假设我们连 reward 都没有那要怎么办呢Imitation learning 又叫做 `learning from demonstration(示范学习)` `apprenticeship learning(学徒学习)``learning by watching(观察学习)`。在 Imitation learning 里面,你有一些 expert 的 demonstration那 machine 也可以跟环境互动,但它没有办法从环境里面得到任何的 reward它只能看着 expert 的 demonstration 来学习什么是好,什么是不好。其实,多数的情况,我们都没有办法真的从环境里面得到非常明确的 reward。举例来说如果是棋类游戏或者是电玩你有非常明确的 reward。但是其实多数的任务都是没有 reward 的。以 chat-bot 为例,机器跟人聊天,聊得怎么样算是好,聊得怎么样算是不好,你无法给出明确的 reward。所以很多 task 是根本就没有办法给出 reward 的。
虽然没有办法给出 reward但是收集 expert 的 demonstration 是可以做到的。举例来说,在自动驾驶汽车里面,虽然你没有办法给出自动驾驶汽车的 reward但你可以收集很多人类开车的纪录。在 chat-bot 里面,你可能没有办法定义什么叫做好的对话,什么叫做不好的对话。但是收集很多人的对话当作范例,这一件事情也是可行的。所以 imitation learning 的使用性非常高。假设你不知道该怎么定义 reward你就可以收集到 expert 的 demonstration你可以收集到一些范例的话你可以收集到一些很厉害的 agent比如说人跟环境实际上的互动的话那你就可以考虑 imitation learning 这个技术。在 imitation learning 里面,我们介绍两个方法。第一个叫做 `Behavior Cloning`,第二个叫做 `Inverse Reinforcement Learning` 或者又叫做 `Inverse Optimal Control`