强化学习 - Q-learning Sarsa 和 DQN 的理解
本文用于基本入门理解。
强化学习的基本理论 : R, S, A 这些就不说了。
先设想两个场景:
一。 1个 5x5 的 格子图, 里面有一个目标点, 2个死亡点
二。 一个迷宫, 一个出发点, 3处 分叉点, 5个死角, 1条活路
Q-learning 的概念 其实就是一个算法, 数学的,或者软件程序的算法而已。
对于这种 死的(固定的游戏), 我个人觉得其实就是个穷举算法而已。
Q-learning 步骤:
场景一:
假设前提:
成功的路 A1, A2, ..... An , A-succ
失败的路 A1, B2, ..... Bn , A-Fail
失败的路 A1, C3, ..... Cn , B-Fail
最后成功后, 给个好处 R = 1, 失败,给个R = -1
1. 先随机走, 走出三条路来, A1 -- > A-succ , A1 -- > A-Fail, A1 -- > B-Fail
2. 走对的路, 最后一个点 An = 1, Bn = -1, Cn = -1 ; 实际上是 x 参数(0.90 自定义)
3. 接下,继续走, 走出 An-1 Bn-1,
3. 接下,继续走, 走出 An-2 Bn-2,
3. 接下,继续走, 走出 An-3 Bn-3,
3. 接下,继续走, 走出 An-4 Bn-4,
4.最后回到 A1, 发现, A1, 向上走 是 0.99, 向右走势 0.10, 向下走势 - 0.50
这样就得到了一个完整的表格, 叫 Q-table, 占在哪个位置,往哪个方向走。 更容达到目标。
总结: Q-learning 其实是个很 low 的算法, 用谚语说就是:一回生,二回熟。
场景二其实是一样的问题:
拐角处才有选择, 非拐角处过滤掉。
个人觉得,用Q-learning 做迷宫, 还不如用 右手法则走迷宫; 反正电脑是傻的, 能达到目标就好。
更新公式:
q_target = r + self.gamma * self.q_table.ix[s_, :].max()
self.q_table.ix[s, a] += self.lr * (q_target - q_predict)
Sarsa 与Q-learning 的区别仅仅在于, 更新Q-table 表里的某一项的时候, 是先走, 还是先计算更新而已。 没有大的区别。
再说 DQN :
DQN 在原先的Q-learning 上做了几个处理:
1. 在选择Action 的时候, 不是用 values.max; 而是用 predict().max
2. 在更新的时候, 不是更新 Q-learning 里的值, 而是通过训练 定量的数据minbatch , 来更新网络的 weights 。
更新了 weights , 其实就是变相更新 values.max 的计算方式; 也就确定了 Action 的选择。
个人总结:
对于走宫格这类问题, 强化的概念反应在, 随机走路后, 成功的路多走走。 逐步稳定固化。
迷宫 虽小, 可以用程序暴力解决(穷举), 但是里面包含的思维方式,值得重视。 这样可以拓展
到规模很大的计算上来, 可以加速成效。 但是用一维 4 dim 的(小数据)数据,去训练神经网络
感觉是大炮打蚊子。
强化学习 - Q-learning Sarsa 和 DQN 的理解的更多相关文章
- 增强学习(五)----- 时间差分学习(Q learning, Sarsa learning)
接下来我们回顾一下动态规划算法(DP)和蒙特卡罗方法(MC)的特点,对于动态规划算法有如下特性: 需要环境模型,即状态转移概率\(P_{sa}\) 状态值函数的估计是自举的(bootstrapping ...
- 【转载】 强化学习(十)Double DQN (DDQN)
原文地址: https://www.cnblogs.com/pinard/p/9778063.html ------------------------------------------------ ...
- 强化学习(Reinforcement Learning)中的Q-Learning、DQN,面试看这篇就够了!
1. 什么是强化学习 其他许多机器学习算法中学习器都是学得怎样做,而强化学习(Reinforcement Learning, RL)是在尝试的过程中学习到在特定的情境下选择哪种行动可以得到最大的回报. ...
- 强化学习(十)Double DQN (DDQN)
在强化学习(九)Deep Q-Learning进阶之Nature DQN中,我们讨论了Nature DQN的算法流程,它通过使用两个相同的神经网络,以解决数据样本和网络训练之前的相关性.但是还是有其他 ...
- 强化学习(Reinfment Learning) 简介
本文内容来自以下两个链接: https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/ https: ...
- 爬格子问题(经典强化学习问题) Sarsa 与 Q-Learning 的区别
SARSA v.s. Q-learning 爬格子问题,是典型的经典强化学习问题. 动作是上下左右的走,每走一步就会有一个-1的奖赏.从初始状态走到最终的状态,要走最短的路才能使奖赏最大.图中有一个悬 ...
- 强化学习 reinforcement learning: An Introduction 第一章, tic-and-toc 代码示例 (结构重建版,注释版)
强化学习入门最经典的数据估计就是那个大名鼎鼎的 reinforcement learning: An Introduction 了, 最近在看这本书,第一章中给出了一个例子用来说明什么是强化学习, ...
- Deep Learning专栏--强化学习之MDP、Bellman方程(1)
本文主要介绍强化学习的一些基本概念:包括MDP.Bellman方程等, 并且讲述了如何从 MDP 过渡到 Reinforcement Learning. 1. 强化学习基本概念 这里还是放上David ...
- 强化学习(十一) Prioritized Replay DQN
在强化学习(十)Double DQN (DDQN)中,我们讲到了DDQN使用两个Q网络,用当前Q网络计算最大Q值对应的动作,用目标Q网络计算这个最大动作对应的目标Q值,进而消除贪婪法带来的偏差.今天我 ...
随机推荐
- WCF实现长连接
由于WCF的机制,连接池会在连接建立一定时间后超时,即使设置了超时时间非常长,也可能被服务端系统主动回收.之前做项目时碰到了这个问题,所以项目上考虑采用长连接,自动管理连接池,当连接超时后,自动重建, ...
- C# 委托与事件详解(三)
今天我接着上面的3篇文章来讲一下,为什么我们在日常的编程活动中遇到这么多sender,EventArgs e 参数:protected void Page_Load(object sender, Ev ...
- 深度优先搜索(DFS)——部分和问题
对于深度优先搜索,这里有篇写的不错的博客:DFS算法介绍 .总得来说是从某个状态开始,不断的转移状态知道无法转移,然后回到前一步的状态.如此不断的重复一直到找到最终的解.根据这个特点,常常会用到递归. ...
- Java面试题汇总
第一阶段:三年我认为三年对于程序员来说是第一个门槛,这个阶段将会淘汰掉一批不适合写代码的人.这一阶段,我们走出校园,迈入社会,成为一名程序员,正式从书本 上的内容迈向真正的企业级开发.我们知道如何团队 ...
- Xamarin android CardView的使用详解
android 5.0新增加的一个控件CardView,在support v7兼容包中,意思就是卡片View,虽然可以设置阴影,圆角等等样式,但是我们也可以自己写出来,谷歌工程师之所以出这个,肯定是帮 ...
- 聚簇(或者叫做聚集,cluster)索引和非聚簇索引
字典的拼音目录就是聚簇(cluster)索引,笔画目录就是非聚簇索引.这样查询“G到M的汉字”就非常快,而查询“6划到8划的字”则慢. 聚簇索引是一种特殊索引,它使数据按照索引的排序顺序存放表中.聚簇 ...
- centos 系统日志
Linux系统日志主要有三类:连接时间日志.进程统计日志和错误日志 连接时间日志 连接时间日志由多个程序执行,把记录写入到/var/og/wtmp和/var/run/utmp.ogin等程序更新wtm ...
- 5、员工上班时间的问题 - CEO之公司管理经验谈
员工上班时间一般是根据公司的规章制度来制定的.当然,在不同的地点也有不同的做法.比如北京.上海.广州.深圳这些重点的大点的城市,加班的时间就相对比较多一些.但是按照笔者的想法,一般是一天7-8小时工作 ...
- 鸟哥的linux私房菜学习-(四)linux命令的基本概念
一.命令格式及使用方式 注意到上面的说明当中,『第一个被输入的数据绝对是命令或者是可运行的文件』! 这个是很重要的概念喔!还有,按下[Enter]键表示要开始运行此一命令的意思. 如下效果一样: 二. ...
- Android应用程序启动时发生AndroidRuntime : ClassNotFoundException for Activity class的解决方法
在android应用程序启动时抛出下面异常导致启动失败:07-09 17:12:35.709: ERROR/AndroidRuntime(3866): Uncaught handler: thread ...