本文用于基本入门理解。

强化学习的基本理论 : 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 的理解的更多相关文章

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

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

  2. 【转载】 强化学习(十)Double DQN (DDQN)

    原文地址: https://www.cnblogs.com/pinard/p/9778063.html ------------------------------------------------ ...

  3. 强化学习(Reinforcement Learning)中的Q-Learning、DQN,面试看这篇就够了!

    1. 什么是强化学习 其他许多机器学习算法中学习器都是学得怎样做,而强化学习(Reinforcement Learning, RL)是在尝试的过程中学习到在特定的情境下选择哪种行动可以得到最大的回报. ...

  4. 强化学习(十)Double DQN (DDQN)

    在强化学习(九)Deep Q-Learning进阶之Nature DQN中,我们讨论了Nature DQN的算法流程,它通过使用两个相同的神经网络,以解决数据样本和网络训练之前的相关性.但是还是有其他 ...

  5. 强化学习(Reinfment Learning) 简介

    本文内容来自以下两个链接: https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/ https: ...

  6. 爬格子问题(经典强化学习问题) Sarsa 与 Q-Learning 的区别

    SARSA v.s. Q-learning 爬格子问题,是典型的经典强化学习问题. 动作是上下左右的走,每走一步就会有一个-1的奖赏.从初始状态走到最终的状态,要走最短的路才能使奖赏最大.图中有一个悬 ...

  7. 强化学习 reinforcement learning: An Introduction 第一章, tic-and-toc 代码示例 (结构重建版,注释版)

    强化学习入门最经典的数据估计就是那个大名鼎鼎的  reinforcement learning: An Introduction 了,  最近在看这本书,第一章中给出了一个例子用来说明什么是强化学习, ...

  8. Deep Learning专栏--强化学习之MDP、Bellman方程(1)

    本文主要介绍强化学习的一些基本概念:包括MDP.Bellman方程等, 并且讲述了如何从 MDP 过渡到 Reinforcement Learning. 1. 强化学习基本概念 这里还是放上David ...

  9. 强化学习(十一) Prioritized Replay DQN

    在强化学习(十)Double DQN (DDQN)中,我们讲到了DDQN使用两个Q网络,用当前Q网络计算最大Q值对应的动作,用目标Q网络计算这个最大动作对应的目标Q值,进而消除贪婪法带来的偏差.今天我 ...

随机推荐

  1. Bandit Wargame Level24 Writeup(brute-forcing with shell)

    Bandit Level 24 → Level 25 Level Goal A daemon is listening on port 30002 and will give you the pass ...

  2. spring cloud eureka高可用

    记录下自己踩的坑 spring cloud eureka的高可用网上的教程大致分为两种,一种是两两互相注册,一种是三个互相注册. 1.两两互相注册 普通服务的注册写法都是http://peer1/eu ...

  3. 50、html补充

    今天补充几个html标签 <body>内常用标签 1.<div>和<span> <div></div> : <div>只是一个块 ...

  4. Django的设计模式

    MVC模式 MVC将应用程序分解为三个组成部分:mode(模型).view(视图).control(控制器),其中: M 管理应用程序的状态(通常存储到数据库中),并榆树改变状态的行为(或者叫&quo ...

  5. Python3.5:装饰器的使用

    在Python里面函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数,简单来说函数也是变量也可以作文函数的参数 >>> def funA(): ... pr ...

  6. spring boot使用profile来区分正式环境配置文件与测试环境配置文件

    转载请在页首注明作者与出处 一:前言 经常在开发的时候,项目中的配置文件,在个人开发的时候有一套配置文件,在测试环境有一套配置文件,在正式环境有一套配置文件,这个时候如果配置文件复杂,需要改的东西就特 ...

  7. hibernate 3.6.10 maven pom.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  8. scala写算法-用小根堆解决topK

    topK问题是指从大量数据中获取最大(或最小)的k个数,比如从全校学生中寻找成绩最高的500名学生等等. 本问题可采用小根堆解决.思路是先把源数据中的前k个数放入堆中,然后构建堆,使其保持堆序(可以简 ...

  9. bzoj 3528: [Zjoi2014]星系调查

    Description 银河历59451年,在银河系有许许多多已被人类殖民的星系.如果想要在行 星系间往来,大家一般使用连接两个行星系的跳跃星门.  一个跳跃星门可以把 物质在它所连接的两个行星系中互 ...

  10. 如何在yarn上运行Hello World(二)

      在之前的一篇文章我们介绍了如何编写在yarn集群提交运行应用的AM的yarnClient端,现在我们来继续介绍如何编写在yarn集群控制应用app运行的核心模块 ApplicationMaster ...