【强化学习】Q-learning,DQN,SARSA算法介绍

【强化学习】Q-learning,DQN,SARSA算法介绍

  • 强化学习算法分类
    • 基于价值的方法
    • 基于策略的方法
    • Actor-Critic方法
  • Q-learning算法
  • DQN算法
    • 强化学习训练数据存在的问题
    • 经验回放机制
    • 备份网络机制
  • Sarsa算法
  • 总结

强化学习算法分类

按学习目标进行分类 可分为基于价值、基于策略、以及Actor-Critic方法

基于价值的方法

  • 基于价值的方法:输出动作的价值,选择价值最高的动作
  • Q-learning,DQN, SARSA均是基于价值的方法

基于策略的方法

  • 基于策略的方法: 学习策略,直接输出下一步动作的概率,根据概率来选取动作(不一定概率最高就会选择该动作,会从整体进行考虑,需要探索其他动作,以便更好地了解环境并找到更优的策略)
    REINFORCE算法是基于策略的方法

Actor-Critic方法

  • Actor根据概率做出动作,Critic根据动作给出价值,是一类结合了策略评估(Critic)和策略改进(Actor)的强化学习算法。它们通过同时学习一个策略函数(Actor)和一个值函数(Critic),从而可以更有效地学习到优秀的策略。
    A2C (Advantage Actor-Critic)、A3C (Asynchronous Advantage Actor-Critic)、DDPG (Deep Deterministic Policy Gradient)、TD3 (Twin Delayed Deep Deterministic Policy Gradient)、PPO (Proximal Policy Optimization)等算法均是Actor-Critic方法

在这里插入图片描述

  • 强化学习的问题定义:给定马尔科夫决策过程𝑀𝐷𝑃 = {𝑆, 𝐴, 𝑃, 𝑅},寻找一个最优策略 π ∗ \pi^* π对任意𝒔 ∈ 𝑺使得𝑽𝝅∗(𝒔)值最大
  • 强化学习求解:在策略优化(策略提升)和策略评估的交替迭代中优化参数

在这里插入图片描述

时序差分(Temporal Difference,TD)方法可以基于策略或价值进行学习,具体取决于所使用的算法和问题设置。
基于策略的时序差分方法: 基于策略的时序差分方法主要关注于学习和优化当前执行的策略。
SARSA(State-Action-Reward-State-Action)是一个经典的基于策略的时序差分学习算法,它通过估计和更新Q值函数来学习一个策略,并在策略改变时进行更新。
SARSA算法根据当前策略选择的动作来更新Q值,从而使得Q值逐步逼近最优Q值(最优策略对应的Q值)。
基于价值的时序差分方法:基于价值的时序差分方法主要关注于学习和估计状态值或动作值函数(价值函数),而不是直接关注策略。
Q-learning是一个经典的基于价值的时序差分学习算法,它通过估计和更新状态-动作值函数Q来学习最优策略,而不需要显式地估计和更新策略。
Q-learning算法根据当前策略选择的最优动作来更新Q值,从而使得Q值逐步逼近最优Q值(最优策略对应的Q值)。

Q-learning算法

在这里插入图片描述

  • 强调一下:Q-learning算法 是model-free方法 ,是基于价值的方法
  • Q-learning算法的过程是学习Q表,各个状态和各个动作对应的Q(s,a),一旦矩阵Q足够接近于收敛状态,智能体便学习到了转移至目标状态的最佳路径
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
【注】:表格式的Q-learning算法通常适用于离散状态空间和离散动作空间的情况
在这里插入图片描述

  • 假如拥有了完美的𝑄(𝑠, 𝑎)表,那么在时刻𝑡时,就可以查出表中𝑄(𝑠𝑡,⋅)值所对应的最优动作,进而得出单个轨迹下最优的动作序列
  • 在实际应用中,Q表随着智能体与环境的交互不断更新和优化,直到达到收敛或者训练结束。训练完成后,智能体可以根据学习到的Q表来选择最优的动作序列,从而执行最优策略以获得最大的长期累积奖励。
  • 需要注意的是,Q表在状态和动作空间均较小且均离散的情况下(表格式Q学习算法)适用,对于大规模、连续状态空间的问题,通常需要借助函数逼近方法来近似Q值函数(DQN)。
    在这里插入图片描述

DQN算法

  • 以f函数拟合𝑄(𝑠,a)即 𝑄(𝑠,a) ≈ f(𝑠,a, ω),ω是该函数的参数
  • DQN可处理状态连续,动作离散的情况,输入是状态
  • 通过函数表示,无论𝒔的维度有多大,最后都可以通过矩阵运算(神经网络)降维输出为单值的𝑸值
  • DQN算法需要预先收集transition数据 ( s t , a t , r t , s t + 1 ) (s_t, a_t, r_t, s_{t+1}) (st,at,rt,st+1)来进行训练,是off-policy方法

对于许多状态连续,动作离散的问题,输入的状态基本都是高维度的,而动作输出可以是低维度的
在这里插入图片描述

在这里插入图片描述

疑问:为什么DQN的输入仅需要状态而不需要动作?
答:
1)Q值函数的学习目标:DQN的目标是学习状态-动作对的价值函数Q(s, a),即在给定状态s下采取动作a的价值。因此,DQN的网络结构被设计为接收状态作为输入,并输出每个动作的Q值,而不需要直接输入动作。
2)动作空间的离散性:
在很多强化学习问题中,动作空间是离散的,可能包含大量的动作选项。将动作作为网络输入会使网络的复杂度急剧增加,不利于训练和收敛。相反,通过仅输入状态,网络可以更专注地学习状态与价值之间的关系,而不必考虑如何直接处理动作空间的复杂性。

DQN算法的框架
在这里插入图片描述

  • 目标值 r + γ max ⁡ a ′ ∈ A Q ( s ′ , a ′ ) r + \gamma \max_{a' \in A}Q(s',a') r+γmaxaAQ(s,a),以其作为真实值 y y y
  • 估计值 y ^ \hat{y} y^,这是DQN主网络对当前状态和所采取动作的Q值的预测

计算参数w关于损失函数的梯度
在这里插入图片描述
在这里插入图片描述

在DQN(Deep Q-Network)算法的损失函数中使用期望值的主要原因是因为训练数据是从经验回放缓冲区中随机采样得到的,这些采样的transition数据是从Agent与环境交互过程中收集得到的,是一种随机采样的过程。因此,我们需要使用期望值来表示损失函数,以期望损失函数能够代表整体的训练数据。

强化学习训练数据存在的问题

  • 经常需要从稀疏、嘈杂和延迟的奖励信号中学习
  • 通常会遇到高度相关的状态序列
  • 数据分布不断随算法学习到的新行为而变化

经验回放机制

DQN解决数据高度相关和数据分布非平稳的问题的两个重要机制:①经验回放机制 + ②随机采样
在这里插入图片描述

  • 经验回放可以避免数据之间的相关性影响到模型的训练
    在这里插入图片描述

备份网络机制

  • DQN算法最终更新的目标是让 Q ω ( s , a ) Q_\omega(s,a) Qω(s,a)逼近 r + γ max ⁡ a ′ ∈ A Q ( s ′ , a ′ ) r + \gamma \max_{a' \in A}Q(s',a') r+γmaxaAQ(s,a)
  • 由于 TD 误差 = r + γ max ⁡ a ′ ∈ A Q ω ( s ′ , a ′ ) − Q ω ( s , a ) = r + \gamma \max_{a' \in A}Q_\omega(s',a') -Q_\omega(s,a) =r+γmaxaAQω(s,a)Qω(s,a),该目标本身就包含神经网络的输出 Q ω ( s ′ , a ′ ) , Q ω ( s , a ) Q_\omega(s',a'),Q_\omega(s,a) Qω(s,a),Qω(s,a)因此在更新网络参数的同时目标也在不断地改变,目标Q网络动态变化,这非常容易造成神经网络训练的不稳定性

在这里插入图片描述

  • 固定目标Q网络(Fixed Target Q-Network): DQN引入了两个神经网络,一个是主要的Q网络用于产生当前状态下的Q值估计,另一个是目标Q网络用于生成目标Q值。

  • 目标Q网络的参数是由主要Q网络的参数定期拷贝得来,但这些参数不会在训练中被更新,而是固定一段时间后再进行更新。这个机制的作用是减少训练中的价值估计偏差,有利于提高训练的稳定性和收敛速度。通过固定目标Q网络,可以减少因为目标Q值的变化而引起的训练不稳定性,从而更好地学习到最优的Q值函数。
    在这里插入图片描述
    DQN算法具体流程:
    在这里插入图片描述
    在这里插入图片描述

Sarsa算法

  • Sarsa算法相较于Q-learning,使用实际采取的动作来更新Q值,而不是使用最佳动作
  • 在学习的过程中只存在一种策略(on-policy), Sarsa算法用这种策略去选取动作,也用这种策略去优化动作
  • 更新公式如下所示:
    Q ( S t , A t ) ← Q ( S t , A t ) + α [ R t + 1 + γ Q ( S t + 1 , A t + 1 ) − Q ( S t , A t ) ] \begin{aligned}Q(S_{t},A_{t})\leftarrow Q(S_{t},A_{t})+\alpha[R_{t+1}+\gamma Q(S_{t+1},A_{t+1})-Q(S_{t},A_{t})]\end{aligned} Q(St,At)Q(St,At)+α[Rt+1+γQ(St+1,At+1)Q(St,At)]
  • Sarsa属于单步更新算法,也就是说每执行一个动作,就会更新一次价值和策略。如果不进行单步更新,而是采取n步更新或者回合更新,即在执行n步之后再来更新价值和策略,这样就得到了n步Sarsa(n-step Sarsa)。
    在这里插入图片描述

在这里插入图片描述

  • Sarsa与Q-learning均为model-free方法,且均为时序差分的方法
  • Sarsa 是典型的在线策略算法,而 Q-learning 是典型的离线策略算法
  • 判断二者类别的一个重要手段是看计算时序差分的价值目标的数据是否来自当前的策略

在这里插入图片描述

总结

  • Q-learning更新方式: Q ( s t , a t ) ← Q ( s t , a t ) + α [ r t + γ max ⁡ a Q ( s t + 1 , a ) − Q ( s t , a t ) ] Q(s_t,a_t) \larr Q(s_t,a_t) + \alpha[r_t + \gamma \max_{a} Q(s_{t+1},a) - Q(s_t,a_t)] Q(st,at)Q(st,at)+α[rt+γmaxaQ(st+1,a)Q(st,at)]
  • 单步Sarsa更新方式: Q ( s t , a t ) ← Q ( s t , a t ) + α [ r t + γ Q ( s t + 1 , a t + 1 ) − Q ( s t , a t ) ] Q(s_t,a_t) \larr Q(s_t,a_t) + \alpha[r_t + \gamma Q(s_{t+1},a_{t+1}) - Q(s_t,a_t)] Q(st,at)Q(st,at)+α[rt+γQ(st+1,at+1)Q(st,at)]
  • 多步Sarsa更新方式: Q ( s t , a t ) ← Q ( s t , a t ) + α [ r t + γ r t + 1 + … + γ n Q ( s t + n , a t + n ) − Q ( s t , a t ) ] Q(s_t,a_t) \larr Q(s_t,a_t) + \alpha[r_t +\gamma r_{t+1}+\ldots + \gamma^n Q(s_{t+n},a_{t+n}) - Q(s_t,a_t)] Q(st,at)Q(st,at)+α[rt+γrt+1++γnQ(st+n,at+n)Q(st,at)]
  • DQN的Loss计算方式: L ( w ) = E s [ ( r + γ m a x a ′ Q ( s ′ , a ′ , w ) − Q ( s , a , w ) ) 2 ] L(w)=\mathbb{E}_{s}\left[(\mathrm{r}+\gamma max_{a'}Q(s^{\prime},a^{\prime},w)-Q(s,a,w))^{2}\right] L(w)=Es[(r+γmaxaQ(s,a,w)Q(s,a,w))2]

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

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

相关文章

【基于Fluent和深度学习算法驱动的流体力学计算与应用】

在深度学习与流体力学融合的背景下,科研边界不断拓展,创新成果层出不穷。从物理模型融合到复杂流动模拟,从数据驱动研究到流场智能分析,深度学习正以前所未有的力量重塑流体力学领域。目前在Nature和Science杂志上发表的深度学习驱…

Linux 中的进程优先级管理

在 Linux 系统中,理解和管理进程优先级是维护系统性能的关键因素。本文将详细介绍进程优先级(priority)的基本概念、如何查看和调整进程优先级,以及 nice 值对优先级的影响。 基本概念 在多任务操作系统中,CPU 资源的…

Power BI 使用Filter()函数完成类似子查询的筛选

1. 假如我们有两张表,如下图,以及它们的关联方式: tb_bursary.student_id tb_student.id 2. 我们想要实现这个逻辑,先找出tb_student里,sno最大的学生id,再根据查找出的学生id,找到tb_bursary…

C++笔试强训day34

目录 1.ISBN号码 2.kotori和迷宫 3.矩阵最长递增路径 1.ISBN号码 链接https://www.nowcoder.com/practice/95712f695f27434b9703394c98b78ee5?tpId290&tqId39864&ru/exam/oj 提取题意&#xff0c;模拟一下即可。 #include <iostream> using namespace std; …

Java(其十二)--集合·初级

ArrayList集合 集合有很多种&#xff0c;ArrayList 是最常用的一种&#xff0c;集合的作用相当于C中的STL 最显著的特点就是&#xff1a;自动扩容。 一般定义式 ArrayList list new ArrayList(); //该 list 是可以储存各种类型的数据的&#xff0c;要想约束储存的数据&#x…

买车是小米su7还是model3?这个AI在我这里“干掉了”百万车评人

作者 | 曾响铃 文 | 响铃说 43天交付1万辆新车&#xff01;雷军的微博一发&#xff0c;又把小米汽车推上了热搜。 自小米su7问世以来&#xff0c;天天刷屏。说不心动&#xff0c;那是假的&#xff0c;身边好几个朋友都按捺不住要下订一台了。 但真要买&#xff0c;还是忍不住…

[回溯法]子集和数问题

没有任何优化&#xff0c;纯深搜做法&#xff1a; #include<iostream> #include<vector> using namespace std;const int N 100010; int nums[N],selected[N]; int n,M,sum; bool ansfalse;void Out() {for (int i 0; i < n - 1; i)printf("%d", …

强大的医院绩效考核管理系统源码,支持行业内所有绩效方案,且每步核算都可自主进行方案的新建、调整。

医院绩效考核管理系统是采用B/S架构模式设计、使用JAVA语言开发、后台使用MySql数据库进行管理的一整套计算机应用软件源码。 系统和his系统进行对接&#xff0c;按照设定周期&#xff0c;从his系统获取医院科室和医生、护士、其他人员工作量&#xff0c;对没有录入信息化系统…

YOLOv10:全面的效率-准确性驱动模型设计

YOLOv10&#xff1a;全面的效率-准确性驱动模型设计 提出背景精细拆分解法双重标签分配一致的匹配度量以效率为导向的模型设计 YOLO v10 总结1. 双重标签分配策略2. 一致匹配度量策略 论文&#xff1a;https://arxiv.org/pdf/2405.14458 代码&#xff1a;https://github.com/T…

今日选题。

诱导读者点开文章的9引真经&#xff08;一&#xff09; 标题重要么&#xff1f;新媒体、博客文通常在手机上阅读。首先所有的内容不同于纸媒&#xff0c;手机只展现标题&#xff0c;而内容都是折叠。其次读者能像看内容一样看4、5条或者7、8条标题&#xff08;区别于不同的主流…

微信小程序实现计算当前位置到目的地的距离

实现方式&#xff1a;使用腾讯位置服务 微信小程序JavaScript SDK | 腾讯位置服务 1.进腾讯位置服务申请key 2.下载sdk 微信小程序JavaScript SDK | 腾讯位置服务 3.微信公众平台添加授权域名 4.代码实现计算 const qqmap require("../../utils/qqmap-wx-jssdk.min.js…

一键部署Ollama和粘土模型?快来看看吧!

厚德云新上两款AI软件&#xff01;无需部署一键生成&#xff01; 前言 上新Ollama与粘土模型 就在5月23日&#xff0c;厚德云官方上新了Ollama开源大语言模型与粘土画风模型。它们都可以在平台上实施一键部署&#xff0c;那么这两款AI应用究竟有什么样的魅力呢&#xff1f;我们…

2024年4k激光投影仪购买指南:618推荐家用4K激光投影当贝X5 Pro

2024年的618已经悄然开始热度也在持续攀升&#xff0c;每年的大促节点是投影仪优惠力度最大的时候&#xff0c;很多消费者都会选择在这个时候去购买心仪的投影仪&#xff0c;想要投影放在客厅使用替代电视机的&#xff0c;一般都会去选择4K激光投影&#xff0c;如何挑选一款极具…

推荐3款好用的AI智能写作工具

AI智能写作如今已经很成熟了&#xff0c;不仅有很多AI综合大模型可以实现AI写作&#xff0c;还有很多专门针对AI写作场景专门研发的垂直领域工具。 如果你在工作学习中也想提高写作效率&#xff0c;不妨试试下面3个国内可直接登录使用的AI写作工具&#xff0c;其中不乏有简单易…

CentOS7 部署单机版 ElasticSearch + Logstash + Kibana

一、部署ElasticSearh 参考下面文章&#xff1a; CentOS7 部署单机版 ElasticSearch Logstash-CSDN博客文章浏览阅读83次&#xff0c;点赞2次&#xff0c;收藏2次。通过logstash收集信息&#xff0c;发送给elasticsearch处理。https://blog.csdn.net/weixin_44295677/articl…

详解PHP弱类型安全问题

弱类型的语言对变量的数据类型没有限制&#xff0c;你可以在任何地时候将变量赋值给任意的其他类型的变量&#xff0c;同时变量也可以转换成任意地其他类型的数据。这时候在类型转化、不同类型比较、不合理地传参&#xff0c;会造成意外执行结果和绕过防御。 一. 类型转换 …

ctfshow web入门 web306--web310源码审计

web306 这和之前的完全不一样了 <?php #error_reporting(0); session_start(); require service.php;$username$_POST[userid]; $userpwd$_POST[userpwd]; $servicenew service();$user$service->login($username,$userpwd); if($user){setcookie(user,base64_encode(…

常见电路的分类

举例&#xff1a;一个单片机控制电机驱动电路&#xff1a; 一般驱动部分和功率部分都是做到一起的 一、 驱动电路和功率电路&#xff1a; &#xff08;1&#xff09;电压高&#xff0c;电流大&#xff0c;需要与控制电路分开&#xff0c;并做好隔离保护&#xff08;光耦&…

【课程设计】Java 计算器实现(源码 + 详解)

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…