强化学习(三)—— 时序差分法(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 ...
随机推荐
- MySQL技巧(二)——无限级分类表设计
无限级分类表的设计(掌握'自身连接') 类似图书这种,会有很多种分类,而且在现实生活中这种分类会无限的往下分,所以不可能每有一个分类就创建一个分类表.应该使用下面这种语句 DROP TABLE IF ...
- JS中replace替换全部的正确应用
一般使用 var str = "test-test-test"; str = "test-test-test".replace("test" ...
- 移动前端—H5实现图片先压缩再上传
在做移动端图片上传的时候,用户传的都是手机本地图片,而本地图片一般都相对比较大,拿iphone6来说,平时拍很多图片都是一两M的,如果直接这样上传,那图片就太大了,如果用户用的是移动流量,完全把图片上 ...
- smarty模板基础----缓存数据
缓存数据,这个并不是暂存的缓存,而是写入了内存的缓存 通过一个例子来书写:缓存数据 一.书写php和html页面的基本功能 既然是用smarty模板,那么前端和后端要分开写了 (1)php页面 1 2 ...
- mybatis的三种批量插入以及次效率比较
1.表结构 CREATE TABLE `t_user` ( `id` varchar(32) CHARACTER SET utf8 NOT NULL COMMENT '主键', `name` varc ...
- Elasticsearch Search APIs
Elasticsearch Search APIs By:授客 QQ:1033553122 1. 搜索 1 在单个索引的所有类型中搜索 1 在单个索引的指定类型中搜索 1 在多个指定的索引中搜索 1 ...
- Android--手势及触摸事件的注意点(一)
实现onInterceptTouchEvent方法可以用来拦截父ViewGroup传递下来的所有触屏事件,可以将所有触屏事件交由此ViewGroup自身的onTouchEvent来处理,也可以继续传递 ...
- (后端)Spring Boot自定义错误页面,Whitelabel Error Page处理方式(转)
我已经是Spring Framework框架的忠实粉丝.对于企业软件开发者来说它提供了对常见问题的通用解决方案,包括那些你在未来开发中没有意识到的问题.但是,它构建的J2EE项目变得比较臃肿,需要被一 ...
- HTML+JS+JQuery不可以使用status
可能是JQuery的内部定义了status的原因!在HTML中的元素如果声明了ID为status的话,脚本中是不能访问这个对象的,会成为一个字符串对象.
- SQL Server遗失管理权限账号密码怎么办?
假如一个SQL Server实例只允许"SQL身份认证"模式登录数据库,而糟糕的是你忘记了sa的密码(sa出于安全考虑应该被禁用,这里仅仅为了描述问题)或其它具有sysadmin角 ...