Q-Learning
一、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的更多相关文章
- 强化学习9-Deep Q Learning
之前讲到Sarsa和Q Learning都不太适合解决大规模问题,为什么呢? 因为传统的强化学习都有一张Q表,这张Q表记录了每个状态下,每个动作的q值,但是现实问题往往极其复杂,其状态非常多,甚至是连 ...
- 如何用简单例子讲解 Q - learning 的具体过程?
作者:牛阿链接:https://www.zhihu.com/question/26408259/answer/123230350来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- 强化学习_Deep Q Learning(DQN)_代码解析
Deep Q Learning 使用gym的CartPole作为环境,使用QDN解决离散动作空间的问题. 一.导入需要的包和定义超参数 import tensorflow as tf import n ...
- 增强学习(五)----- 时间差分学习(Q learning, Sarsa learning)
接下来我们回顾一下动态规划算法(DP)和蒙特卡罗方法(MC)的特点,对于动态规划算法有如下特性: 需要环境模型,即状态转移概率\(P_{sa}\) 状态值函数的估计是自举的(bootstrapping ...
- deep Q learning小笔记
1.loss 是什么 2. Q-Table的更新问题变成一个函数拟合问题,相近的状态得到相近的输出动作.如下式,通过更新参数 θθ 使Q函数逼近最优Q值 深度神经网络可以自动提取复杂特征,因此,面对高 ...
- 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 ...
- (转) Deep Learning Research Review Week 2: Reinforcement Learning
Deep Learning Research Review Week 2: Reinforcement Learning 转载自: https://adeshpande3.github.io/ad ...
- Top Deep Learning Projects in github
Top Deep Learning Projects A list of popular github projects related to deep learning (ranked by sta ...
- Open source packages on Deep Reinforcement Learning
智能车 self driving car + 强化学习 reinforcement learning + 神经网络 模拟 https://github.com/MorvanZhou/my_resear ...
- 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 ...
随机推荐
- 【Unity】6.5 Time类、Mathf类、Coroutine类
分类:Unity.C#.VS2015 创建日期:2016-04-20 一.Time类 Unity引擎提供的Time类可获取和时间有关的信息.计算帧速率.调整时间流逝速度等. 1.成员变量 2.示例 ( ...
- Android4.4r1(KitKat)源码下载地址
未经验证 http://blog.csdn.net/gaojinshan/article/details/14228737 百度云盘保存了大量android源码,没有经过验证,并不能保证能够正常编译, ...
- hibernate的flush()、refresh()、clear()针对一级缓存的操作的区别
首先session是有一级缓存的,目的是为了减少查询数据库的时间,提高效率,一级缓存的生命周期和session是一样的, session.flush()和session.clear()就针对sessi ...
- 菜鸟学SSH(七)——Spring jar包详解
Struts.Hibernate.Spring这类的框架给我们开发带来非常大的好处,让我们更加快速.有效的开发.所以我们在开发中通常都会用到各种框架,每个框架都有很多jar包,每个jar都有各自不同的 ...
- express中的路径区别
请求的url:http://localhost:3000/api/article/upload?q=1000&n=tom请求方法:postconsole.log('hostname==='+r ...
- .NET MVC+ EF+调用存储过程 多表联查以及VIEW列表显示
直接上干活,至于网上的一大堆处理方式不予评论,做好自己的就是最好的,供大家不走弯路 1.view页面 <link href="~/Content/bootstrap.css" ...
- text字段增加处理
--text字段增加处理 --创建测试表 ),detail text) insert into test ','A*B' --定义添加的的字符串 ),@postion int select @s_st ...
- 整理Lua和Unity和Lua交互文章链接
重点文章: 1.[Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(上) 2.[Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(中) 3.Lua和C++交互详细总结 4. ...
- iOS概念之KVO(Key-Value Observing)
在一个复杂的,有状态的系统中,当一个对象的状态发生改变,如何通知系统,并对状态改变做出相应的行为是必需考虑的一个问题,在iOS中为这类问题提供了4种解决方法: 1. NSNotifiactaion和N ...
- Sql server在另一台服务器,在Visual Studio 中没问题,IIS中 提示“在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。。。。”
可能问题一: 确切的说是在IIS 7.5中有这问题 就是在visual studio中都用的好好的,但是加载到IIS上的时候竟然报错“ 在与 SQL Server 建立连接时出现与网络相关的或特定于实 ...