From 0f13efd5c634fefb0c524d5cfdee70ef84b205ed Mon Sep 17 00:00:00 2001 From: BeBraveBeCurious <42266336+BeBraveBeCurious@users.noreply.github.com> Date: Thu, 17 Mar 2022 16:49:45 +0800 Subject: [PATCH 1/2] Update chapter11.md add ... in the formula --- docs/chapter11/chapter11.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/chapter11/chapter11.md b/docs/chapter11/chapter11.md index a274811..d948412 100644 --- a/docs/chapter11/chapter11.md +++ b/docs/chapter11/chapter11.md @@ -44,7 +44,7 @@ 把这个奖励函数学习出来,相较于原来的强化学习有什么样好处。一个可能的好处是也许奖励函数是比较简单的。也许,虽然这个专家的行为非常复杂,但也许简单的奖励函数就可以导致非常复杂的行为。一个例子就是也许人类本身的奖励函数就只有活着这样,每多活一秒,你就加一分。但人类有非常复杂的行为,但是这些复杂的行为,都只是围绕着要从这个奖励函数里面得到分数而已。有时候很简单的奖励函数也许可以推导出非常复杂的行为。 -逆强化学习实际上是怎么做的呢?如下图所示,首先,我们有一个专家$\hat{\pi}$,这个专家去跟环境互动,给我们很多轨迹:{$\hat{\tau_1}$,$\hat{\tau_2}$,$\hat{\tau_N}$}。如果是玩游戏的话,就让某一个电玩高手,去玩 $N$ 场游戏。把 $N$ 场游戏的状态跟动作的序列都记录下来。接下来,你有一个演员 $\pi$,一开始演员很烂,这个演员也去跟环境互动。它也去玩了 $N$ 场游戏,它也有 $N$ 场游戏的纪录。接下来,我们要反推出奖励函数。怎么推出奖励函数呢?原则就是专家永远是最棒的,是先射箭,再画靶的概念。 +逆强化学习实际上是怎么做的呢?如下图所示,首先,我们有一个专家$\hat{\pi}$,这个专家去跟环境互动,给我们很多轨迹:{$\hat{\tau_1}$,$\hat{\tau_2}$,...,$\hat{\tau_N}$}。如果是玩游戏的话,就让某一个电玩高手,去玩 $N$ 场游戏。把 $N$ 场游戏的状态跟动作的序列都记录下来。接下来,你有一个演员 $\pi$,一开始演员很烂,这个演员也去跟环境互动。它也去玩了 $N$ 场游戏,它也有 $N$ 场游戏的纪录。接下来,我们要反推出奖励函数。怎么推出奖励函数呢?原则就是专家永远是最棒的,是先射箭,再画靶的概念。 专家去玩一玩游戏,得到这一些游戏的纪录,演员也去玩一玩游戏,得到这些游戏的纪录。接下来,你要定一个奖励函数,这个奖励函数的原则就是专家得到的分数要比演员得到的分数高(先射箭,再画靶),所以我们就学习出一个奖励函数。你就找出一个奖励函数。这个奖励函数会使专家所得到的奖励大过于演员所得到的奖励。你有了新的奖励函数以后,就可以套用一般强化学习的方法去学习一个演员,这个演员会针对奖励函数去最大化它的奖励。它也会采取一大堆的动作。但是这个演员虽然可以最大化这个奖励函数,采取一大堆的行为,得到一大堆游戏的纪录。 但接下来,我们就改奖励函数。这个演员就会很生气,它已经可以在这个奖励函数得到高分。但是它得到高分以后,我们就改奖励函数,仍然让专家可以得到比演员更高的分数。这个就是逆强化学习。有了新的奖励函数以后,根据这个新的奖励函数,你就可以得到新的演员,新的演员再去跟环境做一下互动,它跟环境做互动以后, 你又会重新定义奖励函数,让专家得到的奖励比演员大。 From 4fe209709e81ea4cd6fb61ef90c7c5fea1754f53 Mon Sep 17 00:00:00 2001 From: BeBraveBeCurious <42266336+BeBraveBeCurious@users.noreply.github.com> Date: Thu, 17 Mar 2022 16:52:55 +0800 Subject: [PATCH 2/2] Update chapter11.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 很强的序列 --> 很长的序列 --- docs/chapter11/chapter11.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/chapter11/chapter11.md b/docs/chapter11/chapter11.md index a274811..d1c3691 100644 --- a/docs/chapter11/chapter11.md +++ b/docs/chapter11/chapter11.md @@ -49,7 +49,7 @@ 但接下来,我们就改奖励函数。这个演员就会很生气,它已经可以在这个奖励函数得到高分。但是它得到高分以后,我们就改奖励函数,仍然让专家可以得到比演员更高的分数。这个就是逆强化学习。有了新的奖励函数以后,根据这个新的奖励函数,你就可以得到新的演员,新的演员再去跟环境做一下互动,它跟环境做互动以后, 你又会重新定义奖励函数,让专家得到的奖励比演员大。 -怎么让专家得到的奖励大过演员呢?如下图所示,其实我们在学习的时候,奖励函数也许就是神经网络。这个神经网络就是输入 $\tau$,输出就是应该要给这个 $\tau$ 多少的分数。或者说,你假设觉得输入整个 $\tau$ 太难了。因为 $\tau$ 是 $s$ 和 $a$ 的一个很强的序列。也许它就是输入一个 $s$ 和 $a$ 的对,然后输出一个实数。把整个 $\tau$ 会得到的实数都加起来就得到 $R(\tau)$。在训练的时候,对于 $\left\{\hat{\tau}_{1}, \hat{\tau}_{2}, \cdots, \hat{\tau}_{N}\right\}$,我们希望它输出的 $R$ 越大越好。对于 $\left\{\tau_{1}, \tau_{2}, \cdots, \tau_{N}\right\}$,我们就希望 $R$ 的值越小越好。 +怎么让专家得到的奖励大过演员呢?如下图所示,其实我们在学习的时候,奖励函数也许就是神经网络。这个神经网络就是输入 $\tau$,输出就是应该要给这个 $\tau$ 多少的分数。或者说,你假设觉得输入整个 $\tau$ 太难了。因为 $\tau$ 是 $s$ 和 $a$ 的一个很长的序列。也许它就是输入一个 $s$ 和 $a$ 的对,然后输出一个实数。把整个 $\tau$ 会得到的实数都加起来就得到 $R(\tau)$。在训练的时候,对于 $\left\{\hat{\tau}_{1}, \hat{\tau}_{2}, \cdots, \hat{\tau}_{N}\right\}$,我们希望它输出的 $R$ 越大越好。对于 $\left\{\tau_{1}, \tau_{2}, \cdots, \tau_{N}\right\}$,我们就希望 $R$ 的值越小越好。 ![](img/11.7.png ':size=450')