Q-learning是off-policy的,而Sarsa是on-policy的,但是它们的算法非常类似:


策略pi可以理解为和q相关,因此更新q就是更新pi

Sarsa更新的过程:

#mermaid-svg-yPX0cAOpHl1SV2hw {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-yPX0cAOpHl1SV2hw .error-icon{fill:#552222;}#mermaid-svg-yPX0cAOpHl1SV2hw .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-yPX0cAOpHl1SV2hw .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-yPX0cAOpHl1SV2hw .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-yPX0cAOpHl1SV2hw .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-yPX0cAOpHl1SV2hw .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-yPX0cAOpHl1SV2hw .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-yPX0cAOpHl1SV2hw .marker{fill:#333333;stroke:#333333;}#mermaid-svg-yPX0cAOpHl1SV2hw .marker.cross{stroke:#333333;}#mermaid-svg-yPX0cAOpHl1SV2hw svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-yPX0cAOpHl1SV2hw .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-yPX0cAOpHl1SV2hw .cluster-label text{fill:#333;}#mermaid-svg-yPX0cAOpHl1SV2hw .cluster-label span{color:#333;}#mermaid-svg-yPX0cAOpHl1SV2hw .label text,#mermaid-svg-yPX0cAOpHl1SV2hw span{fill:#333;color:#333;}#mermaid-svg-yPX0cAOpHl1SV2hw .node rect,#mermaid-svg-yPX0cAOpHl1SV2hw .node circle,#mermaid-svg-yPX0cAOpHl1SV2hw .node ellipse,#mermaid-svg-yPX0cAOpHl1SV2hw .node polygon,#mermaid-svg-yPX0cAOpHl1SV2hw .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-yPX0cAOpHl1SV2hw .node .label{text-align:center;}#mermaid-svg-yPX0cAOpHl1SV2hw .node.clickable{cursor:pointer;}#mermaid-svg-yPX0cAOpHl1SV2hw .arrowheadPath{fill:#333333;}#mermaid-svg-yPX0cAOpHl1SV2hw .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-yPX0cAOpHl1SV2hw .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-yPX0cAOpHl1SV2hw .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-yPX0cAOpHl1SV2hw .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-yPX0cAOpHl1SV2hw .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-yPX0cAOpHl1SV2hw .cluster text{fill:#333;}#mermaid-svg-yPX0cAOpHl1SV2hw .cluster span{color:#333;}#mermaid-svg-yPX0cAOpHl1SV2hw div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-yPX0cAOpHl1SV2hw :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

Q1
A1/S1
Q2
A3/S3
Q3
A4/S4
Q4
A5/S5
Q5
A2/S2

可以看出来,计算一个action value需要知道s,a,s’,a’四个数据,其中s,a是用来算reward,而s’,a’是用来估计下一个状态的state value。

比如A3/S3是在状态S3选择了A3,它作为下标用到了两次

  • Q(A3, S3)在计算S2的action value的时候估计S3的state value
  • 在计算S3的state value的时候,它又可以计算reward,即r(A3, S3)

下面是Q-learning更新的过程

#mermaid-svg-9uG1f83jBJtiFLrn {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-9uG1f83jBJtiFLrn .error-icon{fill:#552222;}#mermaid-svg-9uG1f83jBJtiFLrn .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-9uG1f83jBJtiFLrn .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-9uG1f83jBJtiFLrn .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-9uG1f83jBJtiFLrn .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-9uG1f83jBJtiFLrn .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-9uG1f83jBJtiFLrn .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-9uG1f83jBJtiFLrn .marker{fill:#333333;stroke:#333333;}#mermaid-svg-9uG1f83jBJtiFLrn .marker.cross{stroke:#333333;}#mermaid-svg-9uG1f83jBJtiFLrn svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-9uG1f83jBJtiFLrn .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-9uG1f83jBJtiFLrn .cluster-label text{fill:#333;}#mermaid-svg-9uG1f83jBJtiFLrn .cluster-label span{color:#333;}#mermaid-svg-9uG1f83jBJtiFLrn .label text,#mermaid-svg-9uG1f83jBJtiFLrn span{fill:#333;color:#333;}#mermaid-svg-9uG1f83jBJtiFLrn .node rect,#mermaid-svg-9uG1f83jBJtiFLrn .node circle,#mermaid-svg-9uG1f83jBJtiFLrn .node ellipse,#mermaid-svg-9uG1f83jBJtiFLrn .node polygon,#mermaid-svg-9uG1f83jBJtiFLrn .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-9uG1f83jBJtiFLrn .node .label{text-align:center;}#mermaid-svg-9uG1f83jBJtiFLrn .node.clickable{cursor:pointer;}#mermaid-svg-9uG1f83jBJtiFLrn .arrowheadPath{fill:#333333;}#mermaid-svg-9uG1f83jBJtiFLrn .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-9uG1f83jBJtiFLrn .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-9uG1f83jBJtiFLrn .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-9uG1f83jBJtiFLrn .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-9uG1f83jBJtiFLrn .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-9uG1f83jBJtiFLrn .cluster text{fill:#333;}#mermaid-svg-9uG1f83jBJtiFLrn .cluster span{color:#333;}#mermaid-svg-9uG1f83jBJtiFLrn div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-9uG1f83jBJtiFLrn :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

Qb
A1
Q1
A3
Q2
A5
Q3
Qc
A2
Qd
A4
Qe
A6

可以看出Q-learning没有强制要求一个s,a对使用两次,而是通过别的策略再次生成了一个s,a对。

有人说Q-learning在估计state value的时候使用了max action,因此默认是最优策略,但是实际上的策略不是最优的,因此是off-policy的。

我觉得说的不对,因为Sarsa使用的是下一个state的action value来估计state value,但是下一个action的选择也倾向于选择action value最大的,因此和Q-learning也就是determistic和stomastic的区别。

换句话说,难道Sarsa在选择策略的时候不选择action value最大的吗?

我觉得Sarsa和Q-learning最大的不同在于Sarsa在算reward的这个s,a必须是上一次估计state value获得的s,a,而Q-learning则是可以任意的选择一个s,a。

简单来说:

  • behavior policy就是如何选择一对s,a来估计reward
  • target policy就是如何选择一对s,a来估计state value
  • Sarsa要求behavior policy获得的s,a必须是上一次的target policy选择的s,a
  • Q-learning 不对behavior policy做要求,因此第一个s,a可以用任意的策略选择,但是估计state value的s,a必须是用target policy来确定。

这就是我认为它们的不同。也就是获取了一个采样s,a以后,用它来计算了reward。如果说该采样是前一次估计state value时候选择的,那么就是on-policy的,如果说不是,那么就是off-policy的。

另外Q-learning也有on-policy的版本,就是也强制让Qc, Qd都相同,也就是说本轮用来计算reward的s,a一定是上轮最优的那个s,a。因此最开始的图片其实两者都是on-policy的。



可以清晰的看出,用来计算r的s,a是不同的,一个是由pi t 生成的,一个是由当前策略生成的。而它们用来计算state value的s, a都是当前策略生成的。

强化学习中对on-policy和off-policy的理解相关推荐

  1. ADPRL - 近似动态规划和强化学习 - Note 8 - 近似策略迭代 (Approximate Policy Iteration)

    Note 8 近似策略迭代 Approximate Policy Iteration 近似策略迭代 Note 8 近似策略迭代 Approximate Policy Iteration 8.1 通用框 ...

  2. 强化学习中的脉冲神经网络

    简 介: 脉冲强化学习是最近兴起的将脉冲神经网络应用到强化学习中的一个研究领域.固然脉冲神经网络的引入会给强化学习带来一些新的东西,但目前的研究仍然仅仅满足于如何让算法收敛,而没有发挥出脉冲神经网络独 ...

  3. 最新综述 | 强化学习中从仿真器到现实环境的迁移

    ©PaperWeekly 原创 · 作者|李文浩 学校|华东师范大学博士生 研究方向|强化学习 最近 survey 了一下 sim2real 领域最近的相关工作,先整理个第一版(共有七篇论文)的总结. ...

  4. 《强化学习与最优控制》学习笔记(三):强化学习中值空间近似和策略空间近似概述

    写在前面的 前一章链接: <强化学习与最优控制>学习笔记(二):强化学习与最优控制的一些术语对比 这章主要是对应书中第二章前面的值空间近似和策略空间近似的简要介绍部分. 在本书的第一章就指 ...

  5. 强化学习中的基础概念和术语——spinning up文档翻译

    Key Concepts and Terminology 以下内容翻译自open ai 的spinning up文档,同时加入了一些自己的理解.原始内容来自spinningup 文章目录 Key Co ...

  6. 初探强化学习(10)强化学习中的一些术语(non-stationray,sample efficiency,planning和Learnin,Reward,off-policy和on-policy )

    1. 关于stationray 参考博客. Stationary or not 根据环境是否稳定.可以将强化学习问题分为stationary.non-stationary. 1.1 stationar ...

  7. 《强化学习周刊》第26期:UCL UC Berkeley发表深度强化学习中的泛化研究综述、JHU推出基于强化学习的人工决策模型...

    No.26 智源社区 强化学习组 强 化 学  习 研究 观点 资源 活动 关于周刊 强化学习作为人工智能领域研究热点之一,其研究进展与成果也引发了众多关注.为帮助研究与工程人员了解该领域的相关进展和 ...

  8. (深入理解)强化学习中Model-based和Model-free的区别是什么

    文章目录 RL的形式化 RL求解算法 model-based:知己知彼,百战百胜 Model-free:两耳不闻窗外事,一心只读圣贤书 总结 RL的形式化 首先我们定义强化学习中的马尔可夫决策过程MD ...

  9. labview叠加白噪声_强化学习中Ornstein-Uhlenbeck噪声是鸡肋吗?

    欢迎转载,转载请注明出处--知乎专栏"机器学习与控制论". 读过DDPG论文[1]的同学几乎都会有一个问题,论文中使用Ornstein-Uhlenbeck噪声用于探索,比较难理解, ...

  10. 八千字长文深度解读,迁移学习在强化学习中的应用及最新进展

    点击我爱计算机视觉标星,更快获取CVML新技术 本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载. 机器之心原创 作者:Luo Sainan 编辑:H4O 迁移学习通 ...

最新文章

  1. 受用一生的高效 PyCharm 使用技巧(四)
  2. Linux-NTP-Server+Client
  3. 批量正则替换某文件夹中代码(div id=XXXX替换为div id=XXXX)
  4. 针对大表 设计高效的存储过程【原理篇】 附最差性能sql语句进化过程客串
  5. CodeForces 1138B暴力+剪枝
  6. 如何使用repo sync
  7. C++20协程原理和应用
  8. codeforce #164 div2
  9. 第二章节 ASP.NET 验证控件(一)
  10. VPP教程 基本命令 记录
  11. iec61508最新2020_IEC61508标准
  12. 谱瑞PS8625替代方案|PS8622替代方案|高性价比EDP转LVDS转接板方案CS5211设计开发
  13. 网络流24题 最小路径覆盖(DCOJ8002)
  14. 房屋出租系统(第一版)
  15. Ubuntu 16G内存在android系统 10/11/12/13编译 framework时候经常oom内存不足,电脑卡死解决办法stubs-docs-non-updatable metalava
  16. MVC3中_ViewStart.cshtml的一些事
  17. 数据分析师-机器学习之线性回归
  18. android 摇杆控件实现RockerView
  19. c mysql项目案例_C语言项目案例分析 目录
  20. 【python】 pypinyin 拼音库

热门文章

  1. 智能车浅谈——17届极速越野篇
  2. winserver2008安装时出现 缺少所需的 CD/DVD驱动器设备驱动程序。如果您具有软盘....
  3. 服务器硬件的维护拆装
  4. XML for Analysis(XMLA)开发详解-(4)XMLA over TCP/IP访问Analysis Services 2005/2008 Olap的释疑
  5. QQ游戏的PKG格式文件解压工具
  6. 前端面试知识点整理——网络
  7. 关于浏览器和软件的去广告
  8. CISC和RISC是什么?它们的特点和区别?
  9. 前端架构访问瓶颈和入手方向
  10. 手把手教你在64位Win7下部署16位汇编学习环境