【强化学习04】Q学习时序差分法

贝尔曼方程在强化学习中是用来更新Q值(动作价值)的一个重要工具。下面用小白能理解的方式解释贝尔曼方程是如何更新Q值的:

什么是Q值?

在强化学习中,Q值是用来评估在某个状态(state)下执行某个动作(action)所能获得的长期回报(reward)的一个数值。Q值越高,意味着在这个状态下执行这个动作越好。

贝尔曼方程的基本思想

贝尔曼方程的核心思想是当前的Q值等于当前的即时奖励加上未来所有可能状态的Q值的折现和。简单来说,就是你现在得到的奖励,加上未来可能得到的所有奖励的预期值。

贝尔曼方程公式

贝尔曼方程的具体形式如下:

Q ( s , a ) = r + γ max ⁡ a ′ Q ( s ′ , a ′ ) Q(s, a) = r + \gamma \max_{a'} Q(s', a') Q(s,a)=r+γmaxaQ(s,a)

其中:

  • Q ( s , a ) Q(s, a) Q(s,a)是在状态 s s s下执行动作 a a a的Q值。
  • r r r是执行动作 a a a后得到的即时奖励。
  • γ \gamma γ是折现因子,用来衡量未来奖励的重要性,取值范围是 0 到 1。
  • s ′ s' s是执行动作 a a a后转移到的下一个状态。
  • max ⁡ a ′ Q ( s ′ , a ′ ) \max_{a'} Q(s', a') maxaQ(s,a)表示在下一个状态 s ′ s' s中,选择使Q值最大的那个动作 a ′ a' a的Q值。

贝尔曼方程如何更新Q值?

在实际操作中,我们通过以下步骤来更新Q值:

  1. 初始化Q值:开始时,所有的Q值可以设为0,或者随机设定一个值。
  2. 观察当前状态和动作:在当前状态 s s s下,选择一个动作 a a a
  3. 执行动作,获得奖励和下一状态:执行动作 a a a后,观察得到的即时奖励 r r r和转移到的下一个状态 s ′ s' s
  4. 计算未来最优Q值:在状态 s ′ s' s下,找出所有可能动作中Q值最大的那个,记为 max ⁡ a ′ Q ( s ′ , a ′ ) \max_{a'} Q(s', a') maxaQ(s,a)
  5. 更新当前Q值:使用贝尔曼方程更新当前Q值:
    Q ( s , a ) ← r + γ max ⁡ a ′ Q ( s ′ , a ′ ) Q(s, a) \leftarrow r + \gamma \max_{a'} Q(s', a') Q(s,a)r+γamaxQ(s,a)

举个例子

假设你在一个迷宫游戏中,当前在位置 s s s,你决定向右走(动作 a a a),向右走之后你得到一个奖励 r r r,并且移动到了下一个位置 s ′ s' s。这个时候,你会观察在位置 s ′ s' s上所有可能的动作的Q值,找出最大的那个,然后用贝尔曼方程更新你在位置 s s s上向右走这个动作的Q值。

关键点总结

  • 即时奖励 r r r:你当前动作带来的直接收益。
  • 未来奖励的预期 γ max ⁡ a ′ Q ( s ′ , a ′ ) \gamma \max_{a'} Q(s', a') γmaxaQ(s,a):考虑到未来所有可能的状态和动作后的最大收益,但需要折现因子 γ \gamma γ来平衡现在和未来的收益。
  • Q值更新:通过即时奖励和未来奖励的结合,不断迭代更新Q值,使其逐步逼近真实的动作价值。

理解了贝尔曼方程是如何更新Q值的以后,进一步我们可以引入时序差分方法。

时序差分方法

时序差分是一种结合蒙特卡罗方法(利用完整的回报序列进行更新)和动态规划(利用当前估计值进行更新)的方法。它通过将当前估计的Q值和下一步的Q值进行比较来更新Q值。

TD(0) 更新公式

TD(0) 是时序差分方法中最基本的一种形式,其更新公式如下:

Q ( s , a ) ← Q ( s , a ) + α [ r + γ max ⁡ a ′ Q ( s ′ , a ′ ) − Q ( s , a ) ] Q(s, a) \leftarrow Q(s, a) + \alpha \left[ r + \gamma \max_{a'} Q(s', a') - Q(s, a) \right] Q(s,a)Q(s,a)+α[r+γmaxaQ(s,a)Q(s,a)]

其中:

  • Q ( s , a ) Q(s, a) Q(s,a)是在状态 s s s下执行动作 a a a的Q值。
  • r r r是执行动作 a a a后得到的即时奖励。
  • γ \gamma γ是折现因子。
  • s ′ s' s是执行动作 a a a后转移到的下一个状态。
  • max ⁡ a ′ Q ( s ′ , a ′ ) \max_{a'} Q(s', a') maxaQ(s,a)是在状态 s ′ s' s中所有可能动作中Q值最大的那个。
  • α \alpha α是学习率,用于控制Q值更新的步长。

时序差分更新的底层原理

时序差分更新的核心思想是通过当前的估计值和下一步的估计值之间的差异来调整Q值。这种差异被称为“TD误差”,计算公式为:

δ = r + γ max ⁡ a ′ Q ( s ′ , a ′ ) − Q ( s , a ) \delta = r + \gamma \max_{a'} Q(s', a') - Q(s, a) δ=r+γmaxaQ(s,a)Q(s,a)

更新公式则可以写成:

Q ( s , a ) ← Q ( s , a ) + α δ Q(s, a) \leftarrow Q(s, a) + \alpha \delta Q(s,a)Q(s,a)+αδ

具体步骤

  1. 初始化Q值:开始时,所有的Q值设为0或随机设定一个值。
  2. 选择动作:在当前状态 s s s下,根据某种策略(如 ε-greedy 策略)选择一个动作 a a a
  3. 执行动作:执行动作 a a a后,观察即时奖励 r r r和转移到的下一个状态 s ′ s' s
  4. 计算TD误差:计算 r + γ max ⁡ a ′ Q ( s ′ , a ′ ) r + \gamma \max_{a'} Q(s', a') r+γmaxaQ(s,a)与当前Q值 Q ( s , a ) Q(s, a) Q(s,a)之间的差异,即TD误差 δ \delta δ
  5. 更新Q值:用TD误差 δ \delta δ来更新Q值:
    Q ( s , a ) ← Q ( s , a ) + α δ Q(s, a) \leftarrow Q(s, a) + \alpha \delta Q(s,a)Q(s,a)+αδ

举个例子

假设你在一个迷宫游戏中,当前在位置 s s s,你决定向右走(动作 a a a),向右走之后你得到一个奖励 r r r,并且移动到了下一个位置 s ′ s' s。这个时候,你会观察在位置 s ′ s' s上所有可能的动作的Q值,找出最大的那个,计算出TD误差,然后用这个误差更新你在位置 s s s上向右走这个动作的Q值。

具体来说:

  1. 初始Q值:假设 Q ( s , a ) = 2 Q(s, a) = 2 Q(s,a)=2
  2. 即时奖励 r = 3 r = 3 r=3
  3. 未来Q值的最大值:假设在状态 s ′ s' s下最大Q值为 max ⁡ a ′ Q ( s ′ , a ′ ) = 5 \max_{a'} Q(s', a') = 5 maxaQ(s,a)=5
  4. 折现因子 γ = 0.9 \gamma = 0.9 γ=0.9
  5. 计算TD误差 δ = 3 + 0.9 × 5 − 2 = 3.5 \delta = 3 + 0.9 \times 5 - 2 = 3.5 δ=3+0.9×52=3.5
  6. 学习率 α = 0.1 \alpha = 0.1 α=0.1
  7. 更新Q值: Q ( s , a ) ← 2 + 0.1 × 3.5 = 2.35 Q(s, a) \leftarrow 2 + 0.1 \times 3.5 = 2.35 Q(s,a)2+0.1×3.5=2.35

关键点总结

  • TD误差:利用当前奖励和未来预期奖励之间的差异来调整当前Q值。
  • 逐步逼近真实值:通过反复更新,Q值逐步逼近真实的动作价值。
  • 实时更新:TD方法不需要等待一个完整的回报序列,可以在每一步进行更新,适合在线学习。

我们可以用学习骑自行车的过程来比喻为什么利用当前奖励和未来预期奖励之间的差异来调整当前Q值是能够奏效的。

比喻:学习骑自行车

假设你是一个小孩,正在学习如何骑自行车。为了学会骑自行车,你需要反复练习,不断调整自己的平衡和操控技巧。在这个过程中,你会经历许多次尝试和失败,每一次尝试都会给你提供一些反馈(奖励),告诉你是否做得正确。

当前奖励

当前奖励就像是你在骑自行车过程中立刻得到的反馈。例如,当你保持平衡并且没有摔倒时,你会感到高兴和满意,这就是一种正面的即时奖励。当你摔倒时,你可能会感到疼痛或失望,这就是一种负面的即时奖励。

未来预期奖励

未来预期奖励就像是你对于未来骑自行车成功的信心和期望。例如,当你在某一次尝试中保持了更长时间的平衡,你会预期自己未来能够更好地掌握这项技能,从而更加有信心。这种信心和期望就是一种未来预期奖励。

利用差异调整Q值

在学习骑自行车的过程中,你会不断根据当前的反馈和未来的预期来调整自己的行为:

  1. 当前反馈:如果你在某一次尝试中保持了很好的平衡,你会立即感到满意,这是你的当前奖励。
  2. 未来预期:你预期如果继续保持这种技巧,将来会更加熟练和稳定,这是你的未来预期奖励。
  3. 调整行为:你会根据当前的满意感(当前奖励)和未来的期望(未来预期奖励)之间的差异来调整自己的平衡和操控技巧。如果当前奖励和未来预期奖励之间的差异很大(例如,你预期将来会很成功,但目前还不太稳定),你会更加努力练习和平衡自己,直到两者趋于一致。

在这个过程中,你通过不断调整行为,使得当前的表现(即时反馈)和未来的期望(预期奖励)更加接近。最终,你会逐渐学会如何保持平衡,熟练地骑自行车。

关键点总结

  • 即时反馈(当前奖励):告诉你当前的尝试是否正确。
  • 未来预期(未来奖励):你对未来成功的信心和期望。
  • 差异调整:利用当前的反馈和未来的期望之间的差异,来不断调整自己的行为,逐步学会骑自行车。

在强化学习中,TD方法利用当前奖励和未来预期奖励之间的差异来调整Q值,就像你在学习骑自行车时利用即时反馈和未来期望之间的差异来调整行为一样。通过这种不断的调整和优化,Q值最终能够逼近真实的动作价值,使得你在各种状态下选择的动作越来越好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/843609.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

牛客题目进展

提示:文章 文章目录 前言一、背景二、 2.1 2.2 总结 前言 前期疑问: 本文目标: 一、背景 最近想整理一下牛课进度,顺便看了下表格绘制方法 绘制表格方法:绘制表格 二、 2.1 牛客序号题目知识点难度状态链接其…

【C++】牛客——活动安排

✨题目链接: AB31 活动安排 ✨题目描述 给定𝑛个活动,每个活动安排的时间为[𝑎𝑖,𝑏𝑖)。求最多可以选择多少个活动,满足选择的活动时间两两之间没有重合。 ✨输入描述: 第一行…

北交所的股票交易佣金最低是多少?万分之二算低的吗?

北交所的佣金目前最低是万分之二,不过只有少数证券公司是这个标准。普通股票佣金万1,融资利率是4.0%~5.0%! 北交所佣金一般是万分之6,北交所全称是北京证券交易所,是一家公司制交易所,北交所的佣金比普通股…

【JVM底层原理,JVM架构详解】

1. JVM简介 1.1 什么是JVM? JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 主流虚拟机: 虚拟机名称介绍HotSpotOracle/Sun JDK和OpenJDK都使用HotSPo…

人大金仓python驱动安装指引

最好使用虚拟环境,避免各种路径异常问题 在指定目录下创建虚拟环境 python3 -m venv myenv myenv可以是一个路径,当前命令会创建一个叫myenv的目录,目录里放的是虚拟环境所需的可执行文件 激活虚拟环境 source myenv/bin/activate 退出虚…

2024-05-28 服务器开发-不同vs版本的std::string的访问出错问题-记录

摘要: 有一个dll库是使用vs2010编译的, 使用这个dll动态库的工程是vs2019. 这个dll动态库返回一个结构体,其中有个成员使用了std::string。但是遇到了std::string的成员显示被赋值为NULL的情况。 本文对进行分析, 重点在于追踪问题的思路。 问题描述: dll使用vs20…

保护“第二生命线”,科技守护颈椎健康

脊柱支撑着人体重量,汇集着众多血管神经,素有“人体第二生命线”之称。在如今快节奏的时代,人们生活方式也在发生着变化,长期低头看手机、伏案久坐等不良生活习惯引发脊柱健康问题,且呈现年轻化趋势。目前,…

vue小记——上传图片小组件

个人笔记 前端&#xff1a; <template><el-uploadclass"avatar-uploader"name"image"action"http://127.0.0.1:3000/api/image/upload":show-file-list"false":headers"headerObj":data"DataForm":on-s…

【加密与解密(第四版)】第十二章笔记

第十二章 注入技术 12.1 DLL注入方法 在通常情况下&#xff0c;程序加载 DLL的时机主要有以下3个&#xff1a;一是在进程创建阶段加载输入表中的DLL&#xff0c;即俗称的“静态输人”;二是通过调用 LoadLibrary(Ex)主动加载&#xff0c;称为“动态加载”&#xff1b;三是由于系…

核心三:正确的停止线程

3、核心三&#xff1a;正确的停止线程 3.1 如何正确的停止线程 3.1.1 原理介绍&#xff1a;使用interrupt来通知&#xff0c;而不是强制 线程中断的机制&#xff1a;一个线程来通知要中断线程&#xff08;你好&#xff0c;你现在应该停止了&#xff09;最后的决定是由要中断…

第十四届蓝桥杯c++研究生组

A 关键思路是求每个十进制数的数字以及怎么在一个数组中让判断所有的数字次数相等。 求每个十进制的数字 while(n!0){int x n%10;//x获取了n的每一个位数字n/10;}扩展&#xff1a;求二进制的每位数字 &#xff08;注意&#xff1a;进制转换、1的个数、位运算&#xff09; x…

主干网络篇 | YOLOv8更换主干网络之MobileNeXt | 新一代移动端模型MobileNeXt来了!

前言:Hello大家好,我是小哥谈。MobileNeXt是由微软研究院提出的一种高效的卷积神经网络结构,它在保持模型轻量级的同时,能够获得较高的性能。MobileNeXt采用了一种称为Inverted Residuals with Linear Bottlenecks(IRL)的结构,通过深度可分离卷积和快捷连接来减少模型的…

[Android]将私钥(.pk8)和公钥证书(.pem/.crt)合并成一个PKCS#12格式的密钥库文件

如下&#xff0c;我们有一个platform.pk8和platform.x509.pem。为了打包&#xff0c;需要将私钥&#xff08;.pk8&#xff09;和公钥证书&#xff08;可能是.pem或.crt文件&#xff09;合并成一个PKCS#12 格式的密钥库文件 1.准备你的私钥和证书文件 确保你有以下两个文件&…

设计模型-系统架构师(三)

1、按照《中华人民共和国著作权法》的权利保护期&#xff0c;署名权和修改权 是永久保护的。 发表权、使用权和获取报酬权 保护期限 作者终生和死后的50年。 2、&#xff08;重要&#xff09;面向对象的分析模型主要由 顶层架构图、用例与用例图和&#xff08;&#xff09;构成…

Python面试宝典:Python中与多进程编程相关的面试笔试题(1000加面试笔试题助你轻松捕获大厂Offer)

Python面试宝典:1000加python面试题助你轻松捕获大厂Offer【第二部分:Python高级特性:第十三章:并发编程:第二节:多进程编程】 第十三章:并发编程第一节:多进程编程python中的多进程python中多线程和多进程有那些区别和联系区别1. 全局解释器锁(GIL)2. 内存共享3. 创…

2024年物理化学与工程技术发展国际会议(ICPCETD 2024)

全称&#xff1a;2024年物理化学与工程技术发展国际会议&#xff08;ICPCETD 2024&#xff09; 会议网址:http://www.icpcetd.com 会议时间: 2024.06.30 截稿时间&#xff1a;2024.06.21 会议地点: 上海 投稿邮箱&#xff1a;icpcetd_info163.com 投稿标题&#xff1a;ArticleT…

前端开发框架Angular

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Angular概述 Angular是由Google开发并维护的一款开源前端开发框架。它最初被设计为用于构建单页面应用&#xff08;SPA&#xff09;&#xff0c;但随着版本的更新和发展&am…

【大数据篇】Spark:大数据处理的璀璨之星

【大数据篇】Spark&#xff1a;大数据处理的璀璨之星 文章目录 【大数据篇】Spark&#xff1a;大数据处理的璀璨之星一、什么是Spark?二、Scala的入门学习使用2.1 为什么要学习Scala?2.2 Scala基础语法 三、Spark 安装与环境配置四、Spark的核心组件五、Spark的优势六、spark…

刚接触抖店并开通了个体店,怎么快速起店呢?运营思路参考如下

我是王路飞。 如果你刚接触抖店&#xff0c;并且开通了个体店&#xff0c;但不知道如何做店的话。 其实很简单&#xff0c;抖店的流程并没有这么复杂。 电商的核心无非就是产品&#xff0c;抖店的运营也都是围绕产品展开的。 我给你们说下抖店的运营思路你们可以作为参考&a…

【Real】[Flask]SSTI

文章目录 前言一、题目解读二、解题过程三、知识点Flask是什么SSTI是什么SSTI是如何形成的易于利用的类payload是什么 探索类型和类层次结构和方法 前言 温馨提示&#xff1a;看到哪里不懂直接跳到知识点部分&#xff0c;理解完再回到解题过程。 一、题目解读 题目是[Flask]S…