强化学习(三)—— 时序差分法(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 ...
随机推荐
- Java学习笔记之——this关键字、非静态成员属性和静态成员属性的区别、类的加载顺序
一.this关键字 1.代表当前类的对象 2.通过” . ”调用成员属性和成员方法 3.通过this可以区分成员属性和参数 参数名和属性名相同的情况,默认是参数名 二.非静态成员属性和静态成员属性的区 ...
- virtualbox中 清理磁盘
1. 碎片整理 windows: 下载 sdelete 工具 执行命令: sdelete –z c:\ Linux: 执行如下命令: sudo dd if=/dev/zero of=/EMPTY bs ...
- 开源前端脚本错误监控及跟踪解决项目-BadJS 试用
BadJS 是 一个web 前端脚本错误监控及跟踪项目.此项目为鹅厂 imweb(qq群:179045421) 团队的开源项目.此项目支持单机,集群,docker.存储支持mongodb等. 官网文档 ...
- git入门 创建版本库, 版本管理 分支 标签
参考: https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 GIT最流行的分布式版本 ...
- angularjs+webapi2 跨域Basic 认证授权(一)
如今的app,利用各种前端框架结合html5的混合开发模式已然盛极一时.其中ionic+angularjs更是如日中天.这种模式利用angularjs $http 请求数据api 以达到前后端分离深得 ...
- img图像标签和超链接标签a
图像标签语法:<img src="" alt="".../> img属性:src="" 显示图像的URLalt="& ...
- 6;XHTML 超链接
1.超链接的基本格式 2.超链接的种类 3.相对链接和绝对链接 4.书签的链接 5.基准参考点 6.超链接事件 7.为链接创建键盘快捷键 8.为链接设置制表符次序 超链接也叫 URL 中文翻译为资源定 ...
- for、for / in循环
1.for循环 循环代码块一定的次数 <!DOCTYPE html> <html lang="en" dir="ltr"> <he ...
- CSS单位【记录】
1.长度 2.角度 3.时间 4.分辨率 5.颜色 6.函数 7.生成内容 8.图像 9.数字 1.长度 <length>:数字和单位之间没有空格,0之后的长度单位是可选的 相对长度单位 ...
- 《JavaScript高级程序设计》笔记:引用类型(五)
Object类型 创建object实例方法有两种.第一种方法使用new操作符后跟object构造函数.如下: var person=new Object(); person.name="Ni ...