一图看懂DQN(Deep Q-Network)深度强化学习算法

DQN简介

DQN是一种深度学习和强化学习结合的算法,提出的动机是传统的强化学习算法Q-learning中的Q_table存储空间有限,而现实世界甚至是虚拟世界中的状态是接近无限多的(比如围棋),因此,无法构建可以存储超大状态空间的Q_table。不过,在机器学习中, 有一种方法对这种事情很在行,那就是神经网络,可以将状态和动作当成神经网络的输入,然后经过神经网络分析后得到动作的 Q 值,这样就没必要在表格中记录 Q 值,而是直接使用神经网络预测Q 值 [1]。

算法框架

下面是DQN算法框架,如果想更详细地理解DQN,请点击这里,参阅源文章《Playing Atari with Deep Reinforcement Learning》。

在这里插入图片描述

算法图解

根据文献阅读,学习教程[1](可点击这里),和项目实践[2](可点击这里),我结合自己的理解,总结了DQN算法的基本流程,如下图。
DQN算法流程图

算法本质

DQN算法基本沿袭了Q-learning的思想,只不过为了能够与深度神经网络结合,而做了一些改进的装饰 [1]:

  1. 增加记忆库:如上图中的第⑤步,记忆库的作用是可以用于重复学习,正如同背单词,单词要重复背才能够记得深刻。
  2. 利用神经网络计算Q值:如上图中的第8.4步,这一步的思想和Q-learning的计算Q值的思想是一致的,利用预测网络计算预测值,利用目标网络计算目标值,两者之间的误差,用来更新预测网络的参数。
  3. 暂时冻结目标网络:如上图的第8.2步,由于在强化学习中,连续获得的观测值之间往往是有相关性的,比如,今天背的单词中很有可能有一部分是昨天背的单词,为了断绝这种数据的相关性,需要复制一份大脑Y出来,即为目标网络,这个大脑Y的结构与现实的大脑X是一样的,但是不会每一步都更新为大脑X。那么,当大脑X在碰到十天前记的单词时,预测的单词释义到底对不对呢,就可以用十天前复制的大脑Y来检验了。也就是说,目标网络就是用来检验预测网络的Q值是否预测的正确,如果不正确,就更新预测网络参数。

总结

真正要理解算法,一定要动手去复现原始论文的代码,只看书本上的算法,永远理解的只是皮毛。欢迎大家在下方留言讨论

[1] https://mofanpy.com/tutorials/machine-learning/reinforcement-learning/intro-DQN/
[2] https://github.com/MorvanZhou/Reinforcement-learning-with-tensorflow/tree/master/contents/5_Deep_Q_Network

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐