一、Q-Learning:

例子:https://www.zhihu.com/question/26408259/answer/123230350

http://ml.cs.tsinghua.edu.cn:5000/demos/flappybird/

以上为Q-Learning的伪代码

Q(S,A)可以是一个查找表,也可以是一个神经网络。

其中最重要的公式是:

其中1-alpha是保留多少以前的经验,gamma是对最长期reward进行discount

(这个公式有四个好处:1、不需要知道状态之间的transition probaility(model free) 2、不需要等到episode结束后才更新Q值(相比于MCTS) 3、收敛到最优解 4、off-policy)

二、神经网络的加入:

当输入状态比较大的时候,Q值表就非常的大,所以就只能使用神经网络了。

这时候,就设计Q值网络训练的问题。为了对神经网络进行训练,可以把Q值网络的损失函数设为一个回归问题。

回归问题和神经网络的优势有两点:

1、可以进行神经网络训练,使得庞大的state空间进行压缩。

2、对原始经验的保存变成了网络参数的保存。

三、探索:

一般情况下,Q-Learning对自己经常经历的一段路径估计比较准,对于没经常经历的估计不那么准。所以,会出现一种情况就是:在前期Q值估计不准的情况下,对某一本质上很好的决策进行了错误估计,认为这段路径会很差,导致以后选择了一个错误的决策,然后就会一直在这个错误的方向下一直走下去,不会回过头来探索本质上很好的那个决策。

所以,一般在前期的时候,我们会进行随机的探索不同的路径,获得一个比较好的初始Q值。

四、利用

但是由于状态空间过大,完全随机探索可能出现一个问题:状态空间大,采样不够,Q值估计不准。

而且,其实我们最终关心的只是表现好好的状态及其周边状态的Q值。所以,在随机探索初始化Q值后,我们通过Q值来选取我们关心的状态,加大对我们关心状态的训练。

五、replay-memory

我们如果在线训练,可能模拟器非常慢,RL训练需要等待模拟器准备数据。所以我们可以把数据存到replay-memory里面,然后用来训练。

另一个好处就是,在线训练的数据和当前神经网络的参数有很大的联系,导致数据自产自销,数据不够客观,可能最终处于某种恶性循环。

六、一个变态的RL任务

有这样一种RL任务:

1、你只要随机探索,基本上就到不了你最终关心的状态,采样出来的数据对最终关心状态无关。

2、当你不随机探索,由于神经网络没见过好的状态,对好的状态的估值并不好,也不会进入好的状态。

3、很难或者没法进行仿真模拟、回溯等,也就是出现好状态时,很难加大对好状态的采样。

所以,agent会一直无法进入最终关心的状态,也就不会进行相应的数据采样,导致agent收敛到局部最优解,当然这种局部最优解可能是我们完全没法忍受的。我们对于这种任务,我们应该怎么解决?

有人提出了对状态进行reconstruction,就是当状态没怎么见过时,给个较大的reward,这样去帮助agent去进入没见过的状态。

但是,个人觉得这种方法有两个问题:一个是reconstruction的loss是否可靠,能否代表对未见过状态的表示,这个是没办法很好回答的。二个是我们本质上只是想加大进入好状态的概率,而不是进入未知状态的概率,所以这种方法可能最终对实际任务没有太大帮助。

那么有什么解决办法呢?主要有一下几点:

1、人为先验知识:对于一个封闭系统来说,如果内部因素全都考虑到了,还是存在问题,就只能依靠外部力量进行解决。

  a、人为选择好的action。对于在某些状态下,如果人类很明确知道某个action会更好,那么我们可以帮助agent进行选择action,以便更多地进入关心的状态。这里不是简单的帮助agent进行人为选择action,真正目的是为了加大好数据的采样量。

  b、监督训练获得更好的feature表示。对于状态空间大的情况,我们通过神经网络对状态进行压缩,希望对坏状态有个相似的feature表示,但是,rl任务并没有很明确的监督信息,feature的表示能力和泛化能力可能很弱,加入监督信号,对feature学习进行一个很好的表示,以便对于好坏状态有更好的表示,同时提高泛化能力。

2、期望于内部pattern:作为机器学习的人员,我们希望找到所有内部系统的自身pattern,所有我们寄希望于这个rl系统还隐藏着未被发现的pattern。

  a、rewards:一个rl任务可能有多种reward,特别是对于复杂的任务,一般都有很多的评价指标,这些评价指标可能隐藏着某种pattern,如何利用其中的pattern?

七、RL工作方向

1、并行化,加速采(A3C)

2、multi-reward,处理隐藏的rewards pattern

3、训练方式变化,解决神经网络欠拟合,过拟合,不稳定等问题。(进化策略)

4、连续action?

Q-Learning的更多相关文章

  1. 强化学习9-Deep Q Learning

    之前讲到Sarsa和Q Learning都不太适合解决大规模问题,为什么呢? 因为传统的强化学习都有一张Q表,这张Q表记录了每个状态下,每个动作的q值,但是现实问题往往极其复杂,其状态非常多,甚至是连 ...

  2. 如何用简单例子讲解 Q - learning 的具体过程?

    作者:牛阿链接:https://www.zhihu.com/question/26408259/answer/123230350来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  3. 强化学习_Deep Q Learning(DQN)_代码解析

    Deep Q Learning 使用gym的CartPole作为环境,使用QDN解决离散动作空间的问题. 一.导入需要的包和定义超参数 import tensorflow as tf import n ...

  4. 增强学习(五)----- 时间差分学习(Q learning, Sarsa learning)

    接下来我们回顾一下动态规划算法(DP)和蒙特卡罗方法(MC)的特点,对于动态规划算法有如下特性: 需要环境模型,即状态转移概率\(P_{sa}\) 状态值函数的估计是自举的(bootstrapping ...

  5. deep Q learning小笔记

    1.loss 是什么 2. Q-Table的更新问题变成一个函数拟合问题,相近的状态得到相近的输出动作.如下式,通过更新参数 θθ 使Q函数逼近最优Q值 深度神经网络可以自动提取复杂特征,因此,面对高 ...

  6. To discount or not to discount in reinforcement learning: A case study comparing R learning and Q learning

    https://www.cs.cmu.edu/afs/cs/project/jair/pub/volume4/kaelbling96a-html/node26.html [平均-打折奖励] Schwa ...

  7. (转) Deep Learning Research Review Week 2: Reinforcement Learning

      Deep Learning Research Review Week 2: Reinforcement Learning 转载自: https://adeshpande3.github.io/ad ...

  8. Top Deep Learning Projects in github

    Top Deep Learning Projects A list of popular github projects related to deep learning (ranked by sta ...

  9. Open source packages on Deep Reinforcement Learning

    智能车 self driving car + 强化学习 reinforcement learning + 神经网络 模拟 https://github.com/MorvanZhou/my_resear ...

  10. Teaching Your Computer To Play Super Mario Bros. – A Fork of the Google DeepMind Atari Machine Learning Project

    Teaching Your Computer To Play Super Mario Bros. – A Fork of the Google DeepMind Atari Machine Learn ...

随机推荐

  1. HTML5 History API让ajax能回退到上一页

    HTML5 History API提供了一种功能,能让开发人员在不刷新整个页面的情况下修改站点的URL.这个功能很有用,例如通过一段JavaScript代码局部加载页面的内容,你希望通过改变当前页面的 ...

  2. profile bashrc bash_profile 之间的区别和联系

    /etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置. /etc/bashrc:为每一个 ...

  3. Windows / VS下不同类型变量转换

    [时间:2016-07] [状态:Open] [关键词:windows,vs,mfc,类型转换] 在实际编码中经常遇到不同类型及编码方式的字符串.变量之间的转换,比如Unicode->char. ...

  4. Linux screen用法简介

    [admin@VM_0_2_centos ~]$ screen -bash: screen: 未找到命令 [admin@VM_0_2_centos ~]$ sudo su [sudo] passwor ...

  5. Lintcode: Kth Largest Element 解题报告

    Kth Largest Element Find K-th largest element in an array. Note You can swap elements in the array E ...

  6. UnicodeDecodeError: 'ascii' codec can't decode byte 0xa3 in position 1: ordinal not in range(128)

    使用codecs模块 codecs模块能在处理字节流的时候提供很大帮助.你可以用定义的编码来打开文件并且你从文件里读取的内容会被自动转化为Unicode对象. 试试这个: >>> i ...

  7. ipconfig 命令有什么作用

    ipconfig /all:显示本机TCP/IP配置的详细信息:ipconfig /release:DHCP客户端手工释放IP地址:ipconfig /renew:DHCP客户端手工向服务器刷新请求: ...

  8. 通用后台管理系统(ExtJS 4.2 + Spring MVC 3.2 + Hibernate)

    通用后台管理系统(ExtJS 4.2 +Spring MVC 3.2 + Hibernate) 开发语言JAVA 成品成品 前端技术extjs 数据库mysql,sql server,oracle 系 ...

  9. Linux里提示cannot find -lsocket解决办法

    今天在我的Linux make时提示我找不到 -lsocket,我就去lib库里查了一下,根本没有这个东东,然后在网上看了好多都是说缺少这个库要安装,或是要改libsock.so,试了半天都没有用. ...

  10. opencv 中affine函数实现旋转和平移

    图像旋转和平移是图像处理中常用的一种操作,opencv2和opencv3中对图像的旋转和平移都是通过仿射变换函数cv::warpAffine()来实现的. 1.图像的旋转 图像的旋转具体实现分为两步: ...