fix some errors

This commit is contained in:
qiwang067
2020-07-08 15:23:03 +08:00
parent ff8ac75092
commit df13a454c8
3 changed files with 15 additions and 15 deletions

View File

@@ -1,7 +1,7 @@
# PPO
## From On-policy to Off-policy
在讲 PPO 之前,我们先讲一下 on-policy and off-policy 这两种 training 方法的区别。
在 reinforcement learning 里面我们要learn 的就是一个agent。
在 reinforcement learning 里面,我们要 learn 的就是一个agent。
* 如果要 learn 的 agent 跟和环境互动的 agent 是同一个的话, 这个叫做`on-policy`
* 如果要 learn 的 agent 跟和环境互动的 agent 不是同一个的话, 那这个叫做`off-policy`
@@ -12,13 +12,13 @@
![](img/2.1.png)
PPO是 policy gradient 的一个变形,它是现在 OpenAI default reinforcement learning 的 algorithm。
PPO 是 policy gradient 的一个变形,它是现在 OpenAI default reinforcement learning 的 algorithm。
$$
\nabla \bar{R}_{\theta}=E_{\tau \sim p_{\theta}(\tau)}\left[R(\tau) \nabla \log p_{\theta}(\tau)\right]
$$
问题是上面这个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 data你的agent 去跟环境做互动以后接下来就要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 很多次,这样就会比较有效率。
问题是上面这个 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)$ 的期望值。
@@ -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)
@@ -60,13 +60,13 @@ $\operatorname{Var}_{x \sim p}[f(x)]$ 和 $\operatorname{Var}_{x \sim q}\left[f(
![](img/2.4.png)
举个例子,当$p(x)$ 和 $q(x)$ 差距很大的时候,会发生什么样的问题。假设蓝线是 $p(x)$ 的distribution绿线是 $q(x)$ 的 distribution红线是 $f(x)$。如果我们要计算$f(x)$的期望值,从 $p(x)$ 这个distribution 做 sample 的话,那显然 $E_{x \sim p}[f(x)]$ 是负的,因为左边那块区域 $p(x)$ 的概率很高所以要sample 的话都会sample 到这个地方,而$f(x)$ 在这个区域是负的, 所以理论上这一项算出来会是负。
举个例子,当 $p(x)$ 和 $q(x)$ 差距很大的时候,会发生什么样的问题。假设蓝线是 $p(x)$ 的distribution绿线是 $q(x)$ 的 distribution红线是 $f(x)$。如果我们要计算$f(x)$的期望值,从 $p(x)$ 这个distribution 做 sample 的话,那显然 $E_{x \sim p}[f(x)]$ 是负的,因为左边那块区域 $p(x)$ 的概率很高,所以要 sample 的话,都会 sample 到这个地方,而 $f(x)$ 在这个区域是负的, 所以理论上这一项算出来会是负。
接下来我们改成从 $q(x)$ 这边做sample因为 $q(x)$ 在右边这边的概率比较高所以如果你sample 的点不够的话那你可能都只sample 到右侧。如果你都只sample 到右侧的话,你会发现说,算 $E_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right]$这一项搞不好还应该是正的。你这边sample 到这些点,然后你去计算它们的$f(x) \frac{p(x)}{q(x)}$都是正的所以你sample 到这些点都是正的。 你取期望值以后也都是正的。为什么会这样因为你sample 的次数不够多因为假设你sample 次数很少你只能sample 到右边这边。左边这边虽然概率很低但也不是没有可能被sample 到。假设你今天好不容易sample 到左边的点,因为左边的点,$p(x)$ 和 $q(x)$ 是差很多的, 这边 $p(x)$ 很小,$q(x)$ 很大。今天 $f(x)$ 好不容易终于 sample 到一个负的,这个负的就会被乘上一个非常大的 weight ,这样就可以平衡掉刚才那边一直 sample 到 positive 的 value 的情况。最终你算出这一项的期望值终究还是负的。但前提是你要sample 够多次这件事情才会发生。但有可能sample 不够,$E_{x \sim p}[f(x)]$跟$E_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right]$就有可能有很大的差距。这就是 importance sampling 的问题。
接下来我们改成从 $q(x)$ 这边做 sample因为 $q(x)$ 在右边这边的概率比较高所以如果你sample 的点不够的话那你可能都只sample 到右侧。如果你都只 sample 到右侧的话,你会发现说,算 $E_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right]$这一项搞不好还应该是正的。你这边sample 到这些点,然后你去计算它们的$f(x) \frac{p(x)}{q(x)}$都是正的所以你sample 到这些点都是正的。 你取期望值以后,也都是正的。为什么会这样,因为你 sample 的次数不够多因为假设你sample 次数很少你只能sample 到右边这边。左边这边虽然概率很低,但也不是没有可能被 sample 到。假设你今天好不容易 sample 到左边的点,因为左边的点,$p(x)$ 和 $q(x)$ 是差很多的, 这边 $p(x)$ 很小,$q(x)$ 很大。今天 $f(x)$ 好不容易终于 sample 到一个负的,这个负的就会被乘上一个非常大的 weight ,这样就可以平衡掉刚才那边一直 sample 到 positive 的 value 的情况。最终你算出这一项的期望值终究还是负的。但前提是你要sample 够多次这件事情才会发生。但有可能sample 不够,$E_{x \sim p}[f(x)]$跟$E_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right]$就有可能有很大的差距。这就是 importance sampling 的问题。
![](img/2.5.png)
现在要做的事情就是把 importance sampling 用在 off-policy 的case。把 on-policy training 的algorithm 改成 off-policy training 的 algorithm。怎么改呢之前我们是拿 $\theta$ 这个policy 去跟环境做互动sample 出trajectory $\tau$,然后计算$R(\tau) \nabla \log p_{\theta}(\tau)$。
现在要做的事情就是把 importance sampling 用在 off-policy 的 case。把 on-policy training 的algorithm 改成 off-policy training 的 algorithm。怎么改呢之前我们是拿 $\theta$ 这个policy 去跟环境做互动sample 出trajectory $\tau$,然后计算$R(\tau) \nabla \log p_{\theta}(\tau)$。
现在我们不用$\theta$ 去跟环境做互动,假设有另外一个 policy $\theta'$它就是另外一个actor。它的工作是他要去做demonstration$\theta'$ 的工作是要去示范给$\theta$ 看。它去跟环境做互动,告诉 $\theta$ 说,它跟环境做互动会发生什么事。然后,借此来训练$\theta$。我们要训练的是$\theta$ $\theta'$ 只是负责做 demo负责跟环境做互动。

View File

@@ -1,21 +1,21 @@
# Imitation Learning
![](img/8.1.png)
Imitation learning 讨论的问题是,假设我们连 reward 都没有那要怎么办呢Imitation learning 又叫做 `learning by demonstration` 或者叫做 `apprenticeship learning`。在 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`
虽然没有办法给出 reward但是收集 expert 的 demonstration 是可以做到的。举例来说,在自动驾驶汽车里面,虽然你没有办法出自动驾驶汽车的 reward但你可以收集很多人类开车的纪录。在 chat-bot 里面,你可能没有办法定义什么叫做好的对话,什么叫做不好的对话。但是收集很多人的对话当作范例,这一件事情也是可行的。所以 imitation learning 的使用性非常高。假设你不知道该怎么定义 reward,你就可以收集到 expert 的 demonstration你可以收集到一些范例的话你可以收集到一些很厉害的 agent比如说人跟环境实际上的互动的话,那你就可以考虑 imitation learning 这个技术。在 imitation learning 里面,我们介绍两个方法。第一个叫做 `Behavior Cloning`,第二个叫做 `Inverse Reinforcement Learning` 或者又叫做 `Inverse Optimal Control`
## Behavior Cloning
![](img/8.2.png)
其实 `Behavior Cloning` 跟 supervised learning 是一模一样的。我们以自车为例,你可以收集到人开自车的所有资料,比如说可以通过行车记录器进行收集。看到这样子的 observation 的时候,人会决定向前。机器就采取跟人一样的行为,也向前,就结束了,这个就叫做 Behavior Cloning。Expert 做什么,机器就做一模一样的事,怎么让机器学会跟 expert 一模一样的行为呢?就把它当作一个 supervised learning 的问题,你去收集很多行车纪录器。然后再收集人在那个情境下会采取什么样的行为。你知道说人在 state $s_1$ 会采取action $a_1$人在state $s_2$ 会采取action $a_2$。人在state, $s_3$ 会采取action $a_3$。接下来你就learn 一个 network。这个 network 就是你的 actor他input $s_i$ 的时候你就希望他的output 是$a_i$,就这样结束了。它就是一个的 supervised learning 的problem。
其实 `Behavior Cloning` 跟 supervised learning 是一模一样的。我们以自动驾驶汽车为例,你可以收集到人开自动驾驶汽车的所有资料,比如说可以通过行车记录器进行收集。看到这样子的 observation 的时候,人会决定向前。机器就采取跟人一样的行为,也向前,就结束了,这个就叫做 Behavior Cloning。Expert 做什么,机器就做一模一样的事,怎么让机器学会跟 expert 一模一样的行为呢?就把它当作一个 supervised learning 的问题,你去收集很多行车纪录器。然后再收集人在那个情境下会采取什么样的行为。你知道说人在 state $s_1$ 会采取action $a_1$人在state $s_2$ 会采取action $a_2$。人在state, $s_3$ 会采取action $a_3$。接下来你就learn 一个 network。这个 network 就是你的 actor他input $s_i$ 的时候你就希望他的output 是$a_i$,就这样结束了。它就是一个的 supervised learning 的problem。
![](img/8.3.png)
Behavior Cloning 虽然非常简单但它的问题是如果你只收集expert 的资料,你可能看过的 observation 会是非常 limited。举例来说假设你要 learn 一部自驾车,自驾车就是要过这个弯道。如果是 expert 的话,他就是把车顺着这个红线就开过去了。但假设你的 agent 很笨,他今天开着开着,就开到撞墙了,他永远不知道撞墙这种状况要怎么处理,为什么?因为 training data 里面从来没有撞过墙,所以他根本就不知道撞墙这一种 case 要怎么处理。或是打电玩,电玩也是一样,让人去玩 Mario那 expert 可能非常强他从来不会跳不上水管所以机器根本不知道跳不上水管时要怎么处理。人从来不会跳不上水管但是机器如果跳不上水管时就不知道要怎么处理。所以光是做Behavior Cloning 是不够的。只观察 expert 的行为是不够的,需要一个招数,这个招数叫作`Dataset Aggregation`
Behavior Cloning 虽然非常简单但它的问题是如果你只收集expert 的资料,你可能看过的 observation 会是非常 limited。举例来说假设你要 learn 一部自动驾驶汽车,自动驾驶汽车就是要过这个弯道。如果是 expert 的话,他就是把车顺着这个红线就开过去了。但假设你的 agent 很笨,他今天开着开着,就开到撞墙了,他永远不知道撞墙这种状况要怎么处理,为什么?因为 training data 里面从来没有撞过墙,所以他根本就不知道撞墙这一种 case 要怎么处理。或是打电玩,电玩也是一样,让人去玩 Mario那 expert 可能非常强他从来不会跳不上水管所以机器根本不知道跳不上水管时要怎么处理。人从来不会跳不上水管但是机器如果跳不上水管时就不知道要怎么处理。所以光是做Behavior Cloning 是不够的。只观察 expert 的行为是不够的,需要一个招数,这个招数叫作`Dataset Aggregation`
![](img/8.4.png)
我们会希望收集更多样性的 data而不是只收集 expert 所看到的 observation。我们会希望能够收集 expert 在各种极端的情况下,他会采取什么样的行为。以自车为例的话假设一开始你的actor 叫作 $\pi_1$,你让 $\pi_1$去开这个车。但车上坐了一个 expert。这个 expert 会不断地告诉machine 说,如果在这个情境里面,我会怎么样开。所以 $\pi_1$ 自己开自己的但是expert 会不断地表示他的想法。比如说在这个时候expert 可能说那就往前走。这个时候expert 可能就会说往右转。但 $\pi_1$ 是不管 expert 的指令的,所以他会继续去撞墙。虽然 expert 说往右转,但是不管他怎么下指令都是没有用的。$\pi_1$ 会自己做自己的事情因为我们要做的记录的是说今天expert 在 $\pi_1$ 看到这种observation 的情况下,他会做什么样的反应。这个方法显然是有一些问题的,因为每次你开一次自车都会牺牲一个人。那你用这个方法你牺牲一个expert 以后,你就会得到说,人类在这样子的 state 下在快要撞墙的时候会采取什么样的反应。再把这个data 拿去train 新的 $\pi_2$。这个process 就反复继续下去,这个方法就叫做`Dataset Aggregation`
我们会希望收集更多样性的 data而不是只收集 expert 所看到的 observation。我们会希望能够收集 expert 在各种极端的情况下,他会采取什么样的行为。以自动驾驶汽车为例的话假设一开始你的actor 叫作 $\pi_1$,你让 $\pi_1$去开这个车。但车上坐了一个 expert。这个 expert 会不断地告诉machine 说,如果在这个情境里面,我会怎么样开。所以 $\pi_1$ 自己开自己的但是expert 会不断地表示他的想法。比如说在这个时候expert 可能说那就往前走。这个时候expert 可能就会说往右转。但 $\pi_1$ 是不管 expert 的指令的,所以他会继续去撞墙。虽然 expert 说往右转,但是不管他怎么下指令都是没有用的。$\pi_1$ 会自己做自己的事情因为我们要做的记录的是说今天expert 在 $\pi_1$ 看到这种observation 的情况下,他会做什么样的反应。这个方法显然是有一些问题的,因为每次你开一次自动驾驶汽车都会牺牲一个人。那你用这个方法你牺牲一个expert 以后,你就会得到说,人类在这样子的 state 下在快要撞墙的时候会采取什么样的反应。再把这个data 拿去train 新的 $\pi_2$。这个process 就反复继续下去,这个方法就叫做`Dataset Aggregation`
@@ -36,7 +36,7 @@ Behavior Cloning 还有什么样的问题呢?在做 Behavior Cloning 的时候
## Inverse RL
![](img/8.7.png)
为什么叫 Inverse Reinforcement Learning因为原来的 Reinforcement Learning 里面,有一个环境和一个 reward function。根据环境和 reward function通过 Reinforcement Learning 这个技术,你会找到一个 actor你会 learn 出一个optimal actor。但 Inverse Reinforcement Learning 刚好是相反的,你没有 reward function你只有一堆 expert 的 demonstration。但你还是有环境的。IRL 的做法是说假设我们现在有一堆 expert 的demonstration我们用 $\hat{\tau}$ 来代表expert 的demonstration。如果是在玩电玩的话每一个 $\tau$ 就是一个很会玩电玩的人玩一场游戏的纪录,如果是自车的话,就是人开自车的纪录。这一边就是 expert 的 demonstration每一个 $\tau$ 是一个 trajectory。
为什么叫 Inverse Reinforcement Learning因为原来的 Reinforcement Learning 里面,有一个环境和一个 reward function。根据环境和 reward function通过 Reinforcement Learning 这个技术,你会找到一个 actor你会 learn 出一个optimal actor。但 Inverse Reinforcement Learning 刚好是相反的,你没有 reward function你只有一堆 expert 的 demonstration。但你还是有环境的。IRL 的做法是说假设我们现在有一堆 expert 的demonstration我们用 $\hat{\tau}$ 来代表expert 的demonstration。如果是在玩电玩的话每一个 $\tau$ 就是一个很会玩电玩的人玩一场游戏的纪录,如果是自动驾驶汽车的话,就是人开自动驾驶汽车的纪录。这一边就是 expert 的 demonstration每一个 $\tau$ 是一个 trajectory。
把所有 expert demonstration 收集起来然后使用Inverse Reinforcement Learning 这个技术。使用 Inverse Reinforcement Learning 技术的时候机器是可以跟环境互动的。但他得不到reward。他的 reward 必须要从 expert 那边推出来,有了环境和 expert demonstration 以后,去反推出 reward function 长什么样子。之前 reinforcement learning 是由 reward function 反推出什么样的 action、actor 是最好的。Inverse Reinforcement Learning 是反过来我们有expert 的demonstration我们相信他是不错的我就反推说expert 是因为什么样的 reward function 才会采取这些行为。你有了reward function 以后,接下来,你就可以套用一般的 reinforcement learning 的方法去找出 optimal actor。所以 Inverse Reinforcement Learning 是先找出 reward function找出 reward function 以后,再去用 Reinforcement Learning 找出 optimal actor。
@@ -70,13 +70,13 @@ Expert 去玩一玩游戏,得到这一些游戏的纪录,你的 actor 也去
![](img/8.10.png)
IRL 有很多的application举例来说可以用开来自车。然后,有人用这个技术来学开自车的不同风格,每个人在开车的时候,其实你会有不同风格。举例来说,能不能够压到线,能不能够倒退,要不要遵守交通规则等等。每个人的风格是不同的,然后用 Inverse Reinforcement Learning 可以让自车学会各种不同的开车风格。
IRL 有很多的application举例来说可以用开来自动驾驶汽车。然后,有人用这个技术来学开自动驾驶汽车的不同风格,每个人在开车的时候,其实你会有不同风格。举例来说,能不能够压到线,能不能够倒退,要不要遵守交通规则等等。每个人的风格是不同的,然后用 Inverse Reinforcement Learning 可以让自动驾驶汽车学会各种不同的开车风格。
![](img/8.11.png)
上图是文献上真实的例子,在这个例子里面, Inverse Reinforcement Learning 有一个有趣的地方,通常你不需要太多的 training data因为 training data 往往都是个位数。因为 Inverse Reinforcement Learning 只是一种 demonstration只是一种范例实际上机器可以去跟环境互动非常多次。所以在 Inverse Reinforcement Learning 的文献, 往往会看到说只用几笔 data 就训练出一些有趣的结果。
比如说,在这个例子里面是要让自车学会在停车场里面停。这边的demonstration 是这样,蓝色是终点,自车要开到蓝色终点停车。给机器只看一行的四个 demonstration然后让他去学怎么样开车最后他就可以学出在红色的终点位置如果他要停车的话他会这样开。今天给机器看不同的demonstration最后他学出来开车的风格就会不太一样。举例来说上图第二行是不守规矩的开车方式因为他会开到道路之外这边他会穿过其他的车然后从这边开进去。所以机器就会学到说不一定要走在道路上他可以走非道路的地方。上图第三行是倒退来停车机器也会学会说他可以倒退
比如说,在这个例子里面是要让自动驾驶汽车学会在停车场里面停。这边的demonstration 是这样,蓝色是终点,自动驾驶汽车要开到蓝色终点停车。给机器只看一行的四个 demonstration然后让他去学怎么样开车最后他就可以学出在红色的终点位置如果他要停车的话他会这样开。今天给机器看不同的demonstration最后他学出来开车的风格就会不太一样。举例来说上图第二行是不守规矩的开车方式因为他会开到道路之外这边他会穿过其他的车然后从这边开进去。所以机器就会学到说不一定要走在道路上他可以走非道路的地方。上图第三行是倒退来停车机器也会学会说他可以倒退
![](img/8.12.png)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 912 KiB

After

Width:  |  Height:  |  Size: 383 KiB