文章目录

  • 一、双深度Q网络(DDQN)
  • 二、竞争深度Q网络(Dueling DQN)
  • 三、优先级经验回放
  • 四、在蒙特卡洛方法和时序差分方法中取得平衡
  • 五、噪声深度Q网络(Noisy DQN)
  • 六、分布式深度Q网络(Distributional DQN)
  • 七、彩虹深度Q网络(Rainbow DQN)
  • 八、关键词总结
  • 九、习题
  • 十、面试题

本章介绍训练深度Q网络的一些技巧

一、双深度Q网络(DDQN)

第一个技巧是双深度Q网络(double DQN,DDQN)。为什么要有DDQN呢?因为在实现上,Q 值往往是被高估的。如下图所示,这里有 4 个不同的小游戏,横轴代表迭代轮次,红色锯齿状的一直在变的线表示Q函数对不同的状态估计的平均 Q 值,有很多不同的状态,每个状态我们都进行采样,算出它们的 Q 值,然后进行平均。这条红色锯齿状的线在训练的过程中会改变,但它是不断上升的。因为Q函数是取决于策略的,在学习的过程中策略越来越强,我们得到的 Q 值会越来越大。在同一个状态, 我们得到奖励的期望会越来越大,所以一般而言,Q值都是上升的,但这是深度Q网络预估出来的值。接下来我们就用策略去玩游戏,玩很多次,比如100万次,然后计算在某一个状态下,我们得到的 Q 值是多少。我们会得到在某一个状态采取某一个动作的累积奖励是多少。DQN预估出来的值远比真实值大,且大很多,在每一个游戏中都是这样。所以DDQN的方法可以让预估值与真实值比较接近

上图中蓝色的锯齿状的线是 DDQN 的Q网络所估测出来的 Q 值,蓝色的无锯齿状的线是真正的 Q 值,它们是比较接近的。我们不用管用网络估测的值,它比较没有参考价值。我们用DDQN得出的真正的Q值在上图的3 种情况下都是比原来的深度Q网络高的,代表DDQN学习出来的策略比较强,所以实际上得到的奖励是比较大的。虽然一般的 深度Q网络 的 Q网络高估了自己会得到的奖励,但实际上它得到的奖励是比较低的

Q: 为什么 Q 值总是被高估了?
A:因为实际在训练的时候,如下式所示,我们要让左式与右式(目标)越接近越好。但目标的值很容易被设得太高,因为在计算目标的时候,我们实际上在做的,是看哪一个 a 可以得到最大的 Q 值,就把它加上去变成目标。
Q(st,at)⟷rt+max⁡aQ(st+1,a)Q\left(s_t, a_t\right) \longleftrightarrow r_t+\max _a Q\left(s_{t+1}, a\right) Q(st​,at​)⟷rt​+amax​Q(st+1​,a)

例如,假设我们现在有 4 个动作,本来它们得到的 QQQ 值都是差不多的,它们得到的奖励也是差 不多的。但是在估计的时候,网络是有误差的。

如下图(a) 所示,假设是第一个动作被高估 了,绿色代表是被高估的量,智能体就会选这个动作,就会选这个高估的 Q\mathrm{Q}Q 值来加上 rtr_trt​ 来当 作目标。如下图(b) 所示,如果第四个动作被高估了,智能体就会选第四个动作来加上 rtr_trt​ 当 作目标。所以智能体总是会选那个 QQQ 值被高估的动作,总是会选奖励被高估的动作的 QQQ 值当作 最大的结果去加上 rtr_trt​ 当作目标,所以目标值总是太大。

Q: 怎么解决目标值总是太大的问题呢?
A : 在DDQN里面,选动作的 Q\mathrm{Q}Q 函数与计算值的 Q\mathrm{Q}Q 函数不是同一个。在原来的深度 Q\mathrm{Q}Q 网络 里面,我 们穷举所有的 aaa ,把每一个 aaa 都代入 Q\mathrm{Q}Q 函数,看哪一个 aaa 可以得到的 Q\mathrm{Q}Q 值最高,就把那个 Q\mathrm{Q}Q 值 加上 rtr_trt​ 。但是在 DDQN\mathrm{DDQN}DDQN 里面有两个 Q\mathrm{Q}Q 网络,第一个 Q\mathrm{Q}Q 网络 Q\mathrm{Q}Q 决定哪一个动作的 Q\mathrm{Q}Q 值最大 (我们 把所有的 aaa 代入 Q\mathrm{Q}Q 函数中,看看哪一个 aaa 的 Q\mathrm{Q}Q 值最大)。我们决定动作以以后, Q\mathrm{Q}Q 值是用 Q′Q^{\prime}Q′ 算 出来的。

如下式所示,假设我们有两个Q函数: QQQ 和 Q′Q^{\prime}Q′ ,如果 QQQ 高估了它选出来的动作 aaa ,只要 Q′Q^{\prime}Q′ 没有高估动作 aaa 的值,算出来的就还是正常的值。假设 Q′Q^{\prime}Q′ 高估了某一个动作的值,也 是没问题的,因为只要 QQQ 不选这个动作就可以,这就是DDQN神奇的地方。
Q(st,at)⟷rt+Q′(st+1,arg⁡max⁡aQ(st+1,a))Q\left(s_t, a_t\right) \longleftrightarrow r_t+Q^{\prime}\left(s_{t+1}, \arg \max _a Q\left(s_{t+1}, a\right)\right) Q(st​,at​)⟷rt​+Q′(st+1​,argamax​Q(st+1​,a))
我们动手实现的时候,有两个 Q\mathrm{Q}Q 网络:会更新的 Q\mathrm{Q}Q 网络和目标 Q\mathrm{Q}Q 网络。所以在DDQN里面,我们 会用会更新参数的 QQQ 网络去选动作,用目标 QQQ 网络(固定住的网络) 计算值。
DDQND D Q NDDQN 相较于原来的深度 QQQ 网络的更改是最少的,它几乎没有增加任何的运算量,也不需要新的 网络,因为原来就有两个网络。我们只需要做一件事:本来是用目标网络 Q′Q^{\prime}Q′ 来找使 Q\mathrm{Q}Q 值最大 的 aaa ,现在改成用另外一个会更新的Q网络来找使 Q\mathrm{Q}Q 值最大的 aaa 。如果只选一个技巧,我们一 般都会选DDQN,因为其很容易实现。


二、竞争深度Q网络(Dueling DQN)

第二个技巧是竞争深度 Q\mathrm{Q}Q 网络 (Dueling DQN),相较于原来的 深度 Q\mathrm{Q}Q 网络,它唯一的差别是改 变了网络的架构。 QQQ 网络输入状态,输出的是每一个动作的 QQQ 值。如下图所示,原来的深度 QQQ 网络直接输出 QQQ 值,竞争深度 QQQ 网络不直接输出 QQQ 值,而是分成两条路径运算。第一条路径会 输出一个标量 V(s)V(s)V(s) ,因为它与输入 sss 是有关系的,所以称为 V(s)V(s)V(s) 。第二条路径会输出一个 向量 A(s,a)\boldsymbol{A}(\boldsymbol{s}, \boldsymbol{a})A(s,a) ,它的每一个动作都有一个值。我们再把 V(s)V(\boldsymbol{s})V(s) 和 A(s,a)\boldsymbol{A}(\boldsymbol{s}, \boldsymbol{a})A(s,a) 加起来就可以得到 Q\mathrm{Q}Q 值 Q(s,a)\boldsymbol{Q}(\mathrm{s}, \boldsymbol{a})Q(s,a) 。

我们假设状态是离散的(实际上状态不是离散的),为了说明方便,我们假设就只有 4 个不同的状态,只有 3 个不同的动作,所以 Q(s,a)\boldsymbol{Q}(\boldsymbol{s}, \boldsymbol{a})Q(s,a) 可以看成一个表格。
我们知道
Q(s,a)=V(s)+A(s,a)\boldsymbol{Q}(\boldsymbol{s}, \boldsymbol{a})=V(\boldsymbol{s})+\boldsymbol{A}(\boldsymbol{s}, \boldsymbol{a}) Q(s,a)=V(s)+A(s,a)
其中, V(s)V(\boldsymbol{s})V(s) 对不同的状态,都有一个值。 A(s,a)\boldsymbol{A}(\boldsymbol{s}, \boldsymbol{a})A(s,a) 对不同的状态、不同的动作都有一个值。我们把 V(s)V(\boldsymbol{s})V(s) 的每一列的值加到 A(s,a)\boldsymbol{A}(\boldsymbol{s}, \boldsymbol{a})A(s,a) 的每一列就可以得到 Q\mathrm{Q}Q 值,以第一列为例,有 2+1、 2+(−1)、2+02+(-1) 、 2+02+(−1)、2+0 ,可以得到 3、 1、2,以此类推。

如上图所示,假设我们在训练网络的时候,目标是希望Q表格中第一行第二列的值变成 4 ,第二行第二列的 值变成 0 。但是我们实际上能修改的并不是 QQQ 值,能修改的是 V(s)V(s)V(s) 与 A(s,a)\boldsymbol{A}(\boldsymbol{s}, \boldsymbol{a})A(s,a) 的值。根据网络的参数, V(s)V(s)V(s) 与 A(s,a)\boldsymbol{A}(s, a)A(s,a) 的值输出以后,就直接把它们加起来,所以其实不是修改 Q\mathrm{Q}Q 值。在学习网络的时候,假设 我们希望 QQQ 表格中的 3 增加 1 变成 4、-1 增加 1 变成 0 。最后我们在训练网络的时候,我们可能就不用修 改 A(s,a)\boldsymbol{A}(\boldsymbol{s}, \boldsymbol{a})A(s,a) 的值,就修改 V(s)V(\boldsymbol{s})V(s) 的值,把 V(s)V(\boldsymbol{s})V(s) 的值从 0 变成 1。从 0 变成 1 有什么好处呢? 本来只想修改 两个值,但 Q\mathrm{Q}Q 表格中的第三个值也被修改了: −2-2−2 变成了 −1-1−1 。所以有可能我们在某一个状态下,只采样到 这两个动作,没采样到第三个动作,但也可以更改第三个动作的 QQQ 值。这样的好处就是我们不需要把所有的 状态-动作对都采样,可以用比较高效的方式去估计 QQQ 值。因为有时候我们更新的时候,不一定是更新 QQQ 表 格,而是只更新了 V(s)V(s)V(s) ,但更新 V(s)V(s)V(s) 的时候,只要修改 V(s)V(s)V(s) 的值,Q表格的值也会被修改。竞争深度 Q\mathrm{Q}Q 网络是一个使用数据比较有效率的方法。

可能会有人认为使用竞争深度 Q\mathrm{Q}Q 网络会有一个问题,竞争深度 Q\mathrm{Q}Q 网络最后学习的结果可能是这样的: 智能体 就学到 V(s)V(s)V(s) 等于 0, A(s,a)\boldsymbol{A}(\boldsymbol{s}, \boldsymbol{a})A(s,a) 等于 Q,使用任何竞争深度Q网络就没有任何好处,就和原来的深度Q网络 一样。

为了避免这个问题出现,实际上我们要给 A(s,a)A(s, a)A(s,a) 一些约束,让 A(s,a)A(s, a)A(s,a) 的更新比较麻颃,让网络倾向于 使用 V(s)V(s)V(s) 来解决问题。

例如,我们有不同的约束,一个最直觉的约束是必须要让 A(s,a)A(s, a)A(s,a) 的每一列的和都是 0,所以看我这边举 的例子,列的和都是 0 。如果这边列的和都是 0 ,我们就可以把 V(s)V(\boldsymbol{s})V(s) 的值想成是上面 Q\mathrm{Q}Q 的每一列的平均 值。这个平均值,加上 A(s,a)\boldsymbol{A}(s, a)A(s,a) 的值才会变成是 Q\mathrm{Q}Q 的值。所以假设在更新参数的时候,要让整个列一起被更 新,更新 A(s,a)\boldsymbol{A}(s, a)A(s,a) 的某一列比较麻烦,所以我们就不会想要更新 A(s,a)\boldsymbol{A}(s, a)A(s,a) 的某一列。因为 A(s,a)\boldsymbol{A}(s, a)A(s,a) 的每 一列的和都要是 0 ,所以我们无法让 A(s,a)\boldsymbol{A}(\boldsymbol{s}, \boldsymbol{a})A(s,a) 的某列的值都加 1 ,这是做不到的,因为它的约束就是和永远 都是 0 ,所以不可以都加 1 ,这时候就会强迫网络去更新 V(s)V(\boldsymbol{s})V(s) 的值,让我们可以用比较有效率的方法去使用 数据。

实现时,我们要给这个 A(s,a)\boldsymbol{A}(\boldsymbol{s}, \boldsymbol{a})A(s,a) 一个约束。例如,还是假设有 3 个动作,输出的向量是 [7,3,2]T[7,3,2]^{\mathrm{T}}[7,3,2]T ,我们在把 A(s,a)\boldsymbol{A}(\boldsymbol{s}, \boldsymbol{a})A(s,a) 与 V(s)V(\boldsymbol{s})V(s) 加起来之前,先进行归一化 (normalization)。

归一化的过程如下:

(1) 计算均值 (7+3+2)/3=4(7+3+2) / 3=4(7+3+2)/3=4 ;

(2) 向量 [7,3,2]T[7,3,2]^{\mathrm{T}}[7,3,2]T 的每个元素的值都减去均值 4 ,于是归一化的向量为 [3,−1,−2]T[3,-1,-2]^{\mathrm{T}}[3,−1,−2]T 。

接看我们将向量 [3,−1,−2]T[3,-1,-2]^{\mathrm{T}}[3,−1,−2]T 中的每个元素的值加上 1 ,就可以得到最后的 QQQ 值。这个归一化的步骤就是网络 的其中一部分,在训练的时候,我们也使用反向传播,只是归一化是没有参数的,它只是一个操作,可以把它放到网络里面,与网络的其他部分共同训练,这样 A(s,a)A(s, a)A(s,a) 就会有比较大的约束,网络就会给它一些好处,让它倾向于去更新 V(s)V(s)V(s) 的值,这就是竞争深度 Q\mathrm{Q}Q 网络。


三、优先级经验回放

第三个技巧称为优先级经验回放 (prioritized experience replay,PER)

如下图所示,我们原来在采样数 据训练 Q\mathrm{Q}Q 网络的时候,会等概率随机地从回放缓冲区里面采样数据。

这样不一定是最好的,因为也许有一些数据比较重要。假设有一些数据,我们之前采样过,发现这些数据的时序差分误差特别大 (时序差分误差就是网络的输出与目标之间的差距),这代表我们在训练网络的时候,这些数据是比较不好训练的。

既然比较不好训练,就应该给它们比较大的概率被采样到,即给它优先权(priority)。这样在训练的时候才会多考虑那 些不好训练的数据。实际上在做 PER 的时候,我们不仅会更改采样的过程,还会因为更改了采样的过程,而更改更新参数的方法。所以PER不仅改变了采样数据的分布,还改变了训练过程

总结:优先级经验回放就是将DQN从回放缓存区中均匀采样来更新参数改为加权采样。对于时序差分误差较大的数据给予更大权重,让网络更加注重对它们的训练。


四、在蒙特卡洛方法和时序差分方法中取得平衡

蒙特卡洛方法与时序差分方法各有优劣,因此我们可以在蒙特卡洛方法和时序差分方法中取得平衡,这个方 法也被称为多步方法

我们的做法如下图所示,在时序差分方法里面,在某一个状态 sts_tst​ 采取某一个动作 ata_tat​ 得到奖励 rtr_trt​ ,接下来进入状态 st+1s_{t+1}st+1​ 。但是我们可以不只保存一个步骤的数据,可保存 NNN 个步骤的数据。

  • 我们记录在 sts_tst​ 采取 ata_tat​ ,得到 rtr_trt​ 时,会进入的 st+1。 s_{t+1 \text { 。 }}st+1 。 ​
  • 一直记录到第 NNN 个步骤以后,在 st+Ns_{t+N}st+N​ 采取 at+Na_{t+N}at+N​ ,得 到 rt+Nr_{t+N}rt+N​ ,进入 st+N+1s_{t+N+1}st+N+1​ 的这些经验,把它们保存下来。
  • 实际上在做更新的时候,在做 QQQ 网络学习的时候,我们要让 Q(st,at)Q\left(s_t, a_t\right)Q(st​,at​) 与目标值越接近越好。 Q^\hat{Q}Q^​ 所计算的不是 st+1s_{t+1}st+1​ 的,而是 st+N+1s_{t+N+1}st+N+1​ 的奖励。
  • 我们会把 NNN 个 步骤以后的状态 st+N+1s_{t+N+1}st+N+1​ 输入到 Q^\hat{Q}Q^​ 中去计算 NNN 个步骤以后会得到的奖励。
  • 如果要算目标值,要再加上多步 (multi-step) 的奖励 ∑t′−tt+Nrt′\sum_{t^{\prime}-t}^{t+N} r_{t^{\prime}}∑t′−tt+N​rt′​ ,多步的奖励是从时间 ttt 一直到 t+Nt+Nt+N 的 N+1N+1N+1 个奖励的和。我们希望 Q(st,at)Q\left(s_t, a_t\right)Q(st​,at​) 和目标值越接近越好。

多步方法好处:

  • 多步方法就是蒙特卡洛方法与时序差分方法的结合,因此它不仅有蒙特卡洛方法的好处与坏处,还有时序差分方法的好处与坏处
  • 之前只采样了某一个步骤,所以得到的数据是真实的, 接下来都是 Q\mathrm{Q}Q 值估测出来的。现在采样比较多的步骤,采样 NNN 个步骤才估测值,所以估测的部分所造成的影响就会比较小

当然多步方法的坏处就与蒙特卡洛方法的坏处一样:

  • 因为 rrr 有比较多项,所以我们把 NNN 项的 rrr 加起来,方差就会比较大

但是我们可以调整 NNN 的值,在方差与不精确的 Q\mathrm{Q}Q 值之间取得一个平衡。 NNN 就是一个超参数,我们可以对其进行调整。


五、噪声深度Q网络(Noisy DQN)

我们还可以改进探索。 ε\varepsilonε-贪心这样的探索就是在动作的空间上加噪声,但是有一个更好的方法称为噪声网络 (noisy net),它是在参数的空间上加噪声。噪声网络是指,每一次在一个回合开始的时候,在智能体要与 环境交互的时候,智能体使用 Q\mathrm{Q}Q 函数来采取动作, Q\mathrm{Q}Q 函数里面就是一个网络,我们在网络的每一个参数上加 上一个高斯噪声 (Gaussian noise),就把原来的 QQQ 函数变成 Q~\tilde{Q}Q~​ 。因为我们已经用 Q^\hat{Q}Q^​ 来表示目标网络,所以 我们用 Q~\tilde{Q}Q~​ 来表示噪声Q函数 (noisy Q-function)。我们把每一个参数都加上一个高斯噪声,就得到一个新 的网络 Q~\tilde{Q}Q~​ 。

使用噪声网络执行的动作为

a=arg⁡max⁡aQ~(s,a)a=\underset{a}{\arg \max } \tilde{Q}(s, a) a=aargmax​Q~​(s,a)

  • 这里要注意,在每个回合开始的时候,与环境交互之前,我们就采样噪声
  • 接下来我们用固定的噪声网络玩 游戏,直到游戏结束,才重新采样新的噪声,噪声在一个回合中是不能被改变的
  • OpenAl 与 DeepMind 在同 时间提出了几乎一模一样的噪声网络方法,并且对应的两篇论文都发表在 ICLR 2018 会议中。不一样的地方 是,他们用不同的方法加橾声。OpenAl 的方法比较简单,直接加一个高斯噪声,也就是把每一个参数、每 一个权重 (weight) 都加一个高斯噪声。DeepMind 的方法比较复杂,该方法中的噪声是由一组参数控制 的,网络可以自己决定橾声要加多大。
  • 但是两种方法的概念都是一样的,总之,我们就是对 QQQ 函数里面的网 络加上一些噪声,把它变得有点儿不一样,即与原来的 QQQ 函数不一样,然后与环境交互
  • 两篇论文里面都强 调,参数虽然会被加上噪声,但在同一个回合里面参数是固定的。我们在换回合、玩另一场新的游戏的时 候,才会重新采样噪声
  • 在同一场游戏里面就是同一个噪声 Q\mathrm{Q}Q 网络在玩该场游戏,这非常重要。因为这导致 了噪声网络与原来的 ε\varepsilonε-贪心或其他在动作上做采样的方法的本质上的差异

噪声网络与原来的 ε\varepsilonε-贪心或其他在动作上做采样的方法有什么本质上的差异呢?

  • 在原来采样的方法中,比如 ε\varepsilonε-贪心中,就算给定同样的状态,智能体采取的动作也 不一定是一样的。因为智能体通过采样来决定动作,给定同一个状态,智能体根据 QQQ 函数的网络来输出一个 动作,或者采样到随机来输出一个动作。
  • 所以给定相同的状态,如果是用 ε\varepsilonε-贪心的方法,智能体可能会执行 不同的动作。但实际上策略并不是这样的,一个真实世界的策略,给定同样的状态,它应该有同样的回应。 而不是给定同样的状态,它有时候执行Q函数,有时候又是随机的,这是一个不正常的动作,是在真实的情况下不会出现的动作。
  • 但是如果我们是在 Q\mathrm{Q}Q 函数的网络的参数上加噪声,就不会出现这种情况。因为如果在 Q\mathrm{Q}Q 函数的网络的参数上加噪声,在整个交互的过程中,在同一个回合里面,它的网络的参数总是固定的,所以看到相同或类似的状态,就会采取相同的动作,这是比较正常的。这被称为依赖状态的探索 (state dependent exploration),我们虽然会做探索这件事,但是探索是与状态有关系的,看到同样的状态,就会 采取同样的探索的方式,而噪声 (noisy) 的动作只是随机乱试。但如果我们是在参数下加噪声,在同一个 回合里面,参数是固定的,我们就是系统地尝试。比如,我们每次在某一个状态,都向左试试看。在下一次 在玩同样游戏的时候,看到同样的状态,我再向右试试看,是系统地在探索环境。

六、分布式深度Q网络(Distributional DQN)

还有一个技巧称为分布式Q函数 (distributional Q-function)。分布式Q函数是比较合理的,但是它难以实现。Q函数是累积奖励的期望值,所以我们算出来的 QQQ 值其实是一个期望值。如下图所示,因为环境是有 随机性的,所以在某一个状态采取某一个动作的时候,我们把所有的奖励在游戏结束的时候进行统计,得到 的是一个分布。也许在奖励得到 0 的概率很高,得到 −10-10−10 的概率比较低,得到 +10+10+10 的概率也比较低,但是 它是一个分布。(我们对这个分布计算它的平均值才是这个 Q 值,算出来是累积奖励的期望。所以累积奖励 是一个分布,对它取期望,对它取平均值,得到 QQQ 值) 。但不同的分布可以有同样的平均值。也许真正的分布是下图所示右边的分布,它的平均值与左边的分布的平均值其实是一样的,但它们背后所代表的分布其 实是不一样的。假设我们只用 QQQ 值的期望来代表整个奖励,可能会丢失一些信息,无法对奖励的分布进行建模

分布式Q函数是对分布 (distribution) 建模,怎么做呢? 如下图a 所示,在原来的 Q\mathrm{Q}Q 函数里面,假设我们只能采取 a1、a2、a3a_1 、 a_2 、 a_3a1​、a2​、a3​ 这 3 个动作,我们输入一个状态,输出 3 个值。这 3 个值分别代表 3 个动作的 QQQ 值,但 是这些 QQQ 值是一个分布的期望值。所以分布式Q函数就是直接输出分布。实际上的做法如下图b 所示,假 设分布的值就分布在某一个范围里面,比如 −10∼10-10 \sim 10−10∼10 ,把 −10∼10-10 \sim 10−10∼10 拆成一个一个的长条。例如,每一个动 作的奖励空间拆成 5 个长条。假设奖励空间可以拆成 5 个长条,Q函数的输出就是要预测我们在某一个状态 采取某一个动作得到的奖励,其落在某一个长条里面的概率。所以绿色长条概率的和应该是 1,其高度代表 在某一个状态采取某一个动作的时候,它落在某一个长条内的概率。绿色的代表动作 a1a_1a1​ ,红色的代表动作 a2a_2a2​ ,蓝色的代表动作 a3a_3a3​ 。所以我们就可以用 Q\mathrm{Q}Q 函数去估计 a1a_1a1​ 的分布、 a2a_2a2​ 的分布、 a3a_3a3​ 的分布。实际上在做 测试的时候,我们选平均值最大的动作执行

除了选平均值最大的动作以外,我们还可以对分布建模。例如,我们可以考虑动作的分布,如果分布方差很 大,这代表采取这个动作虽然平均而言很不错,但也许风险很高,我们可以训练一个网络来规避风险。在两 个动作平均值都差不多的情况下,也许可以选一个风险比较小的动作来执行,这就是分布式Q函数的好处

当我们使用分布式深度Q网络的时候,本质上就不会高估奖励。我们是为了避免高估奖励才加了DDQN。如果我们使用了分布式深度Q网络,就可能不会有高估的结果,多数的情况是低估奖励的,所以变成DDQN没有用。

Q:为什么分布式深度 Q\mathrm{Q}Q 网络不会高估奖励奖励,反而会低估奖励呢?
A:因为分布式深度 Q\mathrm{Q}Q 网络输出的是一个分布 的范围,输出的范围不可能是无限的,我们一定会设一个限制,比如最大输出范围就是从 −10∼10-10 \sim 10−10∼10 。假设 得到的奖励超过 10 ,比如 100 怎么办? 我们就当作没看到这件事,所以奖励很极端的值、很大的值是会被 丟弃的,用分布式深度 Q\mathrm{Q}Q 网络的时候,我们不会高估奖励,反而会低估奖励。


七、彩虹深度Q网络(Rainbow DQN)

  • 最后一个技巧称为彩虹 (rainbow),如下图所示,假设每个方法有一种自己的颜色(如果每一个单一颜 色的线代表只用某一个方法),把所有的颜色组合起来,就变成“彩虹”,我们把原来的深度Q网络也算作一 种方法,故有 7 种颜色。
  • 横轴代表训练过程的帧数,纵轴代表玩十几个雅达利小游戏的平均分数的和,但它 取的是分数的中位数。为什么是取中位数而不是直接取平均呢? 因为不同小游戏的分数差距很大,如果取平 均,某几个游戏可能会控制结果,因此我们取中位数。
  • 如果我们使用的是一般的深度Q网络 (灰色的线), 深度Q网络的性能不是很好。噪声深度Q网络 (noisy DQN) 比DQN的性能好很多。紫色的线代表 DDQN, DDQND D Q NDDQN 还挺有效的。优先级经验回放的双深度Q网络(prioritized DDQN) 、竞争双深度Q网络 (dueling DDQN) 和分布式深度 QQQ 网络 (distributional DQN) 性能也挺高的。异步优势演员-评论员 (asynchronous advantage actor-critic,A3C) 是演员-评论员的方法,A3C算法又被译作异步优势动作评价算法。单纯的异步优势演员-评论员算法看起来是比深度 Q\mathrm{Q}Q 网络强的。下图中没有多步方法,这是因为异步优势演员-评论员算法本身内部就有多步方法,所以实现异步优势演员评论员算法就等同于实现多步方法,我们可以把 异步优势演员-评论员算法的结果看成多步方法的结果。
  • 这 些方法本身之间是没有冲突的,我们把全部方法都用上就变成了七彩的方法,即彩虹方法,彩虹方法的性能 很好

我们把所有的方法加在一起,模型的表现会提高很多,但会不会有些方法其实是没有用的呢? 我们可以去掉其中一种方法来判断这个方法是否有用。如下图所示,虚线就是彩虹方法去掉某一种方法以后的结果, 黄色的虚线去掉多步方法后“掉”很多。

彩虹是彩色的实线,去掉多步方法会“掉下来”,去掉优先级经验回放 后会“掉下来”,去掉分布也会“掉下来”。这边有一个有趣的地方,在开始的时候,分布训练的方法与其他方 法速度差不多。但是我们去掉分布训练方法的时候,训练不会变差,但是性能 (performance) 最后会收敛 在比较差的地方。我们去掉噪声网络后性能也差一点儿,去掉竞争深度 QQQ 网络后性能也差一点儿,去掉双深 度 QQQ 网络却没什么差别。所以我们把全部方法组合在一起的时候,去掉双深度 QQQ 网络是影响比较小的


八、关键词总结

  • 双深度 Q\mathrm{Q}Q 网络 (double DQN\mathrm{DQN}DQN ):在双深度 Q\mathrm{Q}Q 网络中存在两个 Q\mathrm{Q}Q 网络, 第一个 Q\mathrm{Q}Q 网络决定哪一个动 作的 Q\mathrm{Q}Q 值最大, 从而决定对应的动作。另一方面, Q\mathrm{Q}Q 值是用 Q′Q^{\prime}Q′ 计算得到的, 这样就可以避免过度估计的 问题。具体地, 假设我们有两个 Q\mathrm{Q}Q 函数并且第一个 Q\mathrm{Q}Q 函数高估了它现在执行的动作 aaa 的值, 这没关系, 只要第二个 Q\mathrm{Q}Q 函数 Q′Q^{\prime}Q′ 没有高估动作 aaa 的值,那么计算得到的就还是正常的值。
  • 竞争深度 Q\mathrm{Q}Q 网络 (dueling DQN):将原来的深度 Q\mathrm{Q}Q 网络的计算过程分为两步。第一步计算一个与输 人有关的标量 V(s)\mathrm{V}(\mathrm{s})V(s); 第二步计算一个向量 A(s,a)\mathrm{A}(\mathrm{s}, \mathrm{a})A(s,a) 对应每一个动作。最后的网络将两步的结果相加, 得到我们最终需要的 QQQ 值。用一个公式表示就是 Q(s,a)=V(s)+A(s,a)Q(s, a)=V(s)+A(s, a)Q(s,a)=V(s)+A(s,a) 。另外, 竞争深度 QQQ 网络, 使用状 态价值函数与动作价值函数来评估 Q\mathrm{Q}Q 值。
  • 优先级经验回放 ( prioritized experience replay, PER):这个方法是为了解决我们在第 6 章中提出的 经验回放方法的不足而提出的。我们在使用经验回放时, 均匀地取出回放缓冲区 (reply buffer) 中的采样 数据, 这里并没有考虑数据间的权重大小。但是我们应该将那些训练效果不好的数据对应的权重加大, 即 其应该有更大的概率被采样到。综上, 优先级经验回放不仅改变了被采样数据的分布, 还改变了训练过程。
  • 噪声网络 (noisy net):其在每一个回合开始的时候, 即智能体要和环境交互的时候, 在原来的 QQQ 函 数的每一个参数上加上一个高斯噪声 (Gaussian noise), 把原来的 Q\mathrm{Q}Q 函数变成 Q~\tilde{Q}Q~​, 即噪声 Q\mathrm{Q}Q 函数。同 样, 我们把每一个网络的权重等参数都加上一个高斯噪声, 就得到一个新的网络 Q~\tilde{Q}Q~​ 。我们会使用这个新 的网络与环境交互直到结束。
  • 分布式 Q 函数 (distributional Q-function):对深度 Q 网络进行模型分布, 将最终网络的输出的每一 类别的动作再进行分布操作。
  • 彩虹 (rainbow):将7 个技巧综合起来的方法, 7 个技巧分别是 一深度 Q\mathrm{Q}Q 网络、双深度Q\mathrm{Q}Q 网络、优先级经验回放的双深度 Q\mathrm{Q}Q 网络、竞争深度 Q\mathrm{Q}Q 网络、异步优势演员-评论员算法 (A3C)、分布 式 Q\mathrm{Q}Q 函数、噪声网络, 进而考察每一个技巧的贡献度或者与环境的交互是否是正反馈的。

九、习题

7-1 为什么传统的深度 Q\mathrm{Q}Q 网络的效果并不好? 可以参考其公式 Q(st,at)=rt+max⁡aQ(st+1,a)Q\left(s_t, a_t\right)=r_t+\max _a Q\left(s_{t+1}, a\right)Q(st​,at​)=rt​+maxa​Q(st+1​,a) 来描 述。
7-2 在传统的深度 Q 网络中, 我们应该怎么解决目标值太大的问题呢?
7-3 请问双深度 Q\mathrm{Q}Q 网络中所谓的 QQQ 与 Q′Q^{\prime}Q′ 两个网络的功能是什么?
7-4 如何理解竞争深度 QQQ 网络的模型变化带来的好处?
7-5 使用蒙特卡洛和时序差分平衡方法的优尒分别有哪些?


十、面试题

7-1 友善的面试官:深度 Q\mathrm{Q}Q 网络都有哪些变种? 引人状态奖励的是哪种?
7-2 友善的面试官:请简述双深度 QQQ 网络原理。
7-3 友善的面试官:请问竞争深度 Q\mathrm{Q}Q 网络模型有什么优势呢?

【EasyRL学习笔记】第七章 深度Q网络进阶技巧(Double-DQN、Dueling-DQN、Noisy-DQN、Distributional-DQN、Rainbow-DQN)相关推荐

  1. 强化学习_07_DataWhale深度Q网络进阶技巧

    习题 7-1 为什么传统的深度Q 网络的效果并不好?可以参考其公式Q(st, at) = rt + maxa Q(st+1, a) 来描述. 因为实际上在做的时候,我们要让左边的式子跟目标越接近越好. ...

  2. 《Go语言圣经》学习笔记 第七章 接口

    <Go语言圣经>学习笔记 第七章 接口 目录 接口是合约 接口类型 实现接口的条件 flag.Value接口 接口值 sort.Interface接口 http.Handle接口 erro ...

  3. Effective C++ 学习笔记 第七章:模板与泛型编程

    第一章见 Effective C++ 学习笔记 第一章:让自己习惯 C++ 第二章见 Effective C++ 学习笔记 第二章:构造.析构.赋值运算 第三章见 Effective C++ 学习笔记 ...

  4. 深度学习笔记(46) 深度卷积网络学习

    深度学习笔记(46) 深度卷积网络学习 1. 学习内容 2. 第一层 3. 第二层 4. 第三层 5. 第四层 6. 第五层 1. 学习内容 深度卷积网络到底在学什么? 来看一个例子,假如训练了一个卷 ...

  5. 【EasyRL学习笔记】第九章 Actor-Critic 演员-评论员算法

    文章目录 一.前言 二.策略梯度回顾 三.深度Q网络回顾 四.优势演员-评论员算法 五.异步优势演员-评论员算法 六.路径衍生策略梯度 七.与生成对抗网络的联系 八.关键词总结 九.习题 十.面试题 ...

  6. 吴恩达机器学习学习笔记第七章:逻辑回归

    分类Classification分为正类和负类 (规定谁是正谁是负无所谓) 吴恩达老师举例几个例子:判断邮箱是否是垃圾邮箱 一个在线交易是否是诈骗 一个肿瘤是良性的还是恶性 如果我们用之前学习的lin ...

  7. 【机器学习-周志华】学习笔记-第七章

    记录第一遍没看懂的 记录觉得有用的 其他章节:         第一章         第三章         第五章         第六章         第七章         第八章      ...

  8. DSP原理学习笔记--第七章--增强直接存储器访问(EDMA)

    第七章 增强直接存储器访问(EDMA) 第七章 增强直接存储器访问(EDMA) DMA 数据传输 EDMA的特点 EDMA控制器的结构 EDMA传输中的术语 EDMA传输方式 同步事件 EDMA通道与 ...

  9. java学习笔记-第七章:面向对象编程(基础部分)

    第七章:面向对象编程(基础部分) 总体内容 类与对象 引出类与对象 类与对象概述 类与对象的关系示意图 属性概念及其细节 类与对象快速入门案例 对象内存布局 类与对象内存分配机制 引申:java内存的 ...

最新文章

  1. iphone开发笔记
  2. Implementation:Bellman-ford
  3. boost::pfr::tuple_size_v相关的测试程序
  4. (zz)编译Ubuntu Linux内核
  5. linux链接 .o,Linux 链接概念 - osc_8ieji7o1的个人空间 - OSCHINA - 中文开源技术交流社区...
  6. python读取bmp文件_如何在python中读取bmp文件头?
  7. php socket 不能用,PHP无法用Socket方式连接MySQ
  8. [转]解决mySQL占用内存超大问题
  9. Codeforces 837 简要题解
  10. 如何在 macOS Monterey 中管理应用程序和联系人的 Mac 通知?
  11. SVN使用过程中出现“工作副本已经锁定”的解决办法
  12. 什么是IPFS - BlockChain Storage 区块链存储 (1)
  13. android手机误删短信恢复软件,苹果手机短信误删恢复工具_安卓手机已删除短信恢复软件-万能数据恢复大师官网...
  14. Android青翼蝠王之ContentProvider
  15. web项目连接阿里云云数据库RDS-MySQL8.0
  16. 机器学习项目泰坦尼克号问题陈述
  17. Java读取UTF-8格式txt文件第一行出现乱码及解决;Java读带有BOM的UTF-8文件乱码原因及解决方法(转载)...
  18. 书摘—拆掉思维里的墙
  19. OpenVINO环境搭建
  20. 王者微信怎么查其它服务器的信息,王者荣耀微信怎么看别人是哪个区的 | 手游网游页游攻略大全...

热门文章

  1. mysql 最大分区数量_最大分区数 分区限制
  2. MySQL实现按距离范围查找
  3. python打分_做一个Python颜值打分系统,比比看杨幂和杨超越到底谁更美?
  4. Android OPPO推送服务集成
  5. oracle为表空间增加数据文件,创建Oracle表空间,增加数据文件的步骤
  6. 销售人员的优势和动力
  7. PHP有没有 原子性,PHP程序的原子性和PHP的文件锁
  8. oracle导入失败后怎样删除已导入数据,Oracle数据的导入、导出、插入、更新及删除总结...
  9. Xshell提示更新,却更新失败解决方法(亲测可用)
  10. 蓝桥杯算法训练合集三 1.车的位置2.24点3.最大分解4.RP大冒险5.士兵杀敌(二)