Q-learning DQN DDQN 区别

Posted 软件工程小施同学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Q-learning DQN DDQN 区别相关的知识,希望对你有一定的参考价值。

Q-learning是什么?

Q-learning是强化学习(RL)的经典算法,简单来说,RL智能体与环境进行交互,如果采取的行动是「好」的,就会获得奖励,否则获得惩罚,强化学习算法的目标是最大化智能体获得的长期奖励总和。

在强化学习智能体和环境之间的交互循环中,每个时间步(timestep),

智能体需要选择一个行动(action)来改变环境(environment)的状态(state)。

环境也提供一个奖励信号(reward signal)以表示智能体的行动是否有利。

处于一个特定的游戏状态或采取一个行动的未来奖励是不难估计的,难的是你的行动对环境的影响可能是不确定的,这也意味着你得到的奖励也是不确定的。尤其是在我们不知道环境的运行规则,或是在很遥远的未来且状态数很多的情况下,我们怎么能知道一个行动会带来什么奖励呢?

比如说,玩《超级马里奥》某一关时,最佳的行动可能是在第一帧跳跃,但如果奖励一直在关卡的最后阶段,要怎么才能知道这个行动的价值?

Q-learning采取的方法是学习一个行动-价值函数(action-value function),也被称为Q函数

Q函数为每个(状态,行动)组合分配一个价值,用来表示在某一状态下采取某一行动时预期未来回报的估计,并且Q函数为所有状态都定义了一个价值。

在Q-learning中,智能体通过与环境互动和更新采取的(状态,行动)的Q值来学习Q-函数估计价值。在采取一个行动之后,用环境中新状态的Q值来更新所有Q值。重复迭代,最终可以估计出该状态的Q值,并根据这一估计采取行动。

一些简单的游戏通过这种方式可以估计出所有的(状态,行动)对的价值,但对于雅达利游戏来说,(状态,行动)的组合数量实在是太多了,想存储在一个简单的表格中基本是无法实现的。

比如说在打砖块游戏中,如果只用球拍和球,在一个300*800像素的屏幕上,状态的数量就达到了10的9次方到10的11次方,海量的状态空间情况下,引入深度神经网络就显得很必要了。

神经网络不好训

Q-Learning和神经网络的结合在理论上是非常强大的。Q-learning可以让智能体学习任何决策任务,而神经网络可以表示任何函数。如果成功训练,就会有大量的潜在应用场景得以实现,比如自动驾驶汽车、机器人技术等。

但要训练Q-learning和神经网络的组合是非常困难的。即使经过多次在不同状态下采取行动并获得奖励的迭代,有时性能也不会提高。常见的情况就是,智能体的性能在明显改进之后开始出现下降。

在DeepMind发布DQN论文后,这种情况仍然很常见。

Q-learning算法的每个更新步骤都是基于该步的经历,但是,如果每走一步就更新的话,算法会因为抽样误差(sampling error)而导致不稳定的更新,而抽样误差是由任意分布中抽取数据点导致的。

如果你在最近的数据点的序列上进行训练,那么你看到的数据肯定都是相似的,因为通常需要很多个时间步才能遍历到整个状态空间,所以你访问的下一个状态与你当前所处的状态基本上就算密切相关。样本之间的这种相关性会使得学习效率低下,而将它们打散后,通过打破相关性可以改善学习效果。

为了缓解这种情况,DeepMind在DQN算法中引入了一种新机制:经验重放(Experience Replay),其中经验指的是智能体在一个时间段内观察到的状态、行动、奖励和下一个状态。经验重放将每个时间段的状态、行动、奖励和后续状态存储在内存中,并在每个时间段从中随机选择一批。

对数据进行抽样训练,使每次更新使用的经验随机化,就可以打破数据点之间的关联性,能够降低更新的方差。由于每一步的经验都被用于许多权重的更新,这也意味着训练需要更少的数据。

在Q-Learning中,有三个使用Q函数的地方:

为了得到第一个状态的Q值

用于评估哪个后续状态的Q值最高,以选择一个行动 

找到该后续状态的Q值  

将Q-learning与神经网络结合起来,如果直接将同一个网络用于这三个地方,也就意味着如果模型高估了一个状态的价值,那前面的状态也会被高估,因为Q-learning使用最大行动价值作为最大预期行动价值的估计,可能会导致学习到一个错误的Q-函数估计。

不过在学习过程中,数值估计不精确是很正常的,也就是说,高估是很常见的。

如果对Q值的高估在各个状态都是一致的,那这就不是一个问题。如果所有的Q值都有类似的变化,那么我们选择的行动也会是一样的。但从经验上看,实际运行通常不是这样的,也就意味着由近似的Q值产生的策略(policy)不一定会收敛到最佳策略

解决高估问题的方法是使用Double DQN,也是DeepMind在2015年发表的另一篇论文中提出的。

论文链接:https://arxiv.org/pdf/1509.06461.pdf

Double DQN指的是模型拥有两个深度神经网络,模型使用正在训练的网络在与环境互动时进行行动选择,Q-函数估计更新使用后续状态的Q值,这就是第二个目标网络派上用场的地方。

目标网络通常是网络的一个旧版本,用来寻找具有后续状态的最大Q值的行动,而原始网络用来评估这个后续行动的Q值。通过将用于行动选择和行动评估的Q值解耦,就不太可能选择到高估的值了。

自此,训练DQN的坑基本都被填上了,不过强化学习后续还取得了其他重大进展,比如围棋领域的AlphaGo,星际争霸、德州扑克等领域都被攻克。

但一切都是自DQN发布之后,深度强化学习才进入春天,DQN也展现了其解决通用问题的潜力。

以上是关于Q-learning DQN DDQN 区别的主要内容,如果未能解决你的问题,请参考以下文章

Deep Reinforcement Learning with Double Q-learning: DDQN 简约不简单

强化学习Double DQN (DDQN)

强化学习Double DQN (DDQN)

(pytorch复现)基于深度强化学习(CNN+dueling network/DQN/DDQN/D3QN/PER)的自适应车间调度(JSP)

(pytorch复现)基于深度强化学习(CNN+dueling network/DQN/DDQN/D3QN)的自适应车间调度(JSP)

(pytorch复现)基于深度强化学习(CNN+dueling network/DQN/DDQN/D3QN)的自适应车间调度(JSP)