强化学习-学习笔记8 | Q-learning

上一篇笔记认识了Sarsa,可以用来训练动作价值函数(Q_\pi);本篇来学习Q-Learning,这是另一种 TD 算法,用来学习 最优动作价值函数 Q-star,这就是之前价值学习中用来训练 DQN 的算法。

8. Q-learning

承接上一篇的疑惑,对比一下两个算法。

8.1 Sarsa VS Q-Learning

这两个都是 TD 算法,但是解决的问题不同。

Sarsa

  • Sarsa 训练动作价值函数(Q_\pi(s,a));
  • TD target:(y_t = r_t + \gamma \cdot {Q_\pi(s_{t+1},a_{t+1})})
  • 价值网络是(Q_\pi) 的函数近似,Actor-Critic 方法中,用 Sarsa 更新价值网络(Critic)

Q-Learning

  • Q-learning 是训练最优动作价值函数 (Q^*(s,a))
  • TD target :(y_t = r_t + \gamma \cdot {\mathop{max}\limits_{a}Q^*(s_{t+1},a_{t+1})}),对 Q 求最大化

    注意这里就是区别。

  • 用Q-learning 训练DQN

个人总结区别在于Sarsa动作是随机采样的,而Q-learning是取期望最大值

下面推导 Q-Learning 算法。

8.2 Derive TD target

注意Q-learning 和 Sarsa 的 TD target 有区别。

之前 Sarsa 证明了这个等式:(Q_\pi({s_t},{a_t})=\mathbb{E}[{R_t} + \gamma \cdot Q_\pi({S_{t+1}},{A_{t+1}})])

等式的意思是,(Q_\pi) 可以写成 奖励 以及 (Q_\pi) 对下一时刻做出的估计;
等式两端都有 Q,并且对于所有的 (\pi) 都成立。

所以把最优策略记作 (\pi^*),上述公式对其也成立,有:

(Q_{\pi^}({s_t},{a_t}) = \mathbb{E}[{R_t} + \gamma \cdot Q_{\pi^}({S_{t+1}},{A_{t+1}})])

通常把(Q_{\pi^}) 记作 (Q^),都可以表示最优动作价值函数,于是便得到:

(Q^({s_t},{a_t})=\mathbb{E}[{R_t} + \gamma \cdot Q^({S_{t+1}},{A_{t+1}})])

处理右侧 期望中的 (Q^*),将其写成最大化形式:

  • 因为(A_{t+1} = \mathop{argmax}\limits_{a} Q^({S_{t+1}},{a})) ,A一定是最大化 (Q^)的那个动作

    解释: 给定状态(S_{t+1}),Q* 会给所有动作打分,agent 会执行分值最高的动作。

  • 因此 (Q^({S_{t+1}},{A_{t+1}}) = \mathop{max}\limits_{a} Q^({S_{t+1}},{a})),(A_{t+1}) 是最优动作,可以最大化 (Q^*);
  • 带入期望得到:(Q^({s_t},{a_t})=\mathbb{E}[{R_t} + \gamma \cdot \mathop{max}\limits_{a} Q^*({S_{t+1}},{a})])

    左边是 t 时刻的预测,等于右边的期望,期望中有最大化;期望不好求,用蒙特卡洛近似。用 (r_t \ s_{t+1}) 代替 (R_t \ S_{t+1});

  • 做蒙特卡洛近似:(\approx {r_t} + \gamma \cdot \mathop{max}\limits_{a} Q^*({s_{t+1}},{a}))称为TD target (y_t)。

    此处 (y_t) 有一部分真实的观测,所以比左侧 Q-star 完全的猜测要靠谱,所以尽量要让左侧 Q-star 接近 (y_t)。

8.3 算法过程

a. 表格形式

  • 观测一个 transition(({s_t},{a_t},{r_t},{s_{t+1}}))
  • 用(s_{t+1} \ r_t) 计算 TD target:({r_t} + \gamma \cdot \mathop{max}\limits_{a} Q^*({s_{t+1}},{a}))
  • Q-star 就是下图这样的表格:

强化学习-学习笔记8 | Q-learning

找到状态 (s_{t+1}) 对应的 ,找出最大元素,就是 (Q^*) 关于 a 的最大值。

  • 计算 TD error:(\delta_t = Q^*({s_t},{a_t}) – y_t)
  • 更新(Q^({s_t},{a_t}) \leftarrow Q^({s_t},{a_t}) – \alpha \cdot \delta_t),更新((s_{t},a_t))位置,让Q-star 值更接近(y_t)

b. DQN形式

强化学习-学习笔记8 | Q-learning

DQN (Q^({s},{a};w))近似 $Q^({s},{a}) $,输入是当前状态 s,输出是对所有动作的打分;

接下来选择最大化价值的动作 ({a_t}= \mathop{argmax}\limits_{{a}} Q^({S_{t+1}},{a},w)),让 agent 执行 (a_t);用收集到的 _transitions*_ 学习训练参数 w,让DQN 的打分 q 更准确;

用 Q-learning 训练DQN的过程:

  • 观测一个transition (({s_t},{a_t},{r_t},{s_{t+1}}))
  • TD target:({r_t} + \gamma \cdot \mathop{max}\limits_{a} Q^*({s_{t+1}},{a};w))
  • TD error:(\delta_t = Q^*({s_t},{a_t};w) – y_t)
  • 梯度下降,更新参数:(w \leftarrow w -\alpha \cdot \delta_t \cdot \frac{\partial Q^*({s_t},{a_t};w)}{\partial w})

x. 参考教程

Original: https://www.cnblogs.com/Roboduster/p/16455054.html
Author: climerecho
Title: 强化学习-学习笔记8 | Q-learning

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/807387/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 一文搞懂ubuntu下colmap的使用方法

    本文介绍了基于ubuntu20.04下colmap的两种使用方法,新手向,如有不对请指教,因为colmap的安装编译网络上有很多教程,并且很容易操作,这里不再赘述。本博客的大部分内…

    Python 2023年9月26日
    052
  • 从创建conda环境再到安装mmcv及mmdet

    网上有很多,后期有需要再出吧。以前也踩了不少坑! 创建conda环境 conda create -n pytorch python=3.8移除conda环境 conda remov…

    Python 2023年9月8日
    028
  • 关系型数据库存储多维指标数据

    指标是一个统称概念,可以细分为 原子指标和 派生指标。 以 某企业近一周上海地域的销售金额 为例,整体是一个派生指标,其中的 销售金额 是原子指标; 近一周 是时间, 企业 和 地…

    Python 2023年10月22日
    033
  • Flask框架

    python web框架 同步框架: Django:大而全(3.x以后支持异步) flask:小而精,插件的支持 异步框架:Sanic、FastAPI flask介绍 Flask是…

    Python 2023年6月12日
    058
  • [漏洞复现] [Vulhub靶机] OpenSSL Heartbleed Vulnerability (CVE-2014-0160)

    免责声明:本文仅供学习研究,严禁从事非法活动,任何后果由使用者本人负责。 0x00 背景知识 传输层安全协议SSL 安全套接字协议SSL(Secure Sockets Layer)…

    Python 2023年6月12日
    097
  • python 单例

    python 单例 原创 海洋的渔夫2022-07-22 21:43:04博主文章分类:Python系列 ©著作权 文章标签 类属性 初始化 python 文章分类 Python …

    Python 2023年5月25日
    091
  • Linux下的 sniff-andthen-spoof程序编写

    Linux下的 sniff-andthen-spoof程序编写 一、任务描述 在本任务中,您将结合嗅探和欺骗技术来实现以下嗅探然后欺骗程序。你需要两台机器在同一个局域网。从机器A …

    Python 2023年6月3日
    074
  • python运算符、六大数据类型

    一、运算符 1,算数运算符 是完成基本的算术运算使用的符号,用来处理四则运算在python中 * 运算符还可以用于字符串,计算结果就是字符串重复指定次数的结果 print(&quo…

    Python 2023年9月23日
    074
  • HTML爱心网页制作[樱花+爱心]

    HTML+CSS+JavaScript实现 先点赞后观看,养成好习惯“不想动手的小伙伴可以直接拿网盘成品”阿里云盘——提取码: 0d…

    Python 2023年11月6日
    058
  • 使用 ChatGPT 启发游戏创意|基于 AI 5 天创建一个农场游戏,第 2 天

    欢迎使用 AI 进行游戏开发! 在本系列中,我们将使用各种 AI 工具,在 5 天内创建一个功能完备的农场游戏。到本系列结束时,你将了解到如何将多种 AI 工具整合到游戏开发流程中…

    Python 2023年11月4日
    030
  • 如何在 JupyterLab 中把 ipykernel 切换到不同的 conda 虚拟环境?

    内容简介:学习虚拟环境配置时,您可能见过在 JupyterLab (或 Jupyter Notebook) 中切换不同 kernel 的做法,看着就很酷哈哈。那么,这样做有什么作用…

    Python 2023年9月9日
    061
  • python flask面试题_Flask面试题

    什么是Flask,有什么优点? 轻量级web框架,默认依赖两个外部库:jinja2和Werkzeug WSGI工具 适用于做小型网站以及web服务的API 如何在Flask中访问会…

    Python 2023年8月14日
    055
  • pandas中dataframe部分操作总结

    文章目录 * – 基本操作 – + 1.构建dataframe + * (1)创建 + 2.对于大型的dataframe,head方法将只选出头部的五行;t…

    Python 2023年8月7日
    047
  • 案例——中国篮球运动员的基本信息分析

    案例——中国篮球运动员的基本信息分析 分析目标 1、计算中国男篮、女篮运动员的平均身高与平均体重2、分析中国篮球运动员的年龄分布3、计算中国篮球运动员的体质指数 数据获取 先导入可…

    Python 2023年8月7日
    0177
  • pygame实现找方块(色彩敏感度测试)游戏

    调皮的目录 前言 编程构思 * 游戏主要结构设想 pygame random 颜色设定 整体流程 待改进的地方 完整代码 游戏截图 前言 某人最近在手机上玩起了找方块游戏,给我发了…

    Python 2023年9月20日
    0104
  • 【华为机试真题详解】最大报酬【2022 Q4 | 100分】

    文章目录 前言 题目描述 输入描述 输出描述 示例 1 题目解析 参考代码 ; 前言 《华为机试真题详解 Python实现》专栏含牛客网华为专栏、华为面经试题、华为OD机试真题。如…

    Python 2023年9月30日
    049
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球