fix ch4 typos

This commit is contained in:
qiwang067
2020-09-25 17:10:41 +08:00
parent c12932d8fc
commit c570d456f5

View File

@@ -40,7 +40,7 @@
我们把一开始的初始画面记作 $s_1$ 把第一次执行的动作记作 $a_1$,把第一次执行动作完以后得到的 reward 记作 $r_1$。不同的书会有不同的定义,有人会觉得说这边应该要叫做 $r_2$这个都可以你自己看得懂就好。Actor 决定一个的行为以后, 就会看到一个新的游戏画面,这边是 $s_2$。然后把这个 $s_2$ 输入给 actor这个 actor 决定要开火,然后它可能杀了一只怪,就得到五分。这个 process 就反复地持续下去,直到今天走到某一个 timestamp 执行某一个 action得到 reward 之后, 这个 environment 决定这个游戏结束了。比如说,如果在这个游戏里面,你是控制绿色的船去杀怪,如果你被杀死的话,游戏就结束,或是你把所有的怪都清空,游戏就结束了。
![](img/4.4.png)
一场游戏叫做一个 `Episode(回合)` 或者 `Trial(试验)`。把这个游戏里面,所有得到的 reward 都总合起来,就是 `Total reward`,我们称其为`Return(回报)`,用 R 来表示它。Actor 要想办法去 maximize 它可以得到的 reward。
一场游戏叫做一个 `episode(回合)` 或者 `trial(试验)`。把这个游戏里面,所有得到的 reward 都总合起来,就是 `total reward`,我们称其为`return(回报)`,用 R 来表示它。Actor 要想办法去 maximize 它可以得到的 reward。
![](img/4.5.png)
首先,`environment` 是一个`function`,游戏的主机也可以把它看作是一个 function虽然它不一定是 neural network可能是 rule-based 的规则,但你可以把它看作是一个 function。这个 function一开始就先吐出一个 state也就是游戏的画面接下来你的 actor 看到这个游戏画面 $s_1$ 以后,它吐出 $a_1$,然后 environment 把 $a_1$ 当作它的输入,然后它再吐出 $s_2$吐出新的游戏画面。Actor 看到新的游戏画面,再采取新的行为 $a_2$,然后 environment 再看到 $a_2$,再吐出 $s_3$。这个 process 会一直持续下去,直到 environment 觉得说应该要停止为止。
@@ -87,7 +87,7 @@ $$
![](img/4.7.png)
怎么 maximize expected reward 呢?我们用的是 `gradient ascent`,因为要让它越大越好,所以是 gradient ascent。Gradient ascent 在 update 参数的时候要加。要进行 gradient ascent我们先要计算 expected reward $\bar{R}$ 的 gradient 。我们对 $\bar{R}$ 取一个 gradient这里面只有 $p_{\theta}(\tau)$ 是跟 $\theta$ 有关,所以 gradient 就放在 $p_{\theta}(\tau)$ 这个地方。$R(\tau)$ 这个 reward function 不需要是 differentiable我们也可以解接下来的问题。举例来说如果是在 GAN 里面,$R(\tau)$ 其实是一个 discriminator它就算是没有办法微分也无所谓你还是可以做接下来的运算。
取 gradient之后我们背一个公式
取 gradient之后我们背一个公式
$$
\nabla f(x)=f(x)\nabla \log f(x)
$$
@@ -141,8 +141,6 @@ $$
Update 完你的 model 以后。你要重新去收集 data再 update model。这边要注意一下一般 policy gradient sample 的 data 就只会用一次。你把这些 data sample 起来,然后拿去 update 参数,这些 data 就丢掉了。接着再重新 sample data才能够去 update 参数, 等一下我们会解决这个问题。
![](img/4.9.png)
接下来讲一些实现细节。实现方法是这个样子,把它想成一个分类的问题,在 classification 里面就是 input 一个 image然后 output 决定说是 10 个 class 里面的哪一个。在做 classification 时,我们要收集一堆 training data要有 input 跟 output 的 pair。
@@ -168,7 +166,7 @@ $$
![](img/4.11.png)
第一个 tip 是 add 一个 baseline。add baseline 是什么意思呢?如果 given state s 采取 action a 会给你整场游戏正面的 reward就要增加它的概率。如果 state s 执行 action a整场游戏得到负的 reward就要减少这一项的概率。
**第一个 tip 是 add 一个 baseline。** 如果 given state s 采取 action a 会给你整场游戏正面的 reward就要增加它的概率。如果 state s 执行 action a整场游戏得到负的 reward就要减少这一项的概率。
但在很多游戏里面, reward 总是正的,就是说最低都是 0。比如说打乒乓球游戏 你的分数就是介于 0 到 21 分之间,所以这个 R 总是正的。假设你直接套用这个式子, 在 training 的时候,告诉 model 说,不管是什么 action 你都应该要把它的概率提升。 在理想上,这么做并不一定会有问题。因为虽然说 R 总是正的,但它正的量总是有大有小,你在玩乒乓球那个游戏里面,得到的 reward 总是正的,但它是介于 0~21分之间有时候你采取某些 action 可能是得到 0 分,采取某些 action 可能是得到 20 分。
![](img/4.12.png)
@@ -195,13 +193,13 @@ $$
### Tip 2: Assign Suitable Credit
第二个 tip给每一个 action 合适的 credit。什么意思呢如果我们看今天下面这个式子的话
**第二个 tip给每一个 action 合适的 credit。**什么意思呢,如果我们看今天下面这个式子的话,
$$
\nabla \bar{R}_{\theta} \approx \frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_{n}}\left(R\left(\tau^{n}\right)-b\right) \nabla \log p_{\theta}\left(a_{t}^{n} \mid s_{t}^{n}\right)
$$
我们原来会做的事情是,在某一个 state假设你执行了某一个 action a它得到的 reward ,它前面乘上的这一项 $R(\tau^n)-b$。
只要在同一个 Episode 里面,在同一场游戏里面, 所有的 state 跟 a 的 pair它都会 weighted by 同样的 reward term这件事情显然是不公平的因为在同一场游戏里面 也许有些 action 是好的,有些 action 是不好的。 假设整场游戏的结果是好的, 并不代表这个游戏里面每一个行为都是对的。若是整场游戏结果不好, 但不代表游戏里面的所有行为都是错的。所以我们希望可以给每一个不同的 action 前面都乘上不同的 weight。每一个 action 的不同 weight 它反映了每一个 action 到底是好还是不好。
只要在同一个 episode 里面,在同一场游戏里面, 所有的 state 跟 a 的 pair它都会 weighted by 同样的 reward term这件事情显然是不公平的因为在同一场游戏里面 也许有些 action 是好的,有些 action 是不好的。 假设整场游戏的结果是好的, 并不代表这个游戏里面每一个行为都是对的。若是整场游戏结果不好, 但不代表游戏里面的所有行为都是错的。所以我们希望可以给每一个不同的 action 前面都乘上不同的 weight。每一个 action 的不同 weight 它反映了每一个 action 到底是好还是不好。
![](img/4.15.png)