强化学习DQN浓缩

简介: 强化学习DQN浓缩

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+max⁡aQ(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网络中所谓的 QQQQ′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网络模型有什么优势呢?


目录
相关文章
|
9月前
|
机器学习/深度学习 存储 算法
【强化学习】常用算法之一 “DQN”
DQN算法是深度学习领域首次广泛应用于强化学习的算法模型之一。它于2013年由DeepMind公司的研究团队提出,通过将深度神经网络与经典的强化学习算法Q-learning结合,实现了对高维、连续状态空间的处理,具备了学习与规划的能力。本文对DQN算法进行了详细的讲解,包括发展史、算法公式和原理、功能、示例代码以及如何使用。DQN算法通过结合深度学习和Q-learning算法,实现了对高维、连续状态空间的处理,具备了学习和规划的能力。
991 0
【强化学习】常用算法之一 “DQN”
|
12月前
|
机器学习/深度学习 存储 算法
I2A、MBMF、MVE、DMVE…你都掌握了吗?一文总结强化学习必备经典模型(三)
I2A、MBMF、MVE、DMVE…你都掌握了吗?一文总结强化学习必备经典模型
364 0
|
1天前
|
机器学习/深度学习 算法
算法人生(2):从“强化学习”看如何“活在当下”
本文探讨了强化学习的原理及其在个人生活中的启示。强化学习强调智能体在动态环境中通过与环境交互学习最优策略,不断迭代优化。这种思想类似于“活在当下”的哲学,要求人们专注于当前状态和决策,不过分依赖历史经验或担忧未来。活在当下意味着全情投入每一刻,不被过去或未来牵绊。通过减少执着,提高觉察力和静心练习,我们可以更好地活在当下,同时兼顾历史经验和未来规划。文章建议实践静心、时间管理和接纳每个瞬间,以实现更低焦虑、更高生活质量的生活艺术。
|
9月前
|
机器学习/深度学习 算法 自动驾驶
【强化学习】常用算法之一 “PPO”
强化学习是一种通过智能体与环境的互动来学习最优行为策略的机器学习方法。相较于监督学习和无监督学习,强化学习的特点在于具有延迟奖赏和试错机制。在强化学习中,智能体通过选择动作来影响环境,并且从环境中获得奖励作为反馈。强化学习的目标是通过与环境的交互,使得智能体能够学会最优的行为策略。PPO算法属于策略优化(Policy Optimization)算法家族,是由OpenAI在2017年提出的。与其他策略优化算法相比,PPO算法具有较高的样本利用率和较好的收敛性能。
699 1
【强化学习】常用算法之一 “PPO”
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
【ICLR2020】基于模型的强化学习算法玩Atari【附代码】
【ICLR2020】基于模型的强化学习算法玩Atari【附代码】
127 0
|
9月前
|
机器学习/深度学习 算法 决策智能
【ICLR2020】通过强化学习和稀疏奖励进行模仿学习
【ICLR2020】通过强化学习和稀疏奖励进行模仿学习
114 0
|
10月前
|
机器学习/深度学习 人工智能 算法
强化学习DQN之俄罗斯方块
强化学习DQN之俄罗斯方块
125 0
|
10月前
|
机器学习/深度学习 存储 算法
强化学习之DQN论文介绍
强化学习之DQN论文介绍
132 0
|
12月前
|
机器学习/深度学习 人工智能 算法
I2A、MBMF、MVE、DMVE…你都掌握了吗?一文总结强化学习必备经典模型(四)
I2A、MBMF、MVE、DMVE…你都掌握了吗?一文总结强化学习必备经典模型
475 0
|
12月前
|
机器学习/深度学习 自然语言处理 算法
I2A、MBMF、MVE、DMVE…你都掌握了吗?一文总结强化学习必备经典模型(二)
I2A、MBMF、MVE、DMVE…你都掌握了吗?一文总结强化学习必备经典模型(二)
199 0