1 学习目标

  1. 复习Q-Learning;

  2. 理解什么是值函数近似(Function Approximation);

  3. 理解什么是DQN,弄清它和Q-Learning的区别是什么。

2 用Q-Learning解决经典迷宫问题

现有一个5房间的房子,如图1所示,房间与房间之间通过门连接,编号0到4,5号是房子外边,即我们的终点。我们将agent随机放在任一房间内,每打开一个房门返回一个reward。图2为房间之间的抽象关系图,箭头表示agent可以从该房间转移到与之相连的房间,箭头上的数字代表reward值。



根据此关系,可以得到reward矩阵为


Q-Learning是一种off-policy TD方法,伪代码如图所示
我们首先会初始化一个Q表,用于记录状态-动作对的值,每个episode中的每一步都会根据下列公式更新一次Q表


这里的迷宫问题,每一次episode的结束指的是到达终点状态5。为了简单起见,这里将学习率
设为1,更新公式变为
另外,将衰减系数
设为0.8。Q表初始化为一个5×5的全0矩阵。下面的图展示了一个episode中一步的更新过程,每次这样更新,最终Q表会收敛到一个矩阵。


最终Q表收敛为

因此,也可以得到最优路径如下红色箭头所示

Python代码:

import numpy as np
GAMMA = 0.8
Q = np.zeros((6,6))
R=np.asarray([[-1,-1,-1,-1,0,-1],[-1,-1,-1,0,-1,100],[-1,-1,-1,0,-1,-1],[-1,0, 0, -1,0,-1],[0,-1,-1,0,-1,100],[-1,0,-1,-1,0,100]])
def getMaxQ(state):return max(Q[state, :])
def QLearning(state):curAction = Nonefor action in range(6):if(R[state][action] == -1):Q[state, action]=0else:curAction = actionQ[state,action]=R[state][action]+GAMMA * getMaxQ(curAction)
count=0
while count<1000:for i in range(6):QLearning(i)count+=1
print(Q/5)

Q-Learning方法很好的解决了这个迷宫问题,但是这终究只是一个小问题(状态空间和动作空间都很小),实际情况下,大部分问题都是有巨大的状态空间或者动作空间,想建立一个Q表,内存是绝对不允许的,而且数据量和时间开销也是个问题。

3 值函数近似与DQN

值函数近似(Function Approximation)的方法就是为了解决状态空间过大,也称为“维度灾难”的问题。通过用函数而不是Q表来表示
这个函数可以是线性的也可以使非线性的。
其中
称为“权重”。那怎么把这个权重求出来,即拟合出这样一个合适的函数呢?这里就要结合机器学习算法里的一些有监督学习算法,对输入的状态提取特征作为输入,通过MC/TD计算出值函数作为输出,然后对函数参数
进行训练,直到收敛。这里主要说的是回归算法,比如线性回归、决策树、神经网络等。
这里,就可以引入DQN(Deep Q-Network)了,实际上它就是Q-Learning和神经网络的结合,将Q-Learning的Q表变成了Q-Network。
好,现在关键问题来了。这么去训练这个网络呢?换句话说,怎么去确定网络参数
呢?第一,我们需要一个Loss Function;第二,我们需要足够的训练样本。
训练样本好说,通过
策略去生成就好。回忆一下Q-Learning,我们更新Q表是利用每步的reward和当前Q表来迭代的。那么我们可以用这个计算出来的Q值作为监督学习的“标签”来设计Loss Function,我们采用如下形式,即近似值和真实值的均方差

采用随机梯度下降法(SGD)来迭代求解,得到我们想要的
,具体公式和过程还请看参考资料,这里不展开了,其实就是求导啦。值得一提的是,上述公式中的
根据不同方法算出来,其形式不一样,比如利用MC,则为
(回报);利用TD(0),则为
;Q-Learning呢,就是

在David Silver的课里,他根据每次更新所参与样本量的不同把更新方法分为增量法(Incremental Methods)和批处理法(Batch Methods)。前者是来一个数据就更新一次,后者是先攒一堆样本,再从中采样一部分拿来更新Q网络,称之为==“经验回放”==,实际上DeepMind提出的DQN就是采用了经验回放的方法。为什么要采用经验回放的方法?因为对神经网络进行训练时,假设样本是独立同分布的。而通过强化学习采集到的数据之间存在着关联性,利用这些数据进行顺序训练,神经网络当然不稳定。经验回放可以打破数据间的关联。

最后附上DQN的伪代码


学到这里,其实可以做一个阶段性总结了,强化学习算法的基本框架可以用下图概括
本文介绍了这个图里的大部分内容,但最重要、应用最为广泛的policy-based方法还没有介绍,这也是后面要着重去学习的。

参考
[1]Reinforcement Learning: An Introduction - Chapter 9: On-policy Prediction with Approximation

[2]Reinforcement Learning: An Introduction - Chapter 10: On-policy Control with Approximation

[3]David Silver’s RL Course Lecture 6 - Value Function Approximation (video, slides)

[4]DQN从入门到放弃5 深度解读DQN算法link

[5]一条咸鱼的强化学习之路6之值函数近似(Value Function Approximation)和DQNlink

强化学习——从Q-Learning到DQN相关推荐

  1. RL之Q Learning:利用强化学习之Q Learning实现走迷宫—训练智能体走到迷宫(复杂迷宫)的宝藏位置

    RL之Q Learning:利用强化学习之Q Learning实现走迷宫-训练智能体走到迷宫(复杂迷宫)的宝藏位置 目录 输出结果 设计思路 实现代码 测试记录全过程 输出结果 设计思路 实现代码 f ...

  2. RL之Q Learning:利用强化学习之Q Learning实现走迷宫—训练智能体走到迷宫(简单迷宫)的宝藏位置

    RL之Q Learning:利用强化学习之Q Learning实现走迷宫-训练智能体走到迷宫(简单迷宫)的宝藏位置 目录 输出结果 设计思路 实现代码 测试记录全过程 输出结果 设计思路 实现代码 f ...

  3. mdp框架_强化学习中q learning和MDP的区别是什么?

    MDP通常是指一种用转移概率描述连续不确定概率过程的数学框架,是强化学习中最基础的概念,很多强化学习的算法都是在把问题抽象为一个MDP之后再想办法求解的. 而q-learning是求解强化学习问题的算 ...

  4. 第七章 深度强化学习-深度Q网络系列1(Deep Q-Networks,DQN)

    获取更多资讯,赶快关注上面的公众号吧! 文章目录 第七章 深度强化学习-深度Q网络 7.1 学习目标 7.2 深度学习和强化学习的区别 7.3 DQN原理 7.4 DQN算法 7.4.1 预处理 7. ...

  5. Q学习(Q learning) 强化学习

    Q学习(Q learning) 强化学习的简单例子 Matlab实现 可视化_Morty 的挖坑记录-CSDN博客 强化学习(MATLAB) - 叮叮当当sunny - 博客园

  6. 强化学习(Reinforcement learning)综述

    文章目录 Reinforcement learning 综述 强化学习的分类 环境(Model-free,Model-based) Based(Policy-Based RL & Value- ...

  7. 强化学习之Q学习与SARSA

    ** Q学习路径规划与SARSA法路径规划 ** Q学习与SARSA学习简介 强化学习的历史可以用两条各自独立但丰富多彩的主线来追溯..一条主线聚焦 于研究最优化控制,以及使用价值函数动态规划等算法来 ...

  8. 动手强化学习(六):DQN 算法

    动手强化学习(六):DQN 算法 1. 简介 2. CartPole 环境 3. DQN 3.1 经验回放 3.2 目标网络 4. DQN 代码实践 5. 以图像为输入的 DQN 算法 6. 小结 文 ...

  9. 强化学习(Reinforcement Learning)是什么?强化学习(Reinforcement Learning)和常规的监督学习以及无监督学习有哪些不同?

    强化学习(Reinforcement Learning)是什么?强化学习(Reinforcement Learning)和常规的监督学习以及无监督学习有哪些不同? 目录

  10. 学习笔记|强化学习(Reinforcement Learning, RL)——让AlphaGo进化得比人类更强

    文章目录 1. 题外话:人类棋手的最后赞礼 2. 强化学习概述 2.1 强化学习的目标也是要找一个Function 2.2 强化学习的三个基本步骤 2.2.1 定义一个function 2.2.2 定 ...

最新文章

  1. Varnish使用小结
  2. Oracle数据库联邦,使用联邦数据库将oracle表迁移到DB2(9.7)中的脚本说明
  3. 设计模式总结篇系列:原型模式(Prototype)
  4. 利用php实现删除,利用PHP实现删除目录及目录下所有文件 源代码
  5. 除 Intel Realsense Dxxx 外 各市面深度摄像头对比(小觅智能 D1000-IR-120/Color、INDEMIND、领晰(LEADSENSE))(212)
  6. Python Django模板语法标签代码示例(页面渲染与取值)
  7. 10个CSS和jQuery的加载中(loading)动画效果实现
  8. html select选择事件_一道搜狗面试题:IO多路复用中select、poll、epoll之间的区别...
  9. android unbound prefix
  10. malloc/free 和 new/delete
  11. VS2010中的快捷键
  12. 一统江湖的大前端(2)—— Mock.js + Node.js 如何与后端潇洒分手
  13. Python中的常用模块
  14. 使用 show status 命令
  15. 作为一个程序员需要学多少技能?
  16. 软件构建中的设计(一)
  17. 关于.NET异常 你应该知道的更多点
  18. Linux后台运行程序最实用的两种方式
  19. 六月份大学毕业,却感觉自己什么都不会。很迷茫,怎么办?
  20. python按列写入csv文件_Python csv writer按列写入,n

热门文章

  1. 抖音将会输给快手?时间会证明一切
  2. 沧州 太极计算机,沧州医学高等专科学校宿舍条件,宿舍图片和环境空调及分配方法...
  3. spark-1-spark core
  4. Self-Attentive 基于自注意力分类的非结构化日志异常检测
  5. STM32F4系列HAL库配置定时器实验——输入捕获
  6. 灵魂画手必读:只需完成手画线稿,让AI算法帮你自动上色
  7. 印象笔记以PDF导出笔记
  8. 包工头一般怎样接工程?如何找工程包工平台?
  9. Hi3519V101 sample说明
  10. 初级倍增算法(模拟+讲解)