简介

DQN——Deep Q-learning。在上一篇博客DQN(Deep Q-learning)入门教程(四)之Q-learning Play Flappy Bird 中,我们使用Q-Table来储存state与action之间的q值,那么这样有什么不足呢?我们可以将问题的稍微复杂化一点了,如果在环境中,State很多,然后Agent的动作也很多,那么毋庸置疑Q-table将会变得很大很大(比如说下围棋),又或者说如果环境的状态是连续值而不是离散值,尽管我们可以将连续值进行离散化,但是又可能会导致q-table变得庞大,并且可能还有一个问题,如果某一个场景没有训练过,也就是说q-table中没有储存这个值,那么当agent遇到这种情况时就会一脸懵逼。

这个时候我们联想我们在神经网络中学到的知识,我们可以将Q-table变成一个网络模型,如下所示:(图来自莫烦

以前我们想获得Q值,需要去q-table中进行查询,但是现在我们只需要将状态和动作(或者仅输入状态)即可获得相对应的Q值,这样,我们在内存中仅仅只需要保存神经网络模型即可,简单又省内存儿。

如果不了解神经网络的话,可以先去看一看相关的知识,或者看一看我之前的博客,里面包含了相关的介绍以及具体的实例使用:

  1. 数据挖掘入门系列教程(七点五)之神经网络介绍
  2. 数据挖掘入门系列教程(八)之使用神经网络(基于pybrain)识别数字手写集MNIST
  3. 数据挖掘入门系列教程(十点五)之DNN介绍及公式推导
  4. 数据挖掘入门系列教程(十一)之keras入门使用以及构建DNN网络识别MNIST
  5. 数据挖掘入门系列教程(十一点五)之CNN网络介绍
  6. 数据挖掘入门系列教程(十二)之使用keras构建CNN网络识别CIFAR10

神经网络中有两个很重要的概念:训练预测。预测我们很好理解,就是输入一个状态\(s_1\),它会返回对应的\(q(s_1,a_1),q(s_1,a_2) \cdots q(s_1,a_n)\),然后我们选择最大值对应的Action就行了。那么我们怎么进行训练呢?

神经网络的训练

在传统的DNN or CNN网络中,我们是已知训练集,然后进多次训练的。但是在强化学习中,训练集是未知的,因为我们的要求是机器进行自我学习。换句话来说,就是神经网络的更新是实时的,一边进行游戏得到数据集一边使用数据进行训练。

首先我们假设模型是下图这样的:输入一个 \(s\) 返回不同动作对应的 \(q\) 值。

那么我们进行训练的时候,\(x\_train\) 即为状态 \(s_1\) ,\(y\_train\) 则为 \(q(s_1,a_1),q(s_1,a_2) \cdots q(s_1,a_n)\)。,现在的问题就回到了我们如何得到“真实”的 \(y\_train\) 。在DQN(Deep Q-learning)入门教程(三)之蒙特卡罗法算法与Q-learning算法中我们提到使用如下的公式来更新q-table:

\[{\displaystyle Q^{new}(s_{t},a_{t})\leftarrow \underbrace {Q(s_{t},a_{t})} _{\text{旧的值}}+\underbrace {\alpha } _{\text{学习率}}\cdot \overbrace {{\bigg (}\underbrace {\underbrace {r_{t}} _{\text{奖励}}+\underbrace {\gamma } _{\text{奖励衰减因子}}\cdot \underbrace {\max _{a}Q(s_{t+1},a)} _{\text{estimate of optimal future value}}} _{\text{new value (temporal difference target)}}-\underbrace {Q(s_{t},a_{t})} _{\text{旧的值}}{\bigg )}} ^{\text{temporal difference}}}
\]

对应的图如下所示:

其中我们将\(Q(s_1,a_1) = R+\gamma^{*} \max Q(s_2)\)称之为Q现实,q-table中的\(Q(s_1,a_1)\)称之为Q估计。然后计算两者差值,乘以学习率,然后进行更新Q-table。

我们可以想一想神经网络中的反向传播算法,在更新网络权值的时候,我们是得到训练集中的真实值和预测值之间的损失函数,然后再乘以一个学习率,再向前逐渐地更新网络权值。这样想一想,似乎两者之间很相似。

在DQN中我们可以这样做:

具体的使用,可以看一看下一篇博客的具体使用,用代码来表达更加的丝滑。

经验回放(Experience Replay)

经验回放是一个很妙的方法。实际上,我们训练神经网络模型需要训练很多次才可以得到一个比较好的模型,也就是说,数据会被重复的填入到神经网络中训练很多次。而经验回放就是将数据进行保存,比如说agent再\(S_1\)状执行动作\(a_1\)得到了\(r_1\)的奖励,然后状态转移到了\(S_2\),则经验池就会将\((S_1,a_1,r_1,S_2)\)进行保存,然后我们在训练的时候,随机从经验池中抽取一定数量的数据来进行训练。这样就可以不停的优化网络模型。

如果没有经验回放,我们则需要每次得到一个数据,则就进行训练,我们每次训练的内容都是目前的数据。但是,有了经验回放,我们就可以从历史数据中选择数据进行训练。

算法流程

下面介绍一下算法流程:

下面是来自Playing Atari with Deep Reinforcement Learning论文中算法流程:

下面是来自强化学习(八)价值函数的近似表示与Deep Q-Learning对算法的中文翻译:

总结

以上便是DQN的介绍,实际上DQN还有很多优化算法,比如说 Nature DQN使用两个Q网络来减少相关性,Double DQN(DDQN,Nature DQN的优化)……

下一篇博客将具体的使用DQN进行训练,同时DQN入门博客也就快结束了。

参考

DQN(Deep Q-learning)入门教程(五)之DQN介绍的更多相关文章

  1. DQN(Deep Q-learning)入门教程(三)之蒙特卡罗法算法与Q-learning算法

    蒙特卡罗法 在介绍Q-learing算法之前,我们还是对蒙特卡罗法(MC)进行一些介绍.MC方法是一种无模型(model-free)的强化学习方法,目标是得到最优的行为价值函数\(q_*\).在前面一 ...

  2. DQN(Deep Q-learning)入门教程(六)之DQN Play Flappy-bird ,MountainCar

    在DQN(Deep Q-learning)入门教程(四)之Q-learning Play Flappy Bird中,我们使用q-learning算法去对Flappy Bird进行强化学习,而在这篇博客 ...

  3. DQN(Deep Q-learning)入门教程(二)之最优选择

    在上一篇博客:DQN(Deep Q-learning)入门教程(一)之强化学习介绍中有三个很重要的函数: 策略:\(\pi(a|s) = P(A_t=a | S_t=s)\) 状态价值函数:\(v_\ ...

  4. Elasticsearch入门教程(五):Elasticsearch查询(一)

    原文:Elasticsearch入门教程(五):Elasticsearch查询(一) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:h ...

  5. 无废话ExtJs 入门教程五[文本框:TextField]

    无废话ExtJs 入门教程五[文本框:TextField] extjs技术交流,欢迎加群(201926085) 继上一节内容,我们在表单里加了个两个文本框.如下所示代码区的第42行位置,items: ...

  6. PySide——Python图形化界面入门教程(五)

    PySide——Python图形化界面入门教程(五) ——QListWidget 翻译自:http://pythoncentral.io/pyside-pyqt-tutorial-the-qlistw ...

  7. RabbitMQ入门教程(五):扇形交换机发布/订阅(Publish/Subscribe)

    原文:RabbitMQ入门教程(五):扇形交换机发布/订阅(Publish/Subscribe) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. ...

  8. WPF入门教程系列三——Application介绍(续)

    接上文WPF入门教程系列二——Application介绍,我们继续来学习Application 三.WPF应用程序的关闭 WPF应用程序的关闭只有在应用程序的 Shutdown 方法被调用时,应用程序 ...

  9. CPF 入门教程 - 各个控件介绍(八)

    CPF C#跨平台桌面UI框架 系列教程 CPF 入门教程(一) CPF 入门教程 - 数据绑定和命令绑定(二) CPF 入门教程 - 样式和动画(三) CPF 入门教程 - 绘图(四) CPF 入门 ...

随机推荐

  1. 2-MyBatisPlus教程(HelloWorld)

    1,准备数据 DROP TABLE IF EXISTS user; CREATE TABLE user ( id ) NOT NULL COMMENT '主键ID', name ) NULL DEFA ...

  2. E - 梦幻岛宝珠 HYSBZ - 1190 变形01背包 难

    E - 梦幻岛宝珠 HYSBZ - 1190 这个题目我觉得很难,看题解都看了很久. 首先可以得到一个大概的思路就是分组,每一个数都可以分成 a*2^b  所以把b相同的数都分成一个组. 在每一组内部 ...

  3. 网络流二十四题,题解summary

    没有全部写完,有几题以后再补吧. 第一题:最简单的:飞行员配对方案问题 讲讲这个题目为什么可以用网络流? 因为这个题目是要进行两两之间的匹配,这个就可以想到用二分图匹配,二分图匹配又可以用网络流写. ...

  4. qt creator源码全方面分析(4-5)

    目录 Qt中的字符串 QLatinString 详细介绍 源码 小结 QStringLiteral(str) 详细介绍 源码 小结 Qt中的字符串 Qt中处理字符串最常用的肯定是QString,但是在 ...

  5. Android广播机制(1)

    目录 简介 发送广播和接收广播方式 广播类型 接收系统广播 动态注册监听网络变化 步骤 优化 静态注册实现开机启动 步骤 注意 简介 就是因为安卓中的每个应用程序都可以对自己感兴趣的广播进行注册,这样 ...

  6. C#语言实现推箱子

    话不多说直接上代码 using System; namespace Boxer { class Program { const int WIDTH = 8; const int HEIGHT = 8; ...

  7. fakebook

    0x01 查看robots.txt 发现user.php.bak文件 得到源码 <?php class UserInfo { public $name = ""; publi ...

  8. 前端面试题-http和https区别

    说一下http和https https的SSL加密是在传输层实现的. (1)http和https的基本概念 http: 超文本传输协议,是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求 ...

  9. The Apache Tomcat Connector

    http://tomcat.apache.org/connectors-doc/generic_howto/quick.html 搭建最简单的tomcat connector 用到了apapche 的 ...

  10. spark机器学习从0到1逻辑斯蒂回归之(四)

      逻辑斯蒂回归 一.概念 逻辑斯蒂回归(logistic regression)是统计学习中的经典分类方法,属于对数线性模型.logistic回归的因变量可以是二分类的,也可以是多分类的.logis ...