Pytorch深度强化学习1-6:详解时序差分强化学习(SARSA、Q-Learning算法)

目录

  • 0 专栏介绍
  • 1 时序差分强化学习
  • 2 策略评估原理
  • 3 策略改进原理
    • 3.1 SARSA算法
    • 3.2 Q-Learning算法

0 专栏介绍

本专栏重点介绍强化学习技术的数学原理,并且采用Pytorch框架对常见的强化学习算法、案例进行实现,帮助读者理解并快速上手开发。同时,辅以各种机器学习、数据处理技术,扩充人工智能的底层知识。

🚀详情:《Pytorch深度强化学习》


1 时序差分强化学习

在这里插入图片描述

在Pytorch深度强化学习1-5:详解蒙特卡洛强化学习原理中我们指出,在现实的强化学习任务中,转移概率、奖赏函数甚至环境中存在哪些状态往往很难得知,因此有模型强化学习在实际应用中不可行,而需要免模型学习技术,即假设转移概率和环境状态未知,奖赏也仅是根据经验或需求设计。蒙特卡洛强化学习正是免模型学习中的一种,其核心思想是使用蒙特卡洛方法来估计各个状态-动作对的值函数。通过对大量的样本进行采样,并根据它们的累积奖励来评估状态-动作对的价值,智能体可以逐步学习到最优策略。

本节介绍的时序差分强化学习(Temporal Difference Reinforcement Learning)则是另一类免模型学习算法,它结合了动态规划和蒙特卡洛强化学习的优点,用于在未知环境中进行决策。

2 策略评估原理

策略评估本质上是求解状态值函数 V π ( s ) V^{\pi}\left( s \right) Vπ(s)或状态-动作值函数 Q π ( s , a ) Q^{\pi}\left( s,a \right) Qπ(s,a),数值越大表明策略回报越高。从定义出发,蒙特卡洛强化学习核心是采样近似,基于采样的算法通常采用增量更新方式节省内存

Q π ( s , a ) = E [ R t ] ∣ s t = s , a t = a ≈ 1 n ∑ i = 1 n R t , i = n 次增量 Q π ( s , a ) × c o u n t ( s , a ) + R t c o u n t ( s , a ) + 1 = n 次增量 Q π ( s , a ) + 1 c o u n t ( s , a ) + 1 ( R t − Q π ( s , a ) ) \begin{aligned}Q^{\pi}\left( s,a \right) &=\mathbb{E} \left[ R_t \right] \mid_{s_t=s,a_t=a}^{}\\&\approx \frac{1}{n}\sum_{i=1}^n{R_{t,i}}\\&\xlongequal{n\text{次增量}}\frac{Q^{\pi}\left( s,a \right) \times \mathrm{count}\left( s,a \right) +R_t}{\mathrm{count}\left( s,a \right) +1}\\&\xlongequal{n\text{次增量}}Q^{\pi}\left( s,a \right) +\frac{1}{\mathrm{count}\left( s,a \right) +1}\left( R_t-Q^{\pi}\left( s,a \right) \right)\end{aligned} Qπ(s,a)=E[Rt]st=s,at=an1i=1nRt,in次增量 count(s,a)+1Qπ(s,a)×count(s,a)+Rtn次增量 Qπ(s,a)+count(s,a)+11(RtQπ(s,a))

因为采样过程通常以万次计,因此可以用一个较小的正数 α \alpha α来描述,超参数 α \alpha α可理解为模型的学习率, R t − Q π ( s , a ) R_t-Q^{\pi}\left( s,a \right) RtQπ(s,a)称为蒙特卡洛误差

Q π ( s , a ) = n 次增量 Q π ( s , a ) + α ( R t − Q π ( s , a ) ) Q^{\pi}\left( s,a \right) \xlongequal{n\text{次增量}}Q^{\pi}\left( s,a \right) +\alpha \left( R_t-Q^{\pi}\left( s,a \right) \right) Qπ(s,a)n次增量 Qπ(s,a)+α(RtQπ(s,a))

动态规划强化学习核心是自我迭代

Q π ( s , a ) = E [ R t ] ∣ s t = s , a t = a = ∑ s ′ ∈ S P s → s ′ a [ R s → s ′ a + γ ∑ a ′ ∈ A π ( s ′ , a ′ ) Q π ( s ′ , a ′ ) ] Q^{\pi}\left( s,a \right) =\mathbb{E} \left[ R_t \right] \mid_{s_t=s,a_t=a}^{}=\sum_{s'\in S}{P_{s\rightarrow s'}^{a}}\left[ R_{s\rightarrow s'}^{a}+\gamma \sum_{a'\in A}{\pi \left( s',a' \right) Q^{\pi}\left( s',a' \right)} \right] Qπ(s,a)=E[Rt]st=s,at=a=sSPssa[Rssa+γaAπ(s,a)Qπ(s,a)]

根据动态特性和当前 Q π ( s , a ) Q^{\pi}\left( s,a \right) Qπ(s,a),具体计算出下一次迭代的 Q π ( s , a ) Q^{\pi}\left( s,a \right) Qπ(s,a)

动态规划强化学习的优点是计算准确且效率高,但无法适应无模型场景;蒙特卡洛强化学习的优点是克服无模型障碍,但有更新延迟现象。时序差分强化学习是动态规划与蒙特卡洛的折中

Q π ( s t , a t ) = n 次增量 Q π ( s t , a t ) + α ( R t − Q π ( s t , a t ) ) = n 次增量 Q π ( s t , a t ) + α ( r t + 1 + γ R t + 1 − Q π ( s t , a t ) ) = n 次增量 Q π ( s t , a t ) + α ( r t + 1 + γ Q π ( s t + 1 , a t + 1 ) − Q π ( s t , a t ) ) ⏟ 采样 \begin{aligned}Q^{\pi}\left( s_t,a_t \right) &\xlongequal{n\text{次增量}}Q^{\pi}\left( s_t,a_t \right) +\alpha \left( R_t-Q^{\pi}\left( s_t,a_t \right) \right) \\\,\, &\xlongequal{n\text{次增量}}Q^{\pi}\left( s_t,a_t \right) +\alpha \left( r_{t+1}+\gamma R_{t+1}-Q^{\pi}\left( s_t,a_t \right) \right) \\\,\, &\xlongequal{n\text{次增量}}{ \underset{\text{采样}}{\underbrace{Q^{\pi}\left( s_t,a_t \right) +\alpha \left( r_{t+1}+{ \gamma Q^{\pi}\left( s_{t+1},a_{t+1} \right) }-Q^{\pi}\left( s_t,a_t \right) \right) }}}\end{aligned} Qπ(st,at)n次增量 Qπ(st,at)+α(RtQπ(st,at))n次增量 Qπ(st,at)+α(rt+1+γRt+1Qπ(st,at))n次增量 采样 Qπ(st,at)+α(rt+1+γQπ(st+1,at+1)Qπ(st,at))

其中 r t + 1 + γ Q π ( s t + 1 , a t + 1 ) − Q π ( s t , a t ) r_{t+1}+\gamma Q^{\pi}\left( s_{t+1},a_{t+1} \right) -Q^{\pi}\left( s_t,a_t \right) rt+1+γQπ(st+1,at+1)Qπ(st,at)称为时序差分误差。当时序差分法只使用一步实际奖赏时称为 T D ( 0 ) TD(0) TD(0)算法,扩展为 T D ( n ) TD(n) TD(n)算法,当 n n n充分大时退化为蒙特卡洛强化学习

3 策略改进原理

类似地,时序差分强化学习同样分为同轨策略和离轨策略,前者的代表性算法是SARSA算法,后者的代表性算法是Q-learning算法

3.1 SARSA算法

SARSA算法流程图如下所示

在这里插入图片描述

3.2 Q-Learning算法

Q-Learning算法流程图如下所示

在这里插入图片描述


🔥 更多精彩专栏

  • 《ROS从入门到精通》
  • 《Pytorch深度学习实战》
  • 《机器学习强基计划》
  • 《运动规划实战精讲》

👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇

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

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

相关文章

网络层重点协议——IP协议详解

✏️✏️✏️今天给大家分享的是网络层的重点协议——IP协议。 清风的CSDN博客 🛩️🛩️🛩️希望我的文章能对你有所帮助,有不足的地方还请各位看官多多指教,大家一起学习交流! ✈️✈️✈️动动你们发财的…

UIKit-AVCapture(创建一个简单的摄像头demo)

AVCaptureVideoPreviewLayer 用于显示摄像头采集到的实时视频预览,可以直接添加到视图层次结构中。 AVCaptureVideoPreviewLayer可以嵌入 AVCaptureSession 处理摄像头捕获的数据封装后给屏幕 AVCaptureConnection 用于管理捕获会话中的数据流连接,…

Cocos Creator:坐标系

Cocos Creator:坐标系 坐标系节点位置坐标转换锚点缩放和旋转总结 在 Cocos Creator 3.8 中,节点坐标系统是游戏开发中的关键概念。它帮助开发者定位和排列场景中的各种元素。以下是关于节点坐标的使用详解: 坐标系 Cocos Creator 使用两种…

【数据结构】栈和队列超详解!(Stack Queue)

文章目录 前言一、栈1、栈的基本概念2、栈的实现(数组实现)3、栈的基本操作3.1 栈的结构设计3.2 栈常见的基本函数接口 4、栈的实现4.1 初始化栈4.2 栈的销毁4.3 入栈4.4 出栈4.5 判空4.6 长度4.7 获取栈顶元素 完整代码Stack.hStack.cTest.c 二、队列1、…

iOS ApplePay 支付汇总一二

一、前端发起支付的参考例子: import UIKit import MMKV import StoreKit import Alamofire import SVProgressHUD/// ApplePay 工具类 class ApplePayUtils : NSObject {static let shareInstance ApplePayUtils.init()/// 丢单存储集Key,验证成功从集合中移除le…

建行账单导出的手工操作

文章目录 建行账单导出的手工操作概述笔记END 建行账单导出的手工操作 概述 自己的电商账单分析程序初步搞定. 支付宝/微信/京东导出的账单都是csv格式. 我开始做的时候, 建行的账单选的是xls(旧版excel)格式. 没注意看. 程序中用的excel库操作, 只能处理.xlsx格式(新版exce…

10--面向对象OOP--05

1、代码块 如果成员变量想要初始化的值不是一个硬编码的常量值,而是需要通过复杂的计算或读取文件、或读取运行环境信息等方式才能获取的一些值,该怎么办呢?此时,可以考虑代码块(或初始化块)。 代码块(或…

使用xshell连接虚拟机(服务器)

作者:余小小 Xshell Xshell [1] 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。 Xshell可以…

neuq-acm预备队训练week 8 P8794 [蓝桥杯 2022 国 A] 环境治理

题目描述 输入格式 输出格式 输出一行包含一个整数表示答案。 输入输出样例 解题思路 最短路二分 AC代码 #include<bits/stdc.h> using namespace std; long long temp,n, Q; long long f[105][105],min_f[105][105],cut[105],dis[105][105];//cut为减少多少&#x…

mapstruct个人学习记录

mapstruct核心技术学习 简介入门案例maven依赖 IDEA插件单一对象转换测试结果 mapping属性Spring注入的方式测试 集合的映射set类型的映射测试map类型的映射测试 MapMappingkeyDateFormatvalueDateFormat 枚举映射基础入门 简介 在工作中&#xff0c;我们经常要进行各种对象之…

Sql Server关于表的建立、修改、删除

表的创建&#xff1a; &#xff08;1&#xff09;在“对象资源管理器”面板中展开“数据库”节点&#xff0c;可以看到自己创建的数据库&#xff0c;比如Product。展开Product节点&#xff0c;右击“表”节点&#xff0c;在弹出的快捷菜单中选择“新建表”项&#xff0c;进入“…

JMS(Java Message Service)使用指南

介绍 JMS即Java消息服务&#xff08;Java Message Service&#xff09;应用程序接口&#xff0c;是一个Java平台中关于面向消息中间件&#xff08;MOM&#xff09;的API&#xff0c;用于在两个应用程序之间&#xff0c;或分布式系统中发送消息&#xff0c;进行异步通信。它是一…