强化学习(三)—— 时序差分法(SARSA和Q-Learning)
1、时序差分法基本概念
虽然蒙特卡洛方法可以在不知道状态转移概率矩阵的前提下,灵活地求解强化学习问题,但是蒙特卡洛方法需要所有的采样序列都是完整的状态序列。如果我们没有完整的状态序列就无法用蒙特卡洛方法求解。此外蒙特卡洛方法的高方差依然存在。
时序差分法简称为TD法。TD法是一种结合蒙特卡洛法和动态规划法的方法。从算法的结构来看,TD法和蒙特卡洛法类似,都是“无模型学习” 的方法,也同样通过采样模拟交互序列的方法进行求解。
时序差分法和蒙特卡洛方法的区别主要有:
1)蒙特卡洛方法要等到最后结果才能学习,而时序差分法可以在任一阶段进行学习,具有更快速更灵活的更新状态进行估值。
2)时序差分法是基于即时奖励和下一状态的预估价值来替代当前状态在状态序列结束时可能得到的回报,是当前状态价值的有偏估计。而蒙特卡洛法则使用实际的收获来更新状态价值,是某一状态价值的无偏估计(注:其实这里的本质上是是否求期望的问题,蒙特卡洛通过采样多条序列来求期望,可以代替总体样本的无偏估计,但是因为序列的多样性导致方差较大,而时序差分法是直接预估下一状态的值来更新当前状态的值函数,这种预估本身就和真实值存在一定的偏差,但也因为只用到了下一状态的值,因此随机性较小,方差相对来说更小)。
3)时序差分法的方差较蒙特卡洛方法更小,且对初始值敏感,但比蒙特卡洛方法更高效。
时序差分法不止是有单步序列,还可以扩展到N步,当N足够大,甚至趋于无穷时,就等价于蒙特卡洛方法了。
时序差分法可以分为在线策略(on-policy,也可称为同策略)和 离线策略(off-policy,也可称为异策略)。目前在线策略最常见的算法是SARSA算法,离线策略最常见的是Q-Learning算法。
在线策略和离线策略主要的区别在于:
1)在线策略中当前状态下的动作选择和下一状态下的动作选择一般都是 $\epsilon - greedy$ 法(注:下一状态的动作选择决定了下一状态的Q值,而下一状态的Q值是TD目标中的一部分);
2)离线策略中当前状态的动作选择用$\epsilon - greedy$ 法,而下一状态的动作选择用贪婪法。
2、SARSA算法
SARSA算法从名字上看起来有些奇怪,实际上它是由五个关键因子组成的:
S:当前状态
A:当前行动
R:模拟得到的奖励
S:模拟进入的下一个状态
A:模拟中采取的下一个动作
SARSA算法中只涉及到上面五个变量。算法表达式如下:
$q(S,A) = q(S,A) + \alpha(R+\gamma q(S',A') - q(S,A))$
从上式中可以看到价值函数的更新之和当前奖励 $R$ 和下一状态的价值函数 $q(S',A')$ 有关。
SARSA算法的具体流程如下:
1)随机初始化所有的状态和动作对应的价值函数 $q$ ,对于终止状态的 $q$ 值初始化为0。
2)开始迭代,初始化 $S$ 为当前状态序列的第一个状态,设置 $A$ 为 $\epsilon$ - 贪婪法在当前状态 $S$ 选择的动作。
3)在状态 $S$ 下执行当前动作 $A$ ,得到新状态 $S'$ 和奖励 $R$。
4)用 $\epsilon$ - 贪婪法在状态 $S'$ 选择新的动作 $A'$。
5)更新价值函数 $q(S,A)$:
$q(S,A) = q(S,A) + \alpha {R+\gamma q(S',A') - q(S,A)}$
6)一直迭代直至所有的$q(S, A)$收敛,在这里步长 $\alpha$ 一般需要随着迭代的进行逐渐变小,这样才能保证动作价值函数收敛。
SARSA算法相比蒙特卡洛算法并不会更好,虽然方差降低了,但是偏差高。简单来说,SARSA算法和蒙特卡洛法代表了两个极端:一个为了追求极小的方差而使得偏差大;另一个为了缩小偏差而导致方差大。
3、Q-Learning算法
Q-Learning算法大体上和SARSA算法相同,唯一不同的就是在进行价值函数更新时,SARSA在状态 $S'$ 时采用 $\epsilon$ - 贪婪法选择 $ A'$ ,而Q-Learning 算法在状态 $S'$ 时直接采用常见的贪婪法选择 $A'$ ,也就是选择是的动作价值函数 $q(S',A') $最大的动作。
Q-Learning 算法的公式如下:
$q(S,A) = q(S,A) + \alpha(R+\gamma \max_a q(S',A') - q(S,A))$
Q-Learning 算法的具体流程如下:
1)随机初始化所有的状态和动作对应的价值函数 $q$ ,对于终止状态的 $q$ 值初始化为0。
2)开始迭代,初始化 $S$ 为当前状态序列的第一个状态,设置 $A$ 为 $\epsilon$ - 贪婪法在当前状态 $S$ 选择的动作。
3)在状态 $S$ 下执行当前动作 $A$ ,得到新状态 $S'$ 和奖励 $R$。
4)用 常见的贪婪法在状态 $S'$ 选择新的动作 $A'$。
5)更新价值函数 $q(S,A)$:
$q(S,A) = q(S,A) + \alpha(R+\gamma q(S',A') - q(S,A))$
6)当价值函数更新后,新的状态为 $S'$ ,之前基于常见的贪婪法选择的 $A'$ 要重新基于 $\epsilon$ - 贪婪法去选择(也就是说价值最大的动作只是在更新价值函数时使用,不会真正执行,最后真正执行的动作还是要基于 $\epsilon$ - 贪婪法)。
7)一直迭代直至所有的$q(S, A)$收敛,在这里步长 $\alpha$ 一般需要随着迭代的进行逐渐变小,这样才能保证动作价值函数收敛。
在时序差分的方法中,我们把TD目标看作是最优策略(TD目标是$R_t + \gamma V(S_{t+1})$,事实上随着策略的更新,TD目标一直是变化的)。Q-Learning直接学习的是最优策略,而SARSA在学习最优策略的同时还在做探索。这导致我们在学习最优策略的时候,如果用SARSA,为了保证收敛,需要制定一个策略,使$\epsilon$ - 贪婪法的超参数$\epsilon$ 在迭代的过程中逐渐变小。Q-Learning没有这个烦恼。
另外一个就是Q-Learning直接学习最优策略,但是最优策略会依赖于训练中产生的一系列数据,所以受样本数据的影响较大,因此受到训练数据方差的影响很大,甚至会影响Q函数的收敛。
在学习过程中,SARSA在收敛的过程中鼓励探索,这样学习过程会比较平滑,不至于过于激进,导致出现像Q-Learning可能遇到一些特殊的最优“陷阱”。
在实际应用中,如果我们是在模拟环境中训练强化学习模型,推荐使用Q-Learning,如果是在线生产环境中训练模型,则推荐使用SARSA。
对于Q-Learning和SARSA这样的时序差分算法,对于小型的强化学习问题是非常灵活有效的,但是在大数据时代,异常复杂的状态和可选动作,使Q-Learning和SARSA要维护的Q表(注:Q表实际上就是存储当前问题的状态空间和动作空间下的所有状态-动作对的值函数)异常的大,甚至远远超出内存,这限制了时序差分算法的应用场景。在深度学习兴起后,基于深度学习的强化学习开始占主导地位。
强化学习(三)—— 时序差分法(SARSA和Q-Learning)的更多相关文章
- 强化学习三:Dynamic Programming
1,Introduction 1.1 What is Dynamic Programming? Dynamic:某个问题是由序列化状态组成,状态step-by-step的改变,从而可以step-by- ...
- 强化学习(五)用时序差分法(TD)求解
在强化学习(四)用蒙特卡罗法(MC)求解中,我们讲到了使用蒙特卡罗法来求解强化学习问题的方法,虽然蒙特卡罗法很灵活,不需要环境的状态转化概率模型,但是它需要所有的采样序列都是经历完整的状态序列.如果我 ...
- 【转载】 强化学习(五)用时序差分法(TD)求解
原文地址: https://www.cnblogs.com/pinard/p/9529828.html ------------------------------------------------ ...
- 强化学习9-Deep Q Learning
之前讲到Sarsa和Q Learning都不太适合解决大规模问题,为什么呢? 因为传统的强化学习都有一张Q表,这张Q表记录了每个状态下,每个动作的q值,但是现实问题往往极其复杂,其状态非常多,甚至是连 ...
- Flink + 强化学习 搭建实时推荐系统
如今的推荐系统,对于实时性的要求越来越高,实时推荐的流程大致可以概括为这样: 推荐系统对于用户的请求产生推荐,用户对推荐结果作出反馈 (购买/点击/离开等等),推荐系统再根据用户反馈作出新的推荐.这个 ...
- 强化学习之 免模型学习(model-free based learning)
强化学习之 免模型学习(model-free based learning) ------ 蒙特卡罗强化学习 与 时序查分学习 ------ 部分节选自周志华老师的教材<机器学习> 由于现 ...
- 基于Keras的OpenAI-gym强化学习的车杆/FlappyBird游戏
强化学习 课程:Q-Learning强化学习(李宏毅).深度强化学习 强化学习是一种允许你创造能从环境中交互学习的AI Agent的机器学习算法,其通过试错来学习.如上图所示,大脑代表AI Agent ...
- 强化学习(Reinfment Learning) 简介
本文内容来自以下两个链接: https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/ https: ...
- DQN(Deep Q-learning)入门教程(一)之强化学习介绍
什么是强化学习? 强化学习(Reinforcement learning,简称RL)是和监督学习,非监督学习并列的第三种机器学习方法,如下图示: 首先让我们举一个小时候的例子: 你现在在家,有两个动作 ...
- 强化学习模型实现RL-Adventure
源代码:https://github.com/higgsfield/RL-Adventure 在Pytorch1.4.0上解决bug后的复现版本:https://github.com/lucifer2 ...
随机推荐
- 用Python实现Zabbix-API 监控
做运维的朋友应该知道,公司IDC机房经常有上架.下架.报修和报废的服务器.如果服务器数量很多的时候很容易造成监控遗漏. 大的互联网公司把监控系统和CMDB(资产管理系统|配置管理数据库系统 ...
- JavaScript中Map和ForEach的区别
译者按: 惯用Haskell的我更爱map. 原文: JavaScript — Map vs. ForEach - What’s the difference between Map and ForE ...
- 异常:Data = 由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值。
做项目的时候,将DataTable序列化成Json,通过ashx向前台返回数据的时候,前台总是获取不到数据,但是程序运行却没问题, 没抛出异常.一时找不到办法,减小输出的数据量,这时前台可以接收到页面 ...
- node+pm2+express+mysql+sequelize来搭建网站和写接口
前面的话:在这里已经提到了安装node的方法,node是自带npm的.我在技术中会用es6去编写,然后下面会分别介绍node.pm2.express.mysql.sequelize.有少部分是摘抄大佬 ...
- MyEclipse TestNG插件安装与配置
MyEclipse TestNG插件安装与配置 by:授客 QQ:1033553122 测试环境 jdk1.8.0_121 myeclipse-10.0-offline-installer-win ...
- Tomcat映射虚拟路径到指定磁盘(eclipse)
用WangEditor富文本编辑,上传图片的时候,本文主要记录一下Tomcat映射虚拟路径到指定磁盘,保存到指定路径中,且能实现页面预览. 在实现之前wangeditor的简单实用请参照博主小道仙的后 ...
- 深圳市共创力推出《以用户为中心的设计UCD方法与实战》课程!
以用户为中心的设计(UCD)方法与实战 课程特色 现在以市场为中心.科技为基础.体验为卖点的商业社会里,用户体验是赢得用户青睐的关键特性.苹果.google.腾讯等顶级企业的成功充分说明了这一点.如何 ...
- 搭建的flask项目,若修改项目中的文件,项目没有reload,除非重启主机,解决方法如下
1.博主本人前面有发过一篇博文如何搭建flask项目,可以去查看. 解决办法:加入一句 touch-reload=项目目录在uwsgi.ini 2.测试没问题
- Linux平台下RMAN异机恢复总结
下面总结.整理一下RMAN异机恢复这方面的知识点,这篇笔记在个人笔记里面躺了几年了,直到最近偶然被翻看到,遂整理.总结一下.如下所示,个人将整个RMAN异机恢复分为准备工作和操作步骤两大部分.当然,准 ...
- 谈谈装xp官方纯净系统屡次失败的深刻体会
有木有,小硬盘小内存的电脑竟然装不了五六百m大小的xp却能装win7之类的而感到痛失,如果去装win7电脑果断卡死, 用了最流行的制作u盘启动的软件都不行, 任何直接点击安装也不行,点不了安装的那个选 ...