fix ch6
This commit is contained in:
@@ -33,8 +33,6 @@ $$
|
||||
|
||||
### State Value Function Estimation
|
||||
|
||||
|
||||
|
||||
**怎么衡量这个状态价值函数 $V^{\pi}(s)$ 呢?**有两种不同的做法:MC-based 的方法和 TD-based 的方法。
|
||||
|
||||
` Monte-Carlo(MC)-based`的方法就是让演员去跟环境做互动,你要看演员好不好, 你就让演员去跟环境做互动,给评论家看。然后,评论家就统计说,
|
||||
@@ -42,7 +40,7 @@ $$
|
||||
* 演员如果看到状态 $s_a$,接下来的累积奖励会有多大。
|
||||
* 如果它看到状态 $s_b$,接下来的累积奖励会有多大。
|
||||
|
||||
但是实际上,你不可能把所有的状态通通都扫过。如果你是玩 Atari 游戏的话,状态是图像,你没有办法把所有的状态通通扫过。所以实际上 $V^{\pi}(s)$ 是一个网络。对一个网络来说,就算输入状态是从来都没有看过的,它也可以想办法估测一个值的值。
|
||||
但是实际上,你不可能把所有的状态通通都扫过。如果你是玩 Atari 游戏的话,状态是图像,你没有办法把所有的状态通通扫过。所以实际上 $V^{\pi}(s)$ 是一个网络。对一个网络来说,就算输入状态是从来都没有看过的,它也可以想办法估测一个值。
|
||||
|
||||

|
||||
|
||||
@@ -61,7 +59,7 @@ $$
|
||||
V^{\pi}\left(s_{t}\right)=V^{\pi}\left(s_{t+1}\right)+r_{t}
|
||||
$$
|
||||
|
||||
假设我们现在用的是某一个策略$\pi$,在状态 $s_t$,它会采取动作 $a_t$,给我们奖励 $r_t$ ,接下来进入 $s_{t+1}$ 。状态 $s_{t+1}$ 的值跟状态 $s_t$ 的值,它们的中间差了一项 $r_t$。因为你把 $s_{t+1}$ 得到的值加上得到的奖励 $r_t$ 就会等于 $s_t$ 得到的值。有了这个式子以后,你在训练的时候,你并不是直接去估测 V,而是希望你得到的结果 V 可以满足这个式子。
|
||||
假设我们现在用的是某一个策略 $\pi$,在状态 $s_t$,它会采取动作 $a_t$,给我们奖励 $r_t$ ,接下来进入 $s_{t+1}$ 。状态 $s_{t+1}$ 的值跟状态 $s_t$ 的值,它们的中间差了一项 $r_t$。因为你把 $s_{t+1}$ 得到的值加上得到的奖励 $r_t$ 就会等于 $s_t$ 得到的值。有了这个式子以后,你在训练的时候,你并不是直接去估测 V,而是希望你得到的结果 V 可以满足这个式子。
|
||||
|
||||
也就是说你会是这样训练的,你把 $s_t$ 丢到网络里面,因为 $s_t$ 丢到网络里面会得到 $V^{\pi}(s_t)$,把 $s_{t+1}$ 丢到你的值网络里面会得到 $V^{\pi}(s_{t+1})$,这个式子告诉我们,$V^{\pi}(s_t)$ 减 $V^{\pi}(s_{t+1})$ 的值应该是 $r_t$。然后希望它们两个相减的 loss 跟 $r_t$ 越接近,训练下去,更新 V 的参数,你就可以把 V function 学习出来。
|
||||
|
||||
@@ -153,7 +151,7 @@ Q-function 有两种写法:
|
||||
|
||||
它的大原则是这样,假设你有一个初始的演员,也许一开始很烂,随机的也没有关系。初始的演员叫做 $\pi$,这个 $\pi$ 跟环境互动,会收集数据。接下来你学习一个 $\pi$ 这个演员的 Q 值,你去衡量一下 $\pi$ 在某一个状态强制采取某一个动作,接下来用 $\pi$ 这个策略 会得到的期望奖励,用 TD 或 MC 都是可以的。你学习出一个 Q-function 以后,就保证你可以找到一个新的策略 $\pi'$ ,policy $\pi'$ 一定会比原来的策略 $\pi$ 还要好。那等一下会定义说,什么叫做好。所以假设你有一个 Q-function 和某一个策略 $\pi$,你根据策略 $\pi$ 学习出策略 $\pi$ 的 Q-function,接下来保证你可以找到一个新的策略 $\pi'$ ,它一定会比 $\pi$ 还要好,然后你用 $\pi'$ 取代 $\pi$,再去找它的 Q-function,得到新的以后,再去找一个更好的策略。**这样一直循环下去,policy 就会越来越好。**
|
||||
|
||||
首先要定义的是什么叫做比较好?我们说 $\pi'$ 一定会比 $\pi$ 还要好,什么叫做好呢?这边好是说,对所有可能的状态 s 而言,$V^{\pi^{\prime}}(s) \geq V^{\pi}(s)$。也就是说我们走到同一个状态 s 的时候,如果拿 $\pi$ 继续跟环境互动下去,我们得到的奖励一定会小于等于用 $\pi'$ 跟环境互动下去得到的奖励。所以不管在哪一个状态,你用 $\pi'$ 去做交互,得到的期望奖励一定会比较大。所以 $\pi'$ 是比 $\pi$ 还要好的一个策略。
|
||||
首先要定义的是什么叫做比较好?我们说 $\pi'$ 一定会比 $\pi$ 还要好,这边好是说,对所有可能的状态 s 而言,$V^{\pi^{\prime}}(s) \geq V^{\pi}(s)$。也就是说我们走到同一个状态 s 的时候,如果拿 $\pi$ 继续跟环境互动下去,我们得到的奖励一定会小于等于用 $\pi'$ 跟环境互动下去得到的奖励。所以不管在哪一个状态,你用 $\pi'$ 去做交互,得到的期望奖励一定会比较大。所以 $\pi'$ 是比 $\pi$ 还要好的一个策略。
|
||||
|
||||
有了 Q-function 以后,怎么找这个 $\pi'$ 呢?如果你根据以下的这个式子去决定你的动作,
|
||||
$$
|
||||
@@ -258,7 +256,7 @@ $$
|
||||
|
||||
所以你在学习的时候,你会说我们有 Q-function,输入 $s_t$, $a_t$ 得到的值,跟输入 $s_{t+1}$, $\pi (s_{t+1})$ 得到的值中间,我们希望它差了一个 $r_t$, 这跟刚才讲的 TD 的概念是一样的。
|
||||
|
||||
但是实际上这样的一个输入并不好学习,因为假设这是一个回归问题,$\mathrm{Q}^{\pi}\left(s_{t}, a_{t}\right) $ 是网络的输出,$r_{t}+\mathrm{Q}^{\pi}\left(s_{t+1}, \pi\left(s_{t+1}\right)\right)$ 是目标,你会发现目标是会动的。当然你要实现这样的训练,其实也没有问题,就是你在做反向传播的时候, $Q^{\pi}$ 的参数会被更新,你会把两个更新的结果加在一起。因为它们是同一个模型 $Q^{\pi}$, 所以两个更新的结果会加在一起。但这样会导致训练变得不太稳定,因为假设你把 $\mathrm{Q}^{\pi}\left(s_{t}, a_{t}\right) $ 当作你模型的输出, $r_{t}+\mathrm{Q}^{\pi}\left(s_{t+1}, \pi\left(s_{t+1}\right)\right)$ 当作目标的话,你要去拟合的目标是一直在变的,这种一直在变的目标的训练是不太好训练的。
|
||||
但是实际上这样的一个输入并不好学习,因为假设这是一个回归问题,$\mathrm{Q}^{\pi}\left(s_{t}, a_{t}\right) $ 是网络的输出,$r_{t}+\mathrm{Q}^{\pi}\left(s_{t+1}, \pi\left(s_{t+1}\right)\right)$ 是目标,你会发现目标是会动的。当然你要实现这样的训练,其实也没有问题,就是你在做反向传播的时候, $Q^{\pi}$ 的参数会被更新,你会把两个更新的结果加在一起。因为它们是同一个模型 $Q^{\pi}$, 所以两个更新的结果会加在一起。但这样会导致训练变得不太稳定,因为假设你把 $\mathrm{Q}^{\pi}\left(s_{t}, a_{t}\right) $ 当作你模型的输出,$r_{t}+\mathrm{Q}^{\pi}\left(s_{t+1}, \pi\left(s_{t+1}\right)\right)$ 当作目标的话,你要去拟合的目标是一直在变的,这种一直在变的目标的训练是不太好训练的。
|
||||
|
||||
所以你会把其中一个 Q 网络,通常是你会把右边这个 Q 网络固定住。也就是说你在训练的时候,你只更新左边的 Q 网络的参数,而右边的 Q 网络的参数会被固定住。因为右边的 Q 网络负责产生目标,所以叫 `目标网络`。因为目标网络是固定的,所以你现在得到的目标 $r_{t}+\mathrm{Q}^{\pi}\left(s_{t+1}, \pi\left(s_{t+1}\right)\right)$ 的值也是固定的。因为目标网络是固定的,我们只调左边网络的参数,它就变成是一个回归问题。我们希望模型的输出的值跟目标越接近越好,你会最小化它的均方误差(mean square error)。
|
||||
|
||||
@@ -320,7 +318,7 @@ A: 因为 Q 值是有正有负的,所以可以它弄成一个概率,你先
|
||||
|
||||

|
||||
|
||||
有了这个 buffer 以后,你是怎么训练这个 Q 的模型呢,怎么估 Q-function?你的做法是这样:你会迭代地去训练这个 Q-function,在每次迭代里面,你从这个 buffer 里面随机挑一个 batch 出来,就跟一般的网络训练一样,你从那个训练集里面,去挑一个 batch 出来。你去采样一个 batch 出来,里面有一把的经验,根据这把经验去更新你的 Q-function。就跟 TD learning 要有一个目标网络是一样的。你去采样一堆 batch,采样一个 batch 的数据,采样一堆经验,然后再去更新你的 Q-function。
|
||||
有了 buffer 以后,你是怎么训练 Q 的模型呢,怎么估 Q-function?你的做法是这样:你会迭代地去训练这个 Q-function,在每次迭代里面,你从这个 buffer 里面随机挑一个 batch 出来,就跟一般的网络训练一样,你从那个训练集里面,去挑一个 batch 出来。你去采样一个 batch 出来,里面有一把的经验,根据这把经验去更新你的 Q-function。就跟 TD learning 要有一个目标网络是一样的。你去采样一堆 batch,采样一个 batch 的数据,采样一堆经验,然后再去更新你的 Q-function。
|
||||
|
||||
当我们这么做的时候, 它变成了一个 `off-policy` 的做法。因为本来我们的 Q 是要观察 $\pi$ 的经验,但实际上存在你的 replay buffer 里面的这些经验不是通通来自于 $\pi$,有些是过去其他的 $\pi$ 所遗留下来的经验。因为你不会拿某一个 $\pi$ 就把整个 buffer 装满,然后拿去测 Q-function,这个 $\pi$ 只是采样一些数据塞到那个 buffer 里面去,然后接下来就让 Q 去训练。所以 Q 在采样的时候, 它会采样到过去的一些资料。
|
||||
|
||||
@@ -359,8 +357,8 @@ A: 整体来说,DQN 与 Q-learning 的目标价值以及价值的更新方式
|
||||
|
||||
* [Intro to Reinforcement Learning (强化学习纲要)](https://github.com/zhoubolei/introRL)
|
||||
* [神经网络与深度学习](https://nndl.github.io/)
|
||||
|
||||
* [强化学习基础 David Silver 笔记](https://zhuanlan.zhihu.com/c_135909947)
|
||||
* [百面深度学习](https://book.douban.com/subject/35043939/)
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user