上一篇笔记认识了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 就是下图这样的表格:

找到状态 \(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形式

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{{s_t},{a_t};w}{\partial w}\)

x. 参考教程

强化学习-学习笔记8 | Q-learning的更多相关文章

  1. 强化学习系列之:Deep Q Network (DQN)

    文章目录 [隐藏] 1. 强化学习和深度学习结合 2. Deep Q Network (DQN) 算法 3. 后续发展 3.1 Double DQN 3.2 Prioritized Replay 3. ...

  2. 强化学习读书笔记 - 06~07 - 时序差分学习(Temporal-Difference Learning)

    强化学习读书笔记 - 06~07 - 时序差分学习(Temporal-Difference Learning) 学习笔记: Reinforcement Learning: An Introductio ...

  3. 强化学习9-Deep Q Learning

    之前讲到Sarsa和Q Learning都不太适合解决大规模问题,为什么呢? 因为传统的强化学习都有一张Q表,这张Q表记录了每个状态下,每个动作的q值,但是现实问题往往极其复杂,其状态非常多,甚至是连 ...

  4. 强化学习_Deep Q Learning(DQN)_代码解析

    Deep Q Learning 使用gym的CartPole作为环境,使用QDN解决离散动作空间的问题. 一.导入需要的包和定义超参数 import tensorflow as tf import n ...

  5. 强化学习读书笔记 - 05 - 蒙特卡洛方法(Monte Carlo Methods)

    强化学习读书笔记 - 05 - 蒙特卡洛方法(Monte Carlo Methods) 学习笔记: Reinforcement Learning: An Introduction, Richard S ...

  6. 强化学习读书笔记 - 13 - 策略梯度方法(Policy Gradient Methods)

    强化学习读书笔记 - 13 - 策略梯度方法(Policy Gradient Methods) 学习笔记: Reinforcement Learning: An Introduction, Richa ...

  7. 强化学习读书笔记 - 12 - 资格痕迹(Eligibility Traces)

    强化学习读书笔记 - 12 - 资格痕迹(Eligibility Traces) 学习笔记: Reinforcement Learning: An Introduction, Richard S. S ...

  8. 强化学习读书笔记 - 10 - on-policy控制的近似方法

    强化学习读书笔记 - 10 - on-policy控制的近似方法 学习笔记: Reinforcement Learning: An Introduction, Richard S. Sutton an ...

  9. 强化学习读书笔记 - 09 - on-policy预测的近似方法

    强化学习读书笔记 - 09 - on-policy预测的近似方法 参照 Reinforcement Learning: An Introduction, Richard S. Sutton and A ...

  10. 强化学习读书笔记 - 02 - 多臂老O虎O机问题

    # 强化学习读书笔记 - 02 - 多臂老O虎O机问题 学习笔记: [Reinforcement Learning: An Introduction, Richard S. Sutton and An ...

随机推荐

  1. 【大话云原生】煮饺子与docker、kubernetes之间的关系

    云原生的概念最近非常火爆,企业落地云原生的愿望也越发强烈.看过很多关于云原生的文章,要么云山雾罩,要么曲高和寡. 所以笔者就有了写<大话云原生>系列文章的想法,期望用最通俗.简单的语言说明 ...

  2. HamsterBear F1C200s v5.17 Linux RTL8188EUS 适配

    HamsterBear F1C200s v5.17 Linux RTL8188EUS 适配 平台 - F1C200s Linux版本 - 5.17.2 Buildroot - v2022.2 底板做了 ...

  3. Python 函数进阶-迭代器

    迭代器 什么是迭代器 能被 next 指针调用,并不断返回下一个值的对象,叫做迭代器.表示为Iterator,迭代器是一个对象类型数据. 概念 迭代器指的是迭代取值的工具,迭代是一个重复的过程,每次重 ...

  4. 一文学会text-justify,orientation,combine文本属性

    大家好,我是半夏,一个刚刚开始写文的沙雕程序员.如果喜欢我的文章,可以关注 点赞 加我微信:frontendpicker,一起学习交流前端,成为更优秀的工程师-关注公众号:搞前端的半夏,了解更多前端知 ...

  5. python学习-Day6

    目录 学习内容详述 上期 '猜年龄'练习详解: while循环补充 while + else 死循环与while的嵌套 while嵌套 for循环 range关键字 range用法 什么是爬虫??? ...

  6. 【链表】【leetCode高频】: 19. 删除链表的倒数第 N 个结点

    1.题目描述 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. 2.算法分析 知识补充: . 分析: 题目要求是删除链表中倒数第N个结点.可以使用两个指针slow,fast. 重点是 ...

  7. 【mq】从零开始实现 mq-07-负载均衡 load balance

    前景回顾 [mq]从零开始实现 mq-01-生产者.消费者启动 [mq]从零开始实现 mq-02-如何实现生产者调用消费者? [mq]从零开始实现 mq-03-引入 broker 中间人 [mq]从零 ...

  8. 数据库、MySQL下载与安装、基本SQL语句

    数据演变史 # 1.单独的文本文件 没有固定的存放位置 没有固定的数据格式 '''程序彼此无法兼容 没有统一的标准''' # 2.软件开发目录规范 按照文件功能的不同规定了相应的位置 '''文件查找变 ...

  9. Yapi Docker 部署

    参考 https://github.com/Ryan-Miao/docker-yapi , 并使用该代码的脚本构建yapi image. 部署mongodb docker run \ --name m ...

  10. uniapp中利用uni.$emit()和uni.$on()进行页面和tabbar页面传值(页面通讯)

    tabbar页面 <script> export default { data() { return { list: [] , }; }, onLoad() { // 监听事件 uni.$ ...