fix ch7 typos

This commit is contained in:
qiwang067
2020-10-16 21:35:29 +08:00
parent 0bcba4fa1e
commit 630a771bb9

View File

@@ -2,9 +2,11 @@
## Double DQN
![](img/7.1.png)
接下来要讲的是 train Q-learning 的一些 tip。第一个 tip 是做 `Double DQN`。那为什么要有 Double DQN 呢?因为在实现上,你会发现 Q value 往往是被高估的。上图来自于 Double DQN 的原始 paper它想要显示的结果就是 Q value 往往是被高估的。这边有 4 个不同的小游戏,横轴是 training 的时间,红色锯齿状一直在变的线就是 Q-function 对不同的 state estimate 出来的平均 Q value有很多不同的 state每个 state 你都 sample 一下,然后算它们的 Q value把它们平均起来。红色这一条线它在 training 的过程中会改变,但它是不断上升的,为什么它不断上升,因为 Q-function 是 depend on 你的 policy 的。learn 的过程中你的 policy 越来越强,所以你得到 Q value 会越来越大。在同一个 state 你得到 expected reward 会越来越大,所以 general 而言,这个值都是上升的,但这是 Q-network 估测出来的值。
接下来要讲的是 train Q-learning 的一些 tip。第一个 tip 是做 `Double DQN`。那为什么要有 Double DQN 呢?因为在实现上,你会发现 Q value 往往是被高估的。上图来自于 Double DQN 的原始 paper它想要显示的结果就是 Q value 往往是被高估的。
接下来你真地去算它,那怎么真地去算?你有那个 policy然后真的去玩那个游戏。就玩很多次玩个一百万次。然后就去真地估说在某一个 state 你会得到的 Q value 到底有多少。你会得到说在某一个 state采取某一个 action。你接下来会得到 accumulated reward 是多少。你会发现估测出来的值是远比实际的值大。在每一个游戏都是这样,都大很多。所以今天要 propose Double DQN 的方法它可以让估测的值跟实际的值是比较接近的。我们先看它的结果蓝色的锯齿状的线是Double DQN 的 Q-network 所估测出来的 Q value蓝色的无锯齿状的线是真正的 Q value你会发现它们是比较接近的。 用 network 估测出来的就不用管它,比较没有参考价值。用 Double DQN 得出来真正的 accumulated reward在这 3 个 case 都是比原来的 DQN 高的,代表 Double DQN learn 出来那个 policy 比较强。所以它实际上得到的 reward 是比较大的。虽然一般的 DQN 的 Q-network 高估了自己会得到的 reward但实际上它得到的 reward 是比较低的
这边有 4 个不同的小游戏,横轴是 training 的时间,红色锯齿状一直在变的线就是 Q-function 对不同的 state estimate 出来的平均 Q value有很多不同的 state每个 state 你都 sample 一下,然后算它们的 Q value把它们平均起来。红色这一条线它在 training 的过程中会改变,但它是不断上升的,为什么它不断上升,因为 Q-function 是 depend on 你的 policy 的。learn 的过程中你的 policy 越来越强,所以你得到 Q value 会越来越大。在同一个 state 你得到 expected reward 会越来越大,所以 general 而言,这个值都是上升的,但这是 Q-network 估测出来的值
接下来你真地去算它,那怎么真地去算?你有那个 policy然后真的去玩那个游戏。就玩很多次玩个一百万次。然后就去真地估说在某一个 state 你会得到的 Q value 到底有多少。你会得到说在某一个 state采取某一个 action。你接下来会得到 accumulated reward 是多少。你会发现估测出来的值是远比实际的值大。在每一个游戏都是这样,都大很多。所以今天要 propose Double DQN 的方法,它可以让估测的值跟实际的值是比较接近的。我们先看它的结果,蓝色的锯齿状的线是 Double DQN 的 Q-network 所估测出来的 Q value蓝色的无锯齿状的线是真正的 Q value你会发现它们是比较接近的。 用 network 估测出来的就不用管它,比较没有参考价值。用 Double DQN 得出来真正的 accumulated reward在这 3 个 case 都是比原来的 DQN 高的,代表 Double DQN learn 出来那个 policy 比较强。所以它实际上得到的 reward 是比较大的。虽然一般的 DQN 的 Q-network 高估了自己会得到的 reward但实际上它得到的 reward 是比较低的。
![](img/7.2.png)
@@ -17,7 +19,7 @@ A: 因为实际上在做的时候,是要让左边这个式子跟右边这个 t
![](img/7.3.png)
Q: 怎么解决这target 总是太大的问题呢?
A: 在 Double DQN 里面,选 action 的 Q-function 跟算 value 的 Q-function不是同一个。在原来的DQN 里面,你穷举所有的 a把每一个 a 都带进去, 看哪一个 a 可以给你的 Q value 最高,那你就把那个 Q value 加上 $r_t$。但是在 Double DQN 里面,你有两个 Q-network第一个 Q-network决定哪一个 action 的 Q value 最大你用第一个 Q-network 去带入所有的 a去看看哪一个 Q value 最大。然后你决定你的 action 以后,你的 Q value 是用 $Q'$ 算出来的,这样子有什么好处呢?为什么这样就可以避免 over estimate 的问题呢?因为今天假设我们有两个 Q-function假设第一个 Q-function 高估了它现在选出来的 action a那没关系只要第二个 Q-function $Q'$ 没有高估这个 action a 的值,那你算出来的就还是正常的值。假设反过来是 $Q'$ 高估了某一个 action 的值,那也没差, 因为反正只要前面这个 Q 不要选那个 action 出来就没事了这个就是 Double DQN 神奇的地方。
A: 在 Double DQN 里面,选 action 的 Q-function 跟算 value 的 Q-function不是同一个。在原来的DQN 里面,你穷举所有的 a把每一个 a 都带进去, 看哪一个 a 可以给你的 Q value 最高,那你就把那个 Q value 加上 $r_t$。但是在 Double DQN 里面,你有两个 Q-network第一个 Q-network决定哪一个 action 的 Q value 最大你用第一个 Q-network 去带入所有的 a去看看哪一个 Q value 最大。你决定你的 action 以后,你的 Q value 是用 $Q'$ 算出来的,这样子有什么好处呢?为什么这样就可以避免 over estimate 的问题呢?因为假设我们有两个 Q-function假设第一个 Q-function 高估了它现在选出来的 action a那没关系只要第二个 Q-function $Q'$ 没有高估这个 action a 的值,那你算出来的就还是正常的值。假设反过来是 $Q'$ 高估了某一个 action 的值,那也没差, 因为反正只要前面这个 Q 不要选那个 action 出来就没事了这个就是 Double DQN 神奇的地方。
Q: 哪来 Q 跟 $Q'$ 呢?哪来两个 network 呢?
@@ -27,7 +29,7 @@ A: 在实现上,你有两个 Q-network 一个是 target 的 Q-network
## Dueling DQN
![](img/7.4.png)
第二个 tip 是 `Dueling DQN`。其实 Dueling DQN 也蛮好做的,相较于原来的 DQN它唯一的差别是改了 network 的架构Dueling DQN 唯一做的事情是改 network 的架构。Q-network 就是 input stateoutput 就是每一个 action 的Q value。Dueling DQN 唯一做的事情是改了 network 的架构,其它的算法,你都不要去动它。
第二个 tip 是 `Dueling DQN`。其实 Dueling DQN 也蛮好做的,相较于原来的 DQN它唯一的差别是改了 network 的架构Dueling DQN 唯一做的事情是改 network 的架构。Q-network 就是 input stateoutput 就是每一个 action 的Q value。Dueling DQN 唯一做的事情是改了 network 的架构,其它的算法,你都不要去动它。
Q: Dueling DQN 是怎么改了 network 的架构呢?
@@ -71,15 +73,15 @@ $$
## Balance between MC and TD
![](img/7.8.png)
另外一个可以做的方法是,你可以 balance MC 跟 TD。MC 跟 TD 的方法各自有各自的优劣。我们怎么在 MC 跟 TD 里面取得一个平衡呢?我们的做法是这样,在 TD 里面,在某一个 state $s_t$ 采取某一个 action $a_t$ 得到 reward $r_t$,接下来跳到那一个 state $s_{t+1}$。但是我们可以不要只存一个 step 的data我们存 N 个 step 的 data。
**另外一个可以做的方法是 balance MC 跟 TD。**MC 跟 TD 的方法各自有各自的优劣怎么在 MC 跟 TD 里面取得一个平衡呢?我们的做法是这样,在 TD 里面,在某一个 state $s_t$ 采取某一个 action $a_t$ 得到 reward $r_t$,接下来跳到那一个 state $s_{t+1}$。但是我们可以不要只存一个 step 的data我们存 N 个 step 的 data。
我们记录在 $s_t$ 采取 $a_t$,得到 $r_t$,会跳到什么样 $s_t$。一直纪录到在第 N 个step 以后,在 $s_{t+N}$采取 $a_{t+N}$得到 reward $r_{t+N}$,跳到 $s_{t+N+1}$ 的这个经验,通通把它存下来。实际上你今天在做 update 的时候, 在做 Q-network learning 的时候,你的 learning 的方法会是这样,你 learning 的时候,要让 $Q(s_t,a_t)$ 跟你的 target value 越接近越好。$\hat{Q}$ 所计算的不是 $s_{t+1}$,而是 $s_{t+N+1}$的。你会把 N 个step 以后的 state 丢进来,去计算 N 个 step 以后,你会得到的 reward。要算 target value 的话,要再加上 multi-step 的 reward $\sum_{t^{\prime}=t}^{t+N} r_{t^{\prime}}$ multi-step 的 reward 是从时间 t 一直到 t+N 的 N 个reward 的和。然后希望你的 $Q(s_t,a_t)$ 和 target value 越接近越好。
我们记录在 $s_t$ 采取 $a_t$,得到 $r_t$,会跳到什么样 $s_t$。一直纪录到在第 N 个 step 以后,在 $s_{t+N}$采取 $a_{t+N}$得到 reward $r_{t+N}$,跳到 $s_{t+N+1}$ 的这个经验,通通把它存下来。实际上你今天在做 update 的时候, 在做 Q-network learning 的时候,你的 learning 的方法会是这样,你 learning 的时候,要让 $Q(s_t,a_t)$ 跟你的 target value 越接近越好。$\hat{Q}$ 所计算的不是 $s_{t+1}$,而是 $s_{t+N+1}$的。你会把 N 个 step 以后的 state 丢进来,去计算 N 个 step 以后,你会得到的 reward。要算 target value 的话,要再加上 multi-step 的 reward $\sum_{t^{\prime}=t}^{t+N} r_{t^{\prime}}$ multi-step 的 reward 是从时间 t 一直到 t+N 的 N 个reward 的和。然后希望你的 $Q(s_t,a_t)$ 和 target value 越接近越好。
你会发现说这个方法就是 MC 跟 TD 的结合。因此它就有 MC 的好处跟坏处,也有 TD 的好处跟坏处。如果看它的这个好处的话,因为我们现在 sample 了比较多的 step之前是只 sample 了一个 step 所以某一个 step 得到的 data 是 real 的,接下来都是 Q value 估测出来的。现在 sample 比较多 stepsample N 个 step 才估测 value所以估测的部分所造成的影响就会比小。当然它的坏处就跟 MC 的坏处一样,因为你的 r 比较多项,你把 N 项的 r 加起来,你的 variance 就会比较大。但是你可以去调这个 N 的值,去在 variance 跟不精确的 Q 之间取得一个平衡。N 就是一个 hyper parameter你要调这个 N 到底是多少,你是要多 sample 三步,还是多 sample 五步。
你会发现说这个方法就是 MC 跟 TD 的结合。因此它就有 MC 的好处跟坏处,也有 TD 的好处跟坏处。如果看它的这个好处的话,因为我们现在 sample 了比较多的 step之前是只 sample 了一个 step 所以某一个 step 得到的 data 是 real 的,接下来都是 Q value 估测出来的。现在 sample 比较多 stepsample N 个 step 才估测 value所以估测的部分所造成的影响就会比小。当然它的坏处就跟 MC 的坏处一样,因为你的 r 比较多项,你把 N 项的 r 加起来,你的 variance 就会比较大。但是你可以去调这个 N 的值,去在 variance 跟不精确的 Q 之间取得一个平衡。N 就是一个 hyperparameter你要调这个 N 到底是多少,你是要多 sample 三步,还是多 sample 五步。
## Noisy Net
![](img/7.9.png)
有一个技术是要 improve 这个 exploration 这件事,我们之前讲的 Epsilon Greedy 这样的 exploration 是在 action 的space 上面加 noise但是有另外一个更好的方法叫做`Noisy Net`,它是在参数的 space 上面加 noise。Noisy Net 的意思是说,每一次在一个 episode 开始的时候,在你要跟环境互动的时候,你就把你的 Q-function 拿出来Q-function 里面其实就是一个 network ,就变成你把那个 network 拿出来,在 network 的每一个参数上面加上一个 Gaussian noise。那你就把原来的 Q-function 变成$\tilde{Q}$ 。因为$\hat{Q}$ 已经用过,$\hat{Q}$ 是那个 target network我们用 $\tilde{Q}$ 来代表一个`Noisy Q-function`。我们把每一个参数都可能都加上一个 Gaussian noise就得到一个新的 network 叫做 $\tilde{Q}$。这边要注意在每个episode 开始的时候,开始跟环境互动之前,我们就 sample network。接下来你就会用这个固定住的 noisy network 去玩这个游戏,直到游戏结束,你才重新再去 sample 新的 noise。OpenAI 跟 Deep mind 又在同时间 propose 一模一样的方法,通通都 publish 在 ICLR 2018两篇 paper 的方法就是一样的。不一样的地方是他们用不同的方法去加noise。OpenAI 加的方法好像比较简单,他就直接加一个 Gaussian noise 就结束了,就你把每一个参数,每一个 weight都加一个 Gaussian noise 就结束了。Deep mind 做比较复杂,他们的 noise 是由一组参数控制的,也就是说 network 可以自己决定说它那个 noise 要加多大,但是概念就是一样的。总之就是把你的 Q-function 的里面的那个 network 加上一些 noise把它变得有点不一样跟原来的 Q-function 不一样,然后拿去跟环境做互动。两篇 paper 里面都有强调说,你这个参数虽然会加 noise但在同一个 episode 里面你的参数就是固定的,你是在换 episode 玩第二场新的游戏的时候,你才会重新 sample noise在同一场游戏里面就是同一个 noisy Q-network 在玩那一场游戏,这件事非常重要。为什么这件事非常重要呢?因为这是导致了 Noisy Net 跟原来的 Epsilon Greedy 或其它在 action 做 sample 方法的本质上的差异。
有一个技术是要 improve exploration 这件事,我们之前讲的 Epsilon Greedy 这样的 exploration 是在 action 的 space 上面加 noise但是有另外一个更好的方法叫做`Noisy Net`,它是在参数的 space 上面加 noise。Noisy Net 的意思是说,每一次在一个 episode 开始的时候,在你要跟环境互动的时候,你就把你的 Q-function 拿出来Q-function 里面其实就是一个 network ,就变成你把那个 network 拿出来,在 network 的每一个参数上面加上一个 Gaussian noise。那你就把原来的 Q-function 变成$\tilde{Q}$ 。因为$\hat{Q}$ 已经用过,$\hat{Q}$ 是那个 target network我们用 $\tilde{Q}$ 来代表一个`Noisy Q-function`。我们把每一个参数都可能都加上一个 Gaussian noise就得到一个新的 network 叫做 $\tilde{Q}$。这边要注意在每个episode 开始的时候,开始跟环境互动之前,我们就 sample network。接下来你就会用这个固定住的 noisy network 去玩这个游戏,直到游戏结束,你才重新再去 sample 新的 noise。OpenAI 跟 Deep mind 又在同时间 propose 一模一样的方法,通通都 publish 在 ICLR 2018两篇 paper 的方法就是一样的。不一样的地方是他们用不同的方法去加noise。OpenAI 加的方法好像比较简单,他就直接加一个 Gaussian noise 就结束了,就你把每一个参数,每一个 weight都加一个 Gaussian noise 就结束了。Deep mind 做比较复杂,他们的 noise 是由一组参数控制的,也就是说 network 可以自己决定说它那个 noise 要加多大,但是概念就是一样的。总之就是把你的 Q-function 的里面的那个 network 加上一些 noise把它变得有点不一样跟原来的 Q-function 不一样,然后拿去跟环境做互动。两篇 paper 里面都有强调说,你这个参数虽然会加 noise但在同一个 episode 里面你的参数就是固定的,你是在换 episode 玩第二场新的游戏的时候,你才会重新 sample noise在同一场游戏里面就是同一个 noisy Q-network 在玩那一场游戏,这件事非常重要。为什么这件事非常重要呢?因为这是导致了 Noisy Net 跟原来的 Epsilon Greedy 或其它在 action 做 sample 方法的本质上的差异。
![](img/7.10.png)
@@ -92,13 +94,19 @@ $$
![](img/7.12.png)
Distributional Q-function 它想要做的事情是 model distribution怎么做呢在原来的 Q-function 里面,假设你只能够采取 $a_1$, $a_2$, $a_3$, 3 个 actions那你就是 input 一个 stateoutput 3 个 values。3 个 values 分别代表 3 个 actions 的 Q value但是这个 Q value 是一个 distribution 的期望值。所以 Distributional Q-function 的想法就是何不直接 output 那个 distribution。但是要直接 output 一个 distribution 也不知道怎么做。实际上的做法是说, 假设 distribution 的值就分布在某一个 range 里面,比如说 -10 到10那把 -10 到10 中间拆成一个一个的 bin拆成一个一个的长条图。举例来说在这个例子里面每一个 action 的 reward 的 space 就拆成 5 个bin。假设 reward 可以拆成 5 个 bin 的话,今天你的 Q-function 的 output 是要预测说,你在某一个 state采取某一个 action你得到的 reward落在某一个 bin 里面的概率。所以其实这边的概率的和,这些绿色的 bar 的和应该是 1它的高度代表说在某一个 state采取某一个 action 的时候,它落在某一个 bin 的机率。这边绿色的代表 action 1红色的代表 action 2蓝色的代表 action 3。所以今天你就可以真的用 Q-function 去 estimate $a_1$ 的 distribution$a_2$ 的 distribution$a_3$ 的 distribution。那实际上在做 testing 的时候, 我们还是要选某一个 action去执行嘛那选哪一个 action 呢?实际上在做的时候,还是选这个 mean 最大的那个 action 去执行。但假设我们今天可以 model distribution 的话,除了选 mean 最大的以外,也许在未来你可以有更多其他的运用。举例来说,你可以考虑它的 distribution 长什么样子。若 distribution variance 很大代表说采取这个action 虽然mean 可能平均而言很不错但也许风险很高你可以train一个network 它是可以规避风险的。就在 2 个action mean 都差不多的情况下,也许可以选一个风险比较小的 action 来执行,这是 Distributional Q-function 的好处。关于怎么 train 这样的 Q-network 的细节,我们就不讲,你只要记得说 Q-network 有办法 output 一个 distribution 就对了。我们可以不只是估测得到的期望 reward mean 的值。我们其实是可以估测一个 distribution 的。
Distributional Q-function 它想要做的事情是 model distribution怎么做呢在原来的 Q-function 里面,假设你只能够采取 $a_1$, $a_2$, $a_3$3 个 actions那你就是 input 一个 stateoutput 3 个 values。3 个 values 分别代表 3 个 actions 的 Q value但是这个 Q value 是一个 distribution 的期望值。所以 Distributional Q-function 的想法就是何不直接 output 那个 distribution。但是要直接 output 一个 distribution 也不知道怎么做。
实际上的做法是说, 假设 distribution 的值就分布在某一个 range 里面,比如说 -10 到 10那把 -10 到 10 中间拆成一个一个的 bin拆成一个一个的长条图。举例来说在这个例子里面每一个 action 的 reward 的 space 就拆成 5 个 bin。假设 reward 可以拆成 5 个 bin 的话,今天你的 Q-function 的 output 是要预测说,你在某一个 state采取某一个 action你得到的 reward落在某一个 bin 里面的概率。
所以其实这边的概率的和,这些绿色的 bar 的和应该是 1它的高度代表说在某一个 state 采取某一个 action 的时候,它落在某一个 bin 的机率。这边绿色的代表 action 1红色的代表 action 2蓝色的代表 action 3。所以今天你就可以真的用 Q-function 去 estimate $a_1$ 的 distribution$a_2$ 的 distribution$a_3$ 的 distribution。那实际上在做 testing 的时候, 我们还是要选某一个 action 去执行,那选哪一个 action 呢?实际上在做的时候,还是选这个 mean 最大的那个 action 去执行。
但假设我们可以 model distribution 的话,除了选 mean 最大的以外,也许在未来你可以有更多其他的运用。举例来说,你可以考虑它的 distribution 长什么样子。如果 distribution variance 很大,代表说采取这个 action 虽然 mean 可能平均而言很不错,但也许风险很高,你可以 train一个 network 它是可以规避风险的。就在 2 个 action mean 都差不多的情况下,也许可以选一个风险比较小的 action 来执行,这是 Distributional Q-function 的好处。关于怎么 train 这样的 Q-network 的细节,我们就不讲,你只要记得说 Q-network 有办法 output 一个 distribution 就对了。我们可以不只是估测得到的期望 reward mean 的值。我们其实是可以估测一个 distribution 的。
## Rainbow
![](img/7.13.png)
最后一个技巧叫做 rainbow把刚才所有的方法都综合起来就变成 rainbow 。因为刚才每一个方法,就是有一种自己的颜色,把所有的颜色通通都合起来,就变成 rainbow它把原来的 DQN 也算是一种方法,故有 7 色。
**最后一个技巧叫做 rainbow把刚才所有的方法都综合起来就变成 rainbow 。**因为刚才每一个方法,就是有一种自己的颜色,把所有的颜色通通都合起来,就变成 rainbow它把原来的 DQN 也算是一种方法,故有 7 色。
那我们来看看这些不同的方法。横轴是 training process纵轴是玩了 10 几个 Atari 小游戏的平均的分数的和,但它取的是 median 的分数,为什么是取 median 不是直接取平均呢?因为它说每一个小游戏的分数,其实差很多。如果你取平均的话,到时候某几个游戏就 dominate 你的结果,所以它取 median 的值。
@@ -108,4 +116,4 @@ Distributional Q-function 它想要做的事情是 model distribution怎么
上图是说,在 rainbow 这个方法里面, 如果我们每次拿掉其中一个技术,到底差多少。因为现在是把所有的方法都加在一起,发现说进步很多,但会不会有些方法其实是没用的。所以看看说, 每一个方法哪些方法特别有用,哪些方法特别没用。这边的虚线就是拿掉某一种方法以后的结果,你会发现说,黄色的虚线,拿掉 multi-step 掉很多。Rainbow 是彩色这一条,拿掉 multi-step 会掉下来。拿掉 Prioritized Experience Replay 后也马上就掉下来。拿掉这个 distribution它也掉下来。
这边有一个有趣的地方是说在开始的时候distribution 训练的方法跟其他方法速度差不多。但是如果你拿掉distribution 的时候,你的训练不会变慢,但是 performance 最后会收敛在比较差的地方。拿掉 Noisy Net 后performance 也是差一点。拿掉 Dueling 也是差一点。拿掉 Double 没什么差所以看来全部合在一起的时候Double 是比较没有影响的。其实在 paper 里面有给一个 make sense 的解释,其实当你有用 Distributional DQN的 时候,本质上就不会 over estimate 你的 reward。我们是为了避免 over estimate reward 才加了 Double DQN。那在 paper 里面有讲说,如果有做 Distributional DQN就比较不会有 over estimate 的结果。 事实上他有真的算了一下发现说,其实多数的状况是 under estimate reward 的,所以变成 Double DQN 没有用。那为什么做 Distributional DQN不会 over estimate reward反而会 under estimate reward 呢?因为这个 distributional DQN 的 output 的是一个 distribution 的rangeoutput 的 range 不可能是无限宽的,你一定是设一个 range 比如说我最大 output range 就是从-10 到10。假设今天得到的 reward 超过 10 怎么办是100 怎么办,就当作没看到这件事。所以 reward 很极端的值,很大的值其实是会被丢掉的, 所以用 Distributional DQN 的时候,你不会有 over estimate 的现象,反而会 under estimate。
这边有一个有趣的地方是说在开始的时候distribution 训练的方法跟其他方法速度差不多。但是如果你拿掉distribution 的时候,你的训练不会变慢,但是 performance 最后会收敛在比较差的地方。拿掉 Noisy Net 后performance 也是差一点。拿掉 Dueling 也是差一点。拿掉 Double 没什么差所以看来全部合在一起的时候Double 是比较没有影响的。其实在 paper 里面有给一个 make sense 的解释,其实当你有用 Distributional DQN的 时候,本质上就不会 over estimate 你的 reward。我们是为了避免 over estimate reward 才加了 Double DQN。那在 paper 里面有讲说,如果有做 Distributional DQN就比较不会有 over estimate 的结果。 事实上他有真的算了一下发现说,其实多数的状况是 under estimate reward 的,所以变成 Double DQN 没有用。那为什么做 Distributional DQN不会 over estimate reward反而会 under estimate reward 呢?因为这个 distributional DQN 的 output 的是一个 distribution 的 rangeoutput 的 range 不可能是无限宽的,你一定是设一个 range 比如说我最大 output range 就是从 -10 到 10。假设今天得到的 reward 超过 10 怎么办?是 100 怎么办,就当作没看到这件事。所以 reward 很极端的值,很大的值其实是会被丢掉的, 所以用 Distributional DQN 的时候,你不会有 over estimate 的现象,反而会 under estimate。