1 前言

传统的强化学习算法会使用表格的形式存储状态值函数 V(s)或状态动作值函数 Q(s,a),但是这样的方法存在很大的局限性。【强化学习笔记:Q-learning_UQI-LIUWJ的博客-CSDN博客】

现实中的强化学习任务所面临的状态空间往往是连续的,存在无穷多个状态,在这种情况下,就不能再使用表格对值函数进行存储。

在 Q-learning 中,我们使用表格来存储每个状态 s 下采取动作 a 获得的奖励,即状态-动作值函数 Q(s,a)。然而,这种方法在状态量巨大甚至是连续的任务中,会遇到维度灾难问题,往往是不可行的。因此,DQN 采用了价值函数近似的表示方法。

为了在连续的状态和动作空间中计算值函数,我们可以用一个函数来表示近似计算,称为价值函数近似(Value Function Approximation)

其中

  • 分别是状态 s 和动作 a 的向量表示,
  • 函数通常是一个参数为 ϕ 的函数,比如神经网络,输出为一个实数,称为Q 网络(Q-network)
  • 模型中,也可以不使用Q(s,a),使用V(s)也可以

2  衡量价值函数

怎么衡量这个状态价值函数呢?有两种不同的做法:MC-based 的方法和 TD-based 的方法。

整体上和Q-learning 的类似

强化学习笔记:Q-learning_UQI-LIUWJ的博客-CSDN博客

强化学习笔记:Q-learning :temporal difference 方法_UQI-LIUWJ的博客-CSDN博客

2.1 MC

Monte-Carlo(MC)-based的方法就是去跟环境做互动,估计对于某一个策略,看到各个状态的时候的累计奖励。

但是实际上,我们不可能把所有的状态通通都扫过,但是没有关系。 是一个网络。对一个网络来说,就算输入状态是从来都没有看过的,它也可以想办法估测一个值。

怎么训练这个网络呢?因为如果在状态sa​,接下来的累积奖励就是Ga​(采样中episode出现sa的取平均)。也就是说,对这个价值函数来说,如果输入是状态 sa​,正确的输出应该是Ga​。如果输入状态 sb​,正确的输出应该是值Gb​。

        所以在训练的时候, 它就是一个 回归问题网络的输出就是一个值,你希望在输入sa​ 的时候,输出的值跟 Ga​ 越近越好,输入sb​ 的时候,输出的值跟Gb​ 越近越好。接下来把网络训练下去,就结束了。这是 MC-based 的方法。

2.2  TD(temporal difference 时序差分)

在 MC-based 的方法中,每次我们都要算累积奖励,也就是从某一个状态sa​ 一直玩到游戏结束的时候,得到的所有奖励的总和。

所以要使用 MC-based 的方法,你必须至少把这个游戏玩到结束。但有些游戏非常长,你要玩到游戏结束才能够更新网络,花的时间太长了,因此我们会采用 TD-based 的方法。

TD-based 的方法不需要把游戏玩到底,只要在游戏的某一个情况,某一个状态的时候,采取动作得到奖励,跳到状态,就可以使用 TD 的方法。

TD基于以下这个式子:

假设我们现在用的是某一个策略 π,在状态,它会采取动作,给我们奖励,接下来进入。状态的值跟状态的值,它们的中间差了一项。你把 得到的值加上得到的奖励就会等于得到的值。

有了这个式子以后,你在训练的时候,你并不是直接去估测 V,而是希望你得到的结果 V 可以满足这个式子。

也就是说我们会是这样训练的,我们把丢到网络里面,因为丢到网络里面会得到,把丢到你的值网络里面会得到,这个式子告诉我们, 减 的值应该是​。

然后希望它们两个相减的 loss 跟越接近,以这个作为目标函数训练下去,更新 V 的参数,你就可以把 V 函数学习出来。

3 MC和TD的区别

MC 最大的问题就是方差很大。因为我们在玩游戏的时候,它本身是有随机性的。所以你可以把 Ga​ 看成一个随机变量。因为你每次同样走到sa​ 的时候,最后你得到的路径episode是不一样的,因而得到的Ga也是不一样的。(每一次得到 Ga​ 的差别其实会很大)

如果用 TD 的话,你是要去最小化这样的一个式子:

在这中间会有随机性的是 r。因为计算你在 st​ 采取同一个动作,你得到的奖励也不一定是一样的,所以 r 是一个随机变量。[,同一个状态同一个action,有不同概率进图不同的后续状态]

但这个随机变量的方差会比 Ga​ 还要小,因为 Ga​ 是很多 r 合起来,这边只是某一个 r 而已。

但是这边你会遇到的一个问题是你这个 V 不一定估得准。假设你的这个 V 估得是不准的,那你使用这个式子学习出来的结果,其实也会是不准的。

所以 MC 跟 TD 各有优劣。今天 TD 的方法是比较常见的,MC 的方法是比较少用的。

4 举例说明MC和TD的区别

有一个策略π 跟环境互动了8 次,得到了8 次结果。

我们先计算 sb​ 的值。 状态 sb​ 在 8 场游戏里面都有经历过,其中有 6 场得到奖励 1,有 2 场得到奖励 0。所以如果你是要算期望值的话,就算看到状态sb​ 以后得到的奖励,一直到游戏结束的时候得到的累积奖励期望值是 3/4,计算过程如下式所示:

那Sa的奖励怎么计算呢?

假如用 MC 的话,你会发现这个sa​ 就出现一次,看到sa​ 这个状态,接下来累积奖励就是 0,所以 sa​ 期望奖励就是 0。

但 TD 在计算的时候,它要更新下面这个式子:

因为我们在状态 a​ 得到奖励 r=0 以后,跳到状态sb​。

所以状态 sa 的奖励会等于状态sb​ 的奖励加上在状态 sa​ 跳到状态 sb​ 的时候可能得到的奖励 r。

而这个得到的奖励 r 的值是 0,sb​ 期望奖励是 3/4,那 sa​ 的奖励应该是 3/4。

用 MC 跟 TD 估出来的结果很有可能是不一样的。也就是说,就算观察到一样的训练数据,它最后估出来的结果也不一定是一样的。为什么会这样呢?换句话说,哪一个结果比较对呢?其实就都对。

在第一个轨迹, sa​ 得到奖励 0 以后,再跳到 sb​ 也得到奖励 0。这边有两个可能:

  • 一个可能是: sa​ 是一个标志性的状态,只要看到 sa​ 以后,sb​ 就会拿不到奖励,sa​ 可能影响了sb​。如果是用 MC 的算法的话,它会把sa​ 影响 sb​ 这件事考虑进去。所以看到sa​ 以后,接下来 sb​ 就得不到奖励,所以s_a期望的奖励是 0。

  • 另一个可能是:看到 sa​ 以后,sb​ 的奖励是 0 这件事只是一个巧合,并不是 sa​ 所造成,而是因为说 sb​ 有时候就是会得到奖励 0,这只是单纯运气的问题。其实平常 sb​ 会得到奖励期望值是 3/4,跟 sa​ 是完全没有关系的。所以假设 sa​ 之后会跳到 s_bsb​,那其实得到的奖励按照 TD 来算应该是 3/4。所以s_a期望的奖励是 3/4。

所以不同的方法考虑了不同的假设,运算结果不同。

参考内容:  第六章 DQN (基本概念) (datawhalechina.github.io)

DQN笔记:MC TD相关推荐

  1. DQN 笔记 State-action Value Function(Q-function)

    1 State-action Value Function(Q-function) 1.1 和 状态价值函数的对比 在DQN笔记:MC & TD_UQI-LIUWJ的博客-CSDN博客 中,状 ...

  2. DQN 笔记 double DQN

    1 DQN的问题 在DQN 笔记 State-action Value Function(Q-function)_UQI-LIUWJ的博客-CSDN博客 中,我们知道DQN的学习目标是 但是,这个Q的 ...

  3. DQN笔记:高估问题 target network Double DQN

    Q 学习算法有一个缺陷:用 Q 学习训练出的 DQN 会高估真实的价值,而且高估通常是非均匀的. 这个缺陷导致 DQN 的表现很差. 高估问题并不是 DQN 本身的缺陷,而是训练 DQN 用的 Q 学 ...

  4. [RL] 深入理解Tabular Leaning (MC/TD) 过程中的梯度下降使用

    深入理解Tabular Leaning过程中的梯度下降使用: i.e. Tabular Leaning:TD/MC/DP 梯度下降: GD/SGD/Semi-GD 在强化学习中,众多Tabular算法 ...

  5. 强化学习 补充笔记(TD算法、Q学习算法、SARSA算法、多步TD目标、经验回放、高估问题、对决网络、噪声网络)

    学习目标: 深入了解马尔科夫决策过程(MDP),包含TD算法.Q学习算法.SARSA算法.多步TD目标.经验回放.高估问题.对决网络.噪声网络.基础部分见:强化学习 马尔科夫决策过程(价值迭代.策略迭 ...

  6. 《TD开发笔记》TD是个啥?一起了解一下

    免责声明:文中部分信息有参考到其他网站及牛人的资料,在引用到的地方会注明其来源,如有不宜之处可联系本人进行更正或者删除!学术看法及观点仅代表个人,仅供参考.知识共享,共同学习,来源于社会,回馈社会. ...

  7. 【开发笔记】td标签内容过长时解决办法

    开发模块功能中遇到了td内容长度过长导致布局窜位,把其他td的内容挤在一起的问题, 于是尝试了几种方式: 设置固定的td宽度,发现当内容超出td宽度范围内时还是会窜位,失败. 例:<td wid ...

  8. Python学习笔记 Mc喊麦DJ网 爬取下载

    # ***********************下面开始写代码******************************* 保存数据内容=[] def pzcx(n,lx):# 获取随机网址访问u ...

  9. 强化学习基础知识笔记[6] - DQN

    参考资料 [1] 深度强化学习系列 第一讲 DQN 本文主要是对该资料学习的笔记,并且加入了一些自己的想法,如有错误欢迎指出. DQN 算法引入 DQN算法在Q-Learning算法上改进而来,具体改 ...

最新文章

  1. MySQL下载以及安装【windows】
  2. cuda的shared momery
  3. 简直要逆天!超炫的 HTML5 粒子效果进度条
  4. mysql 建立索引更慢_如何运用“提前发布,经常发布”来建立更好的品牌
  5. TTS Service Extended (进程:com.google.tts)意外停止 恢复被阉割的TTS文字转语音功能
  6. Helm 3 完整教程(十八):Helm 流控制结构(2)with 语句
  7. ArcGis——资源三号卫星的DSM提取流程
  8. 【航空订票系统——开题报告 分享(仅供参考呀)】
  9. 《嵌入式-STM32开发指南》第三部分 外设篇 - 第5章 光敏传感器
  10. android httpclient 设置超时
  11. JZOJ5912 Van♂Usee
  12. 隔壁班的 女同学 觉得这本技术书还挺棒的
  13. 如何用tensorflow使用自定义数据来训练,做物体检测
  14. 如何加快计算机绘图的速度,在Auto CAD下如何能提高绘图速度
  15. jquerykindeditor文本编辑器插件
  16. 「独立思考」的背后是一个残酷的世界
  17. 从入门到不放弃:多浏览器的自动化测试(1)- 本地测试
  18. 以太网物理层IOP测试设备TESTBASE-EIOP
  19. 中标候选人不再排序!“最低价中标”退场!招标人自主确定中标人!
  20. [hackthebox]devzat

热门文章

  1. 二进制日志和数据更新的关系
  2. jQuery图片轮播(焦点图)插件(转载)
  3. 视频解码基础知识(二)
  4. ISO9000互联网管理办法
  5. VS.net下编写makefile文件--NMAKE用法
  6. TCP的拥塞控制(详解)
  7. WPA/WPA2安全认证加密原理详解
  8. 机器学习-逻辑回归-代价函数
  9. PAT甲级1008 Elevator:[C++题解]模拟
  10. 动态规划 dp03 最长公共子串问题 c代码