强化学习(二):Q learning 算法
强化学习(一):基础知识
强化学习(二):Q learning算法
Q learning 算法是一种value-based的强化学习算法,Q是quality的缩写,Q函数 Q(state,action)表示在状态state下执行动作action的quality, 也就是能获得的Q value是多少。算法的目标是最大化Q值,通过在状态state下所有可能的动作中选择最好的动作来达到最大化期望reward。
Q learning算法使用Q table来记录不同状态下不同动作的预估Q值。在探索环境之前,Q table会被随机初始化,当agent在环境中探索的时候,它会用贝尔曼方程(ballman equation)来迭代更新Q(s,a), 随着迭代次数的增多,agent会对环境越来越了解,Q 函数也能被拟合得越来越好,直到收敛或者到达设定的迭代结束次数。
以一个例子来介绍Q learning算法
游戏介绍
下图是一个迷宫游戏,agent小老鼠最开始在(0,0)位置,它想走到(1,2)的位置去获取一大堆奶酪,当它到达(1,2)位置的时候,它能得到10分,(1,1)位置是一个毒药,小老鼠走到这个位置会得-10分,其他有的位置放有数量不同的奶酪,根据奶酪的个数得到不同的正向分数,如+1和+2,(0,2)位置什么都没有,它的reward为0。当小老鼠达到一大堆奶酪或者毒药的位置时,游戏结束。小老鼠的可以选择的动作有4个,分别是向上,向下,向左,向右移动。
Q table
我们使用Q table来存储agent在不同state下选择不同动作可以获得的Q value。state是指老鼠所在的位置,action是老鼠在这个位置上所有能选择的动作。表的每一行表示一个state,每一列表示一个action。表中的值表示在这个state和action的最大期望未来reward。Q table最开始的时候会被初始化,比如初始化为0。如下图所示:
在这个游戏中,可以建立一个6*4的表,初始化的Q table如下图所示:
选择action
游戏开始后,我们根据Q table来选择action。
但是由于Q table都被初始化为0了,所有动作的值都是一样的,怎么进行动作选择了?
exploitation-exploration
这里会采用一个exploitation-exploration的方法,它用的-greedy 策略选择action。
exploitation :根据当前的信息,由训练的模型做出最佳的决策,即选择Q value最大的动作。
exploration:探索未知的领域,比如在某个state下随机选择一个action。
做exploitation和exploration的目的是获得一种长期收益最高的策略,这个过程可能对short-term reward有损失。如果exploitation太多,那么模型比较容易陷入局部最优,但是exploration太多,模型收敛速度太慢。这就是exploitation-exploration权衡。
比如我们设=0.9,随机化一个[0,1]的值,如果它小于,则进行exploration,随机选择动作;如果它大于,则进行exploitation,选择Q value最大的动作。
在训练过程中,在刚开始的时候会被设得比较大,让agent充分探索,然后逐步减少,agent会开始慢慢选择Q value最大的动作。如下图所示:
由于刚开始,比较大,agent随机选择一个action。假如在start位置时,agent选择了往右走的动作,到达small cheess位置,如下图所示:
Q value更新
agent从start位置执行一个right动作,走到small cheese位置,得到了一个实时奖励 + 1分,然后我们更新Q table里第一行第二列的值。
更新的方法是用贝尔曼方程(Bellman equation),下面是Q learning算法更新的方法:
是实时奖励,是指在下一个状态,选择使下一个状态达到最大的动作后得到的值。表示未来的长期奖励。
组成在下的实际Q 值,它由实时奖励和未来的长期奖励组成。
是在下的估计Q值,实际Q值和估计Q值的差值表示为。
是学习率,表示每次更新的幅度,是指在的基础上以差值和学习率的乘积的幅度进行变化。
当实际值和估计值的差值趋于0的时候,就不再继续变化,Q 表趋于稳定,说明得到了一个收敛的结果。
下面来看看state为start,action为right时的具体是怎么计算的,设,,
首先我们计算在(start,right)的位置上的。是指实际Q值减去估计Q值。即时奖励加上长期奖励组成实际Q值,是初始化的值。
在计算时,我们将1cheess状态下所有的状态的Q值计算出来,选择最大的。由于都是0,所以为0。然后将=1代入进去,得到=0.1。
我们将Q表上更新,如下图所示。
这时,agent到达了small cheese状态,用和上面同样的方法选择action,获得reward,然后更新。
agent在每一个step的时候都会用上面的方法迭代更新一次Q table,直到Q table不在更新或者到达游戏设置的结束局数。
Q learning算法流程
总结Q learning 算法的流程如下图,我们的最终目的就是得到一个训练得比较好的Q table,Q table里面的不同位置的值就是我们要训练的结果。当模型训练好了以后,agent会学会怎么去玩这个游戏,我们就可以应用此模型了。
当开始一局的新的游戏,agent会根据Q table去查找到到达目的地的最优路径。
Q learning算法的伪代码
如下:
Q learning算法的代码实现:
以下有两个Q learing算法的代码应用:
1.用Q learning 算法学会玩走迷宫游戏:https://github.com/MorvanZhou/Reinforcement-learning-with-tensorflow/tree/master/contents/2_Q_Learning_maze
2.https://github.com/simoninithomas/Deep_reinforcement_learning_Course/tree/master/Q%20learning/FrozenLake
参考:
1. Q learning介绍:https://www.freecodecamp.org/news/diving-deeper-into-reinforcement-learning-with-q-learning-c18d0db58efe/
2. Q leaning算法:https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/2-1-A-q-learning/
强化学习(二):Q learning 算法相关推荐
- RL之Q Learning:利用强化学习之Q Learning实现走迷宫—训练智能体走到迷宫(复杂迷宫)的宝藏位置
RL之Q Learning:利用强化学习之Q Learning实现走迷宫-训练智能体走到迷宫(复杂迷宫)的宝藏位置 目录 输出结果 设计思路 实现代码 测试记录全过程 输出结果 设计思路 实现代码 f ...
- RL之Q Learning:利用强化学习之Q Learning实现走迷宫—训练智能体走到迷宫(简单迷宫)的宝藏位置
RL之Q Learning:利用强化学习之Q Learning实现走迷宫-训练智能体走到迷宫(简单迷宫)的宝藏位置 目录 输出结果 设计思路 实现代码 测试记录全过程 输出结果 设计思路 实现代码 f ...
- mdp框架_强化学习中q learning和MDP的区别是什么?
MDP通常是指一种用转移概率描述连续不确定概率过程的数学框架,是强化学习中最基础的概念,很多强化学习的算法都是在把问题抽象为一个MDP之后再想办法求解的. 而q-learning是求解强化学习问题的算 ...
- Q学习(Q learning) 强化学习
Q学习(Q learning) 强化学习的简单例子 Matlab实现 可视化_Morty 的挖坑记录-CSDN博客 强化学习(MATLAB) - 叮叮当当sunny - 博客园
- 强化学习(RL)算法
目录 文章目录 前言 一.什么是强化学习? 二.强化学习的基本元素 1.环境Environment 2.主体Agent 3.状态State 4.行动Action 5.收益Reward 三,R ...
- 赠票 | 深度强化学习的理论、算法与应用专题探索班
文末有数据派赠票福利呦! 深度强化学习是人工智能领域的一个新的研究热点.它以一种通用的形式将深度学习的感知能力与强化学习的决策能力相结合,并能够通过端对端的学习方式实现从原始输入到输出的直接控制.自提 ...
- 自动驾驶前沿综述:基于深度强化学习的自动驾驶算法
©作者 | 陈道明 学校 | 布里斯托尔大学 研究方向 | 自动驾驶方向 这是 21 年的一篇综述文章,可以算得上是最前沿的自动驾驶技术综述.这几年随着深度表征学习的发展,强化学习领域也得到了加强.本 ...
- 线下报名 | YOCSEF TDS:深度强化学习的理论、算法与应用
时间:7月29日9:00-17:20 地点:北京中科院计算所,一层/四层报告厅(暂定) 报名方式:1.报名链接:http://conf2.ccf.org.cn/TDS 2.点击文末阅读原文报名 3 ...
- 强化学习之Q学习与SARSA
** Q学习路径规划与SARSA法路径规划 ** Q学习与SARSA学习简介 强化学习的历史可以用两条各自独立但丰富多彩的主线来追溯..一条主线聚焦 于研究最优化控制,以及使用价值函数动态规划等算法来 ...
最新文章
- 什么业务场景适合使用Redis?
- Genome Research | TransBorrow:通过借用不同拼接工具的拼接结果来引导完成转录组拼接
- Spring Boot 整合 Elasticsearch,实现 function score query 权重分查询
- 【Android 异步操作】Handler ( 主线程中的 Handler 与 Looper | Handler 原理简介 )
- 122. Leetcode 647. 回文子串 (动态规划-子序列问题)
- 用Go语言建立一个简单的区块链part5:地址
- 安全 - 堡垒机 - Jumpserver
- python什么是交换算法_python算法-015将链表元素两两交换元素(交换值、就地翻转)...
- mysql源代码安装
- nuxt.js 配置后端的请求地址
- rtthread pwm设备控制led小灯亮度
- Golang实践录:静态资源文件整合:web服务
- SQL Server中的T-SQL元数据功能的完整指南
- php 变量存活期,php 变量生命周期:PHP源码分析-PHP的生_php
- 激光雷达:Ouster OS产品介绍及使用方法
- matlab保存f黑白图片_MATLAB的矩阵运算与重构
- win 2008R2启用TLS 1.2 Windows 2008/2008R2手动启用TLS1_2协议教程
- C/C++函数调用约定(基于X86架构下)
- 罗技的鼠标驱动试用感受
- 思科路由器的密码重置