1.关键词
- 深度Q网络(deep Q-network,DQN):基于深度学习的Q学习算法,其结合了价值函数近似(value function approximation)与神经网络技术,并采用目标网络和经验回放等方法进行网络的训练。
- 状态-价值函数(state-value function):其输入为演员某一时刻的状态,输出为一个标量,即当演员在对应的状态时,预期的到过程结束时间段内所能获得的价值。
- 状态-价值函数贝尔曼方程(state-value function Bellman equation):基于状态-价值函数的贝尔曼方程,它表示在状态 sts_tst 下对累积奖励 GtG_tGt 的期望。
- Q函数(Q-function): 其也被称为动作价值函数(action-value function)。其输入是一个状态-动作对,即在某一具体的状态采取对应的动作,假设我们都使用某个策略 π\piπ ,得到的累积奖励的期望值有多大。
- 目标网络(target network):其可解决在基于时序差分的网络中,优化目标 Qπ(st,at)=rt+Qπ(st+1,π(st+1))Q_{\pi}\left(s_{t}, a_{t}\right) = r_{t}+Q_{\pi}\left(s_{t+1}, \pi\left(s_{t+1}\right)\right)Qπ(st,at)=rt+Qπ(st+1,π(st+1)) 左右两侧会同时变化使得训练过程不稳定,从而增大回归的难度的问题。目标网络选择将右边部分,即 rt+Qπ(st+1,π(st+1))r_{t}+Q_{\pi}\left(s_{t+1}, \pi\left(s_{t+1}\right)\right)rt+Qπ(st+1,π(st+1)) 固定,通过改变左边部分,即 Qπ(st,at)Q_{\pi}\left(s_{t}, a_{t}\right)Qπ(st,at) 中的参数进行回归,这也是深度Q网络应用中比较重要的技巧。
- 探索(exploration):我们在使用Q函数的时候,我们的策略完全取决于Q函数,这有可能导致出现对应的动作是固定的某几个数值的情况,而不像策略梯度中的输出是随机的,我们再从随机分布中采样选择动作。这会导致我们继续训练的输入值一样,从而“加重”输出的固定性,导致整个模型的表达能力急剧下降,这就是探索-利用窘境(exploration-exploitation dilemma)问题。我们可以使用 ε\varepsilonε-贪心和玻尔兹曼探索(Boltzmann exploration)等探索方法进行优化。
- 经验回放(experience replay):其会构建一个回放缓冲区(replay buffer)来保存许多经验,每一个经验的形式如下:在某一个状态 sts_tst,采取某一个动作 ata_tat,得到奖励 rtr_trt,然后进入状态 st+1s_{t+1}st+1。我们使用 π\piπ 与环境交互多次,把收集到的经验都存储在回放缓冲区中。当我们的缓冲区“装满”后,就会自动删去最早进入缓冲区的经验。在训练时,对于每一轮迭代都有相对应的批量(batch)(与我们训练普通的网络一样,都是通过采样得到的),然后用这个批量中的经验去更新我们的Q函数。综上,Q函数在采样和训练的时候,会用到过去的经验,所以这里称这个方法为经验回放,其也是深度Q网络应用中比较重要的技巧。
- 双深度Q网络(double DQN):在双深度Q网络中存在两个Q网络,第一个Q网络决定哪一个动作的Q值最大,从而决定对应的动作。另一方面,Q值是用 Q′Q'Q′ 计算得到的,这样就可以避免过度估计的问题。具体地,假设我们有两个Q函数并且第一个Q函数高估了它现在执行的动作 aaa 的值,这没关系,只要第二个Q函数 Q′Q'Q′ 没有高估动作 aaa 的值,那么计算得到的就还是正常的值。
- 竞争深度Q网络(dueling DQN):将原来的深度Q网络的计算过程分为两步。第一步计算一个与输入有关的标量 V(s)\mathrm{V(s)}V(s);第二步计算一个向量 A(s,a)\mathrm{A(s,a)}A(s,a) 对应每一个动作。最后的网络将两步的结果相加,得到我们最终需要的Q值。用一个公式表示就是 Q(s,a)=V(s)+A(s,a)\mathrm{Q(s,a)=V(s)+A(s,a)}Q(s,a)=V(s)+A(s,a) 。另外,竞争深度Q网络,使用状态价值函数与动作价值函数来评估Q值。
- 优先级经验回放(prioritized experience replay,PER):这个方法是为了解决我们在第6章中提出的经验回放方法的不足而提出的。我们在使用经验回放时,均匀地取出回放缓冲区(reply buffer)中的采样数据,这里并没有考虑数据间的权重大小。但是我们应该将那些训练效果不好的数据对应的权重加大,即其应该有更大的概率被采样到。综上,优先级经验回放不仅改变了被采样数据的分布,还改变了训练过程。
- 噪声网络(noisy net):其在每一个回合开始的时候,即智能体要和环境交互的时候,在原来的Q函数的每一个参数上加上一个高斯噪声(Gaussian noise),把原来的Q函数变成 Q~\tilde{Q}Q~ ,即噪声Q函数。同样,我们把每一个网络的权重等参数都加上一个高斯噪声,就得到一个新的网络 Q~\tilde{Q}Q~ 。我们会使用这个新的网络与环境交互直到结束。
- 分布式Q函数(distributional Q-function):对深度Q网络进行模型分布,将最终网络的输出的每一类别的动作再进行分布操作。
- 彩虹(rainbow):将7个技巧/算法综合起来的方法,7个技巧分别是——深度Q网络、双深度Q网络、优先级经验回放的双深度Q网络、竞争深度Q网络、异步优势演员-评论员算法(A3C)、分布式Q函数、噪声网络,进而考察每一个技巧的贡献度或者与环境的交互是否是正反馈的。
2.习题
4-1 为什么在深度Q网络中采用价值函数近似的表示方法?
深度Q网络(deep Q-network,DQN)是指基于深度学习的Q学习算法,主要结合了价值函数近似与神经网络技术,并采用目标网络和经历回放的方法进行网络的训练。在 Q学习 中,我们使用表格来存储每个状态 sss 下采取动作 aaa 获得的奖励,即状态-动作值函数 Q(s,a)Q(s,a)Q(s,a)。然而,这种方法在状态量巨大甚至是连续的任务中,会遇到维度灾难问题,往往是不可行的。因此,深度Q网络 采用了价值函数近似的表示方法。
4-2 评论员的输出通常与哪几个值直接相关?
所以评论员的输出值取决于状态和演员。评论员其实都要绑定一个演员,它是在衡量某一个演员的好坏,而不是衡量一个状态的好坏。这里要强调一下,评论员的输出是与演员有关的,状态的价值其实取决于演员,当演员改变的时候,状态价值函数的输出其实也是会跟着改变的。
4-3 我们通常怎么衡量状态价值函数 Vπ(s)V_{\pi}(s)Vπ(s) ?其优势和劣势分别有哪些?
4-4 基于本章正文介绍的基于蒙特卡洛的网络方法,我们怎么训练模型呢?或者我们应该将其看作机器学习中什么类型的问题呢?
于蒙特卡洛的方法和基于时序差分的方法。基于蒙特卡洛的方法就是让演员与环境交互,我们要看演员好不好,就让演员与环境交互,让评论员评价。评论员就统计,演员如果看到状态 sas_asa,接下来的累积奖励有多大;如果它看到状态 sbs_bsb,接下来的累积奖励有多大。但是实际上,我们不可能看到所有的状态。如果我们在玩雅达利游戏,状态是图像,那么无法看到所有的状态。所以实际上 Vπ(s)V_{\pi}(s)Vπ(s) 是一个网络。对一个网络来说,就算输入状态是从来都没有看过的,它也可以想办法估测一个值。怎么训练这个网络呢?如图 4.2 所示,如果在状态 sas_asa,接下来的累积奖励就是 GaG_aGa。也就是对这个价值函数,如果输入是状态 sas_asa,正确的输出应该是 GaG_aGa;如果输入状态是 sbs_bsb,正确的输出应该是 GbG_bGb。所以在训练的时候, 它就是一个回归问题(regression problem)。网络的输出就是一个值,我们希望在输入 sas_asa 的时候,输出的值与 GaG_aGa 越接近越好;输入 sbs_bsb 的时候,输出的值与 GbG_bGb 越接近越好。接下来继续训练网络,这是基于蒙特卡洛的方法。
4-5 基于本章正文中介绍的基于时序差分的网络方法,具体地,我们应该怎么训练模型呢?
时序差分的方法,即基于时序差分的方法。在基于蒙特卡洛的方法中,每次我们都要计算累积奖励,也就是从某一个状态 sas_asa 一直到游戏结束的时候,得到的所有奖励的总和。
4-6 动作价值函数和状态价值函数的有什么区别和联系?
一个是基于动作、一个是基于状态
4-7 请介绍Q函数的两种表示方法。
- 输入是状态与动作,输出就是一个标量。这种Q函数既适用于连续动作(动作是无法穷举的),又适用于离散动作。
- 输入是一个状态,输出就是多个值。这种Q函数只适用于离散动作。
4-8 当得到了Q函数后,我们应当如何找到更好的策略 π′\pi'π′ 呢?或者说 π′\pi'π′ 的本质是什么?
假设我们有一个Q函数和某一个策略 π\piπ,根据策略 π\piπ 学习出策略 π\piπ 的Q函数,接下来可以找到一个新的策略 π′\pi'π′,它会比 π\piπ 要好。我们用 π′\pi'π′ 取代 π\piπ,再去学习它的 Q 函数,得到新的Q函数以后,再去寻找一个更好的策略。这样一直循环下去,策略就会越来越好。
4-9 解决探索-利用窘境问题的探索的方法有哪些?
εε-贪心和玻尔兹曼探索(Boltzmann exploration) 。
4-10 我们使用经验回放有什么好处?
回放缓冲区是指现在有某一个策略π\piπ 与环境交互,它会去收集数据,我们把所有的数据放到一个数据缓冲区(buffer)里面,数据缓冲区里面存储了很多数据。比如数据缓冲区可以存储 5 万笔数据,每一笔数据就是记得说,我们之前在某一个状态 sts_tst,采取某一个动作 ata_tat,得到了奖励 rtr_trt,进入状态 st+1s_{t+1}st+1。我们用 π\piπ 去与环境交互多次,把收集到的数据放到回放缓冲区里面。 回放缓冲区里面的经验可能来自不同的策略,我们每次用 π\piπ 与环境交互的时候,可能只交互 10000 次,接下来我们就更新 π\piπ 了。但是回放缓冲区里面可以放 5 万笔数据,所以 5 万笔数据可能来自不同的策略。回放缓冲区只有在它装满的时候,才会把旧的数据丢掉。所以回放缓冲区里面其实装了很多不同的策略的经验。
4-11 在经验回放中我们观察 π\piπ 的价值,发现里面混杂了一些不是 π\piπ 的经验,这会有影响吗?
没关系。这并不是因为过去的策略与现在的策略很像, 就算过去的策略与现在的策略不是很像,也是没有关系的。主要的原因是我们并不是去采样一个轨迹,我们只采样了一笔经验,所以与是不是异策略这件事是没有关系的。就算是异策略,就算是这些经验不是来自于 π\piπ,我们还是可以用这些经验来估测 Qπ(s,a)Q_{\pi}(s,a)Qπ(s,a)。
4-12 为什么传统的深度Q网络的效果并不好?可以参考其公式 Q(st,at)=rt+maxaQ(st+1,a)Q(s_t ,a_t)=r_t+\max_{a}Q(s_{t+1},a)Q(st,at)=rt+maxaQ(st+1,a) 来描述。
**度Q网络 将Q学习与深度学习结合,用深度网络来近似动作价值函数,而 Q学习 则是采用表格存储;深度Q网络采用了经验回放的训练方法,从历史数据中随机采样,而Q学习直接采用下一个状态的数据进行学习。 **4-13 在传统的深度Q网络中,我们应该怎么解决目标值太大的问题呢?
在DDQN里面,选动作的Q函数与计算值的Q函数不是同一个。在原来的 深度Q网络 里面,我们穷举所有的 aaa,把每一个 aaa 都代入Q函数,看哪一个 aaa 可以得到的 Q 值最高,就把那个 Q 值加上 rtr_trt。但是在 DDQN 里面有两个 Q网络,第一个 Q网络 Q 决定哪一个动作的 Q 值最大(我们把所有的 aaa 代入 Q 函数中,看看哪一个 aaa 的Q 值最大)。我们决定动作以后,Q 值是用 Q′Q'Q′ 算出来的。
4-14 请问双深度Q网络中所谓的 QQQ 与 Q′Q'Q′ 两个网络的功能是什么?
QQQ 和 Q′Q'Q′,如果 QQQ 高估了它选出来的动作 aaa,只要 Q′Q'Q′ 没有高估动作 aaa 的值,算出来的就还是正常的值。假设 Q′Q'Q′ 高估了某一个动作的值,也是没问题的,因为只要 QQQ 不选这个动作就可以,这就是DDQN神奇的地方。
4-15 如何理解竞争深度Q网络的模型变化带来的好处?
从 0 变成 1 有什么好处呢?本来只想修改两个值,但 Q表格中的第三个值也被修改了:-2 变成了 -1。所以有可能我们在某一个状态下,只采样到这两个动作,没采样到第三个动作,但也可以更改第三个动作的 Q 值。这样的好处就是我们不需要把所有的状态-动作对都采样,可以用比较高效的方式去估计 Q 值。因为有时候我们更新的时候,不一定是更新Q表格,而是只更新了 V(s)V(\boldsymbol{s})V(s),但更新 V(s)V(\boldsymbol{s})V(s) 的时候,只要修改 V(s)V(\boldsymbol{s})V(s)的值,Q表格的值也会被修改。竞争深度Q网络是一个使用数据比较有效率的方法。
4-16 使用蒙特卡洛和时序差分平衡方法的优劣分别有哪些?
我们先看看多步方法的好处,之前只采样了某一个步骤,所以得到的数据是真实的,接下来都是 Q 值估测出来的。现在采样比较多的步骤,采样 NNN 个步骤才估测值,所以估测的部分所造成的影响就会比较小。当然多步方法的坏处就与蒙特卡洛方法的坏处一样,因为 rrr 有比较多项,所以我们把 NNN 项的 rrr 加起来,方差就会比较大。但是我们可以调整 NNN 的值,在方差与不精确的 Q 值之间取得一个平衡。NNN 就是一个超参数,我们可以对其进行调整。
4-17 深度Q网络相比基于策略梯度的方法为什么训练效果更好、更平稳?
与基于策略梯度的方法相比,深度Q网络比较稳定,策略梯度比较不稳定,玩大部分游戏不能使用策略梯度。
4-18 深度Q网络在处理连续动作时存在什么样的问题呢?对应的解决方法有哪些呢?
但深度Q网络其实存在一些问题,最大的问题是它很难处理连续动作。很多时候动作是连续的,比如我们玩雅达利的游戏时,智能体只需要决定如上、下、左、右这4个动作,这种动作是离散的。
- 对动作进行采样
- 梯度上升
面试题
4-1 友善的面试官:请问深度Q网络是什么?其两个关键性的技巧分别是什么?
4-2 友善的面试官:那我们继续分析!你刚才提到的深度Q网络中的两个技巧————目标网络和经验回放,其具体作用是什么呢?
4-3 友善的面试官:深度Q网络和Q学习有什么异同点?
4-4 友善的面试官:请问,随机性策略和确定性策略有什么区别吗?
4-5 友善的面试官:请问不打破数据相关性,神经网络的训练效果为什么就不好?
4-6 友善的面试官:深度Q网络都有哪些变种?引入状态奖励的是哪种?
4-7 友善的面试官:请简述双深度Q网络原理。
4-8 友善的面试官:请问竞争深度Q网络模型有什么优势呢?