This commit is contained in:
qiwang067
2021-02-27 10:56:07 +08:00
parent cb0805940f
commit d8dbc83c18

View File

@@ -44,7 +44,7 @@ $$
但是实际上,你不可能把所有的状态通通都扫过。如果你是玩 Atari 游戏的话,状态是图像,你没有办法把所有的状态通通扫过。所以实际上 $V^{\pi}(s)$ 是一个网络。对一个网络来说,就算输入状态是从来都没有看过的,它也可以想办法估测一个值的值。
![](img/6.2.png ':size=550')
![](img/6.2.png ':size=450')
怎么训练这个网络呢?因为如果在状态 $s_a$,接下来的累积奖励就是 $G_a$。也就是说,对这个价值函数来说,如果输入是状态 $s_a$,正确的输出应该是 $G_a$。如果输入状态 $s_b$,正确的输出应该是值 $G_b$。**所以在训练的时候, 它就是一个 `回归问题(regression problem)`。**网络的输出就是一个值,你希望在输入 $s_a$ 的时候,输出的值跟 $G_a$ 越近越好,输入 $s_b$ 的时候,输出的值跟 $G_b$ 越近越好。接下来把网络训练下去,就结束了。这是 MC-based 的方法。
@@ -247,7 +247,7 @@ $$
## Target Network
![](img/6.12.png)
![](img/6.12.png ':size=550')
接下来讲一下在 DQN 里你一定会用到的 tip。第一个是 `目标网络(target network)`,什么意思呢?我们在学习 Q-function 的时候,也会用到 TD 的概念。那怎么用 TD你现在收集到一个数据 是说在状态 $s_t$,你采取动作 $a_t$ 以后,你得到奖励 $r_t$ ,然后跳到状态 $s_{t+1}$。然后根据这个 Q-function你会知道说
$$
@@ -276,12 +276,13 @@ $$
因为 Q target 也是跟模型参数相关的所以每次优化后Q target 也会动。这就导致一个问题,猫和老鼠都在动。
![](img/6.15.png ':size=550')
然后它们就会在优化空间里面到处乱动,就会产生非常奇怪的优化轨迹,这就使得训练过程十分不稳定。所以我们可以固定 Q target让老鼠动得不是那么频繁可能让它每 5 步动一次,猫则是每一步都在动。如果老鼠每 5 次动一步的话猫就有足够的时间来接近老鼠。然后它们之间的距离会随着优化过程越来越小最后它们就可以拟合拟合过后就可以得到一个最好的Q 网络。
## Exploration
![](img/6.16.png)
![](img/6.16.png ':size=550')
**第二个 tip 是`探索(Exploration)`。**当我们使用 Q-function 的时候policy 完全取决于 Q-function。给定某一个状态你就穷举所有的 a 看哪个 a 可以让 Q 值最大,它就是采取的动作。这个跟策略梯度不一样,在做策略梯度的时候,输出其实是随机的。我们输出一个动作的分布,根据这个动作的分布去做采样, 所以在策略梯度里面,你每次采取的动作是不一样的,是有随机性的。
@@ -310,7 +311,7 @@ A: 因为 Q 值是有正有负的,所以可以它弄成一个概率,你先
## Experience Replay
![](img/6.17.png)
![](img/6.17.png ':size=550')
**第三个 tip 是 `Experience Replay(经验回放)`。** Experience Replay 会构建一个 `Replay Buffer`Replay Buffer 又被称为 `Replay Memory`。Replay Buffer 是说现在会有某一个策略$\pi$ 去跟环境做互动,然后它会去收集数据。我们会把所有的数据 放到一个 buffer 里面buffer 里面就存了很多数据。比如说 buffer 是 5 万,这样它里面可以存 5 万笔资料,每一笔资料就是记得说,我们之前在某一个状态 $s_t$,采取某一个动作 $a_t$,得到了奖励 $r_t$。然后跳到状态 $s_{t+1}$。那你用 $\pi$ 去跟环境互动很多次,把收集到的资料都放到这个 replay buffer 里面。