软性演员-评论家算法 SAC

软性演员-评论家算法 SAC

    • 软性演员-评论家算法 SAC
      • 优势原理
      • 软性选择
      • 模型结构
      • 目标函数
      • 重参数化
      • 熵正则化
      • 代码实现

 


软性演员-评论家算法 SAC

优势原理

DDPG 的问题在于,训练不稳定、收敛差、依赖超参数、不适应复杂环境。

软性演员-评论家算法 SAC,更稳定,更适应复杂环境。

传统强化学习策略,采用 ε-greedy 贪心策略。

  • 过度利用已知最优策略,老是在同一个地方用同一个策略

  • 忽视对未知状态和未知最优动作的探索,容易忽视复杂环境的动态变化

  • DDPG 每个时刻只给了一个最优策略,这个最优策略很大程度还是之前的经验

软性在这里的意思是,软性选择,用于平滑探索和利用的关系。

比如走迷宫,你有很多选择:向前走、向后走、转向等。

  • 在没有 SAC 的情况下,如果你发现一条看似可行的路线(已知最佳经验和动作),你可能会一直沿着这条路线走,即使它可能不是最佳路径。
  • 有了 SAC,就好比你不仅想尽快找到出路,还想探索迷宫中的每个角落。即使某些路线看起来当前并不是最直接的出路,你也会尝试它们,因为你被鼓励去探索。
  • 当 SAC 算法发现自己在某一区域过于确定或重复同样的路径时,它会因为想要增加熵(探索不确定性)而尝试新的动作,比如尝试之前没有走过的道路。
  • 随着时间的推移,SAC 不仅找到了出路,而且可能发现了多条路径,因为它在探索过程中学到了迷宫的更多信息。

SAC 算法通过鼓励探索(即不总是走看起来最优的路径)来找到多个好的解决方案,并且它比其他算法更不容易陷入局部最优解,因为它总是在寻找新的可能性。

核心优势是,避免过早陷入局部最优解,至少也要找一个更大的局部最优解。

SAC 软性选择是基于熵,熵的作用是为了衡量不确性程度。

这意味着在评估一个动作的价值时,不仅考虑了奖励,还考虑了执行该动作后策略的熵。

目标不仅是最大化奖励,还要最大化熵,这意味着算法被鼓励探索更多不同的动作,即使它们不是当前看起来最优的。

最大熵强化学习不仅仅关注立即的奖励最大化,还关注保持策略的多样性和随机性,以促进更全面的探索。

这张图描绘的是软性演员-评论家算法(Soft Actor-Critic, SAC)中用到的一个关键概念,即多模态Q函数。

在这个图中,我们可以看到两个子图,3a和3b,它们展示了策略(π)和Q函数之间的关系。

图3a

  • π(at|st):这表示在给定状态st时,动作at的概率分布,这里假设为正态分布N(μ(st), Σ),其中μ(st)是均值函数,Σ是协方差矩阵。
  • Q(st, at):这是Q函数在特定状态st和动作at下的值。Q函数衡量采取某动作并遵循当前策略预期可以获得的累积回报。

图3b

  • π(at|st) ∝ exp(Q(st, at)):这里显示了SAC中采用的最大熵策略,其中策略(即概率分布)与exp(Q(st, at))成正比。这意味着采取某个动作的概率不仅与预期回报(Q值)相关,还与该动作的熵有关。熵较高的动作即使预期回报不是最大,也可能被选中,这样鼓励了探索。
  • Q(st, at):同样表示Q函数的值,但在这里,它与策略结合来形成一个调整后的策略分布。

这两个子图展示了如何从Q函数构建一个随机策略,这个策略不仅考虑最大化回报,还鼓励策略的多样性(探索)。在图3a中,我们只看到了策略的原始形态,而在图3b中,我们看到了这个策略如何通过与Q函数结合来调整,以包含探索性。

在SAC算法中,这种通过最大化熵来鼓励探索的策略非常重要,有助于避免局部最优解并找到更鲁棒的长期解决方案。

通过这种方式,SAC能够在学习过程中平衡探索和利用,提高智能体在复杂环境中的表现。

软性选择

在某些环境中,可能存在多种不同的策略都能获得高回报,这导致 动作价值 Q 函数 变得多模态(即有多个高值峰)。

传统的强化学习算法可能只能收敛到其中一个模态,也就是一个局部最优解,而忽略了其他可能同样好或者更好的策略。

为了解决这个问题,可以使用一种称为基于能量的策略来让策略更好地适应Q函数的多模态特性。

基于能量的策略通常采用玻尔兹曼分布的形式,这是一个概率分布,它根据能量函数给出了各个状态的概率。

玻尔兹曼分布(x轴是能量大小):

让策略收敛到 Q 函数 的玻尔兹曼分布形式,这个形式的分布就可以拟合上图的多个解。

玻尔兹曼分布可以用来选择动作,其中动作的选择概率与其Q值的指数成正比,公式如下:

  • [ π ( a ∣ s ) = exp ⁡ ( Q ( s , a ) / τ ) ∑ b exp ⁡ ( Q ( s , b ) / τ ) ] [ \pi(a|s) = \frac{\exp(Q(s,a)/\tau)}{\sum_{b}\exp(Q(s,b)/\tau)} ] [π(as)=bexp(Q(s,b)/τ)exp(Q(s,a)/τ)]

这里的 τ \tau τ 称为温度参数,它控制了策略的探索程度。

  • τ \tau τ 较大时,策略倾向于探索

  • τ \tau τ 较小时,策略倾向于利用

这种基于玻尔兹曼分布的策略平衡了探索和利用,有助于智能体在复杂环境中找到长期有效的解决方案。

理论上,当智能体的学习收敛时,它的策略会反映出Q函数的结构,优先选择预期回报高的动作,同时保持对其他可能性的探索,这样做可以避免局部最优解,并适应环境的变化。

模型结构

V网络(Value Network)

  • 输入嵌入层(Input Embedder):对输入的观察数据进行预处理。
  • 中间件(Middleware):通常是一系列的全连接层或其他类型的网络层,用于提取特征。
  • 输出层(Dense):输出状态值(State Value),它代表了在给定状态下,遵循当前策略所能获得的预期回报。

策略网络(Policy Network)

  • 输入嵌入层(Input Embedder):与V网络相同,对输入进行预处理。
  • 中间件(Middleware):提取特征。
  • 策略均值输出层(Dense, Policy Mean):预测给定状态下每个动作的均值。
  • 策略标准差输出层(Dense, Log Policy Std):预测动作的对数标准差,通常会通过指数函数(Exponentiate)进行处理以确保标准差是正的。
  • SAC头(SAC Head):结合均值和标准差定义了一个高斯分布,并从中采样动作(Sampled Actions)作为策略输出。

Q网络(Q Networks)

  • 输入嵌入层(Input Embedder):分别对状态和动作进行预处理。
  • 中间件(Middleware):提取特征。
  • 输出层(Dense):存在两个Q网络,每个都输出一个状态-动作对的价值(State Action Value 1 & 2),这是为了减少估计偏差并提高稳定性。

这种结构允许SAC在做出决策时考虑到策略的多样性,并通过两个Q网络来减少值函数的过估计。

整个架构的目的是训练一个智能体,使其能在复杂环境中作出决策,同时通过熵正则化来鼓励探索未知的行为。

目标函数

Q网络更新损失函数:

L Q ( ϕ ) = E ( s i , q i , r i , s i + 1 ) ∼ D , a i + 1 ∼ π θ ( ⋅ ∣ s i + 1 ) [ 1 2 ( Q ϕ ( s i , a i ) − ( r i + γ ( min ⁡ j = 1 , 2 Q ϕ ˙ j ( s t + 1 , a t + 1 ) − α log ⁡ π ( a t + 1 ∣ s t + 1 ) ⏞ Entropy   Iterm ) 2 ] L_Q(\phi)=\mathbb{E}_{(s_i,q_i,r_i,s_{i+1})\sim\mathcal{D},a_{i+1}\sim\pi_{\theta}(\cdot|s_{i+1})}\left[\frac{1}{2}\left(Q_{\phi}(s_i,a_i)-(r_i+\gamma(\min_{j=1,2}Q_{\dot{\phi}_j}(s_{t+1},a_{t+1})\overbrace{-\alpha\log\pi(a_{t+1}|s_{t+1})}^{\textbf{Entropy Iterm}} \right ) ^ 2 \right ] LQ(ϕ)=E(si,qi,ri,si+1)D,ai+1πθ(si+1) 21 Qϕ(si,ai)(ri+γ(minj=1,2Qϕ˙j(st+1,at+1)αlogπ(at+1st+1) Entropy Iterm 2

  • L Q ( ϕ ) L_Q(\phi) LQ(ϕ): 这是Q函数的损失函数,用来训练Q网络的参数 ϕ \phi ϕ
  • E ( s i , a i , r i , s i + 1 ) ∼ D \mathbb{E}_{(s_i, a_i, r_i, s_{i+1}) \sim \mathcal{D}} E(si,ai,ri,si+1)D: 这个期望表示对经验回放缓冲区 D \mathcal{D} D中的样本进行平均,包括状态 s i s_i si、动作 a i a_i ai、奖励 r i r_i ri和下一个状态 s i + 1 s_{i+1} si+1
  • a i + 1 ∼ π θ ( ⋅ ∣ s i + 1 ) a_{i+1} \sim \pi_{\theta}(\cdot|s_{i+1}) ai+1πθ(si+1): 表示根据当前策略 π θ \pi_{\theta} πθ选择下一个动作 a i + 1 a_{i+1} ai+1
  • Q ϕ ( s i , a i ) Q_{\phi}(s_i, a_i) Qϕ(si,ai): Q网络使用参数 ϕ \phi ϕ来估计在状态 s i s_i si下采取动作 a i a_i ai的价值。
  • r i + γ ( min ⁡ j = 1 , 2 Q ϕ ˙ j ( s i + 1 , a i + 1 ) − α log ⁡ π ( a i + 1 ∣ s i + 1 ) ) r_i + \gamma (\min_{j=1,2}Q_{\dot{\phi}_j}(s_{i+1}, a_{i+1}) - \alpha \log \pi(a_{i+1}|s_{i+1})) ri+γ(minj=1,2Qϕ˙j(si+1,ai+1)αlogπ(ai+1si+1)): 这部分计算目标Q值,包括立即奖励 r i r_i ri加上对下一个状态-动作对的Q值的折现(考虑两个Q网络中较小的那个),再减去与策略熵相关的项,其中 γ \gamma γ是折现因子, α \alpha α是熵正则化的权重。
  • α log ⁡ π ( a i + 1 ∣ s i + 1 ) \alpha \log \pi(a_{i+1}|s_{i+1}) αlogπ(ai+1si+1): 这是熵正则化项, α \alpha α表示其权重。熵项鼓励策略进行探索,防止过早收敛到局部最优策略。

公式的原意

  • Q函数部分:不仅基于当前能得到多少分数来建议你的动作,而且还会考虑到未来可能得到的分数
  • 最大熵部分:让游戏更有趣、多样性(探索),这种考虑未来的方式称为折现,意味着未来的分数在今天看来不那么值钱。

策略网络更新损失函数:

L π ( θ ) = E s t ∼ D , a t ∼ π θ [ α log ⁡ ( π θ ( a t ∣ s t ) ) − Q ϕ ( s t , a t ) ] L_{\pi}(\theta)=\mathbb{E}_{s_{t}\sim\mathcal{D},a_{t}\sim\pi_{\theta}}[\alpha\log(\pi_{\theta}(a_{t}|s_{t}))-Q_{\phi}(s_{t},a_{t})] Lπ(θ)=EstD,atπθ[αlog(πθ(atst))Qϕ(st,at)]

  • L π ( θ ) L_{\pi}(\theta) Lπ(θ): 这是策略网络的损失函数,用于更新策略网络的参数 θ \theta θ
  • E s t ∼ D , a t ∼ π θ \mathbb{E}_{s_t \sim \mathcal{D}, a_t \sim \pi_{\theta}} EstD,atπθ: 这表示对经验回放缓冲区 D \mathcal{D} D中的状态s_t以及根据当前策略 π θ \pi_{\theta} πθ采取的动作 a t a_t at进行平均。
  • α log ⁡ ( π θ ( a t ∣ s t ) ) \alpha \log(\pi_{\theta}(a_t|s_t)) αlog(πθ(atst)): 这是策略熵的加权值, α \alpha α是熵的权重系数。这个熵项鼓励策略多样性,即鼓励策略产生更随机的动作。
  • Q ϕ ( s t , a t ) Q_{\phi}(s_t, a_t) Qϕ(st,at): 这是Q网络评估在状态s_t下采取动作 a t a_t at的价值。

上面提到的两个公式共同工作以优化智能体的行为,但各自负责不同的部分:

  1. Q函数的损失函数 L Q ( ϕ ) L_Q(\phi) LQ(ϕ)

    • 负责更新Q网络,即学习评估在给定状态和动作下预期回报的函数。
    • 通过比较实际的回报(包括立即奖励和折现后的未来奖励)和Q网络的预测来调整网络,以准确估计每个动作的价值。
    • 该过程涉及考虑策略的熵(探索性),确保智能体在追求高回报的同时,也会考虑到策略的多样性。
  2. 策略网络的损失函数 L π ( θ ) L_{\pi}(\theta) Lπ(θ)

    • 负责优化策略网络,即决定智能体在每个状态下应采取的最佳动作。
    • 强调在保持行动的高熵(即多样性和探索性)的同时,选择预期回报最大化的动作。
    • 策略网络通过最小化该损失函数来学习如何在探索和利用之间取得平衡。

L Q ( ϕ ) L_Q(\phi) LQ(ϕ)确保了对动作价值的准确估计,而 L π ( θ ) L_{\pi}(\theta) Lπ(θ)使智能体能够在探索多样动作的同时做出回报最大化的决策。两者共同作用使得智能体在复杂环境中能有效地学习和适应。

重参数化

熵正则化

代码实现

论文作者:https://github.com/rail-berkeley/softlearning

OpenAI:https://github.com/openai/spinningup

 


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于ssm的资产管理信息系统+vue论文

摘要 当下,正处于信息化的时代,许多行业顺应时代的变化,结合使用计算机技术向数字化、信息化建设迈进。以前企业对于资产信息的管理和控制,采用人工登记的方式保存相关数据,这种以人力为主的管理模式已然落后。本人结…

我用 Python 自动生成图文并茂的数据分析报告

reportlab是Python的一个标准库,可以画图、画表格、编辑文字,最后可以输出PDF格式。它的逻辑和编辑一个word文档或者PPT很像。有两种方法: 1)建立一个空白文档,然后在上面写文字、画图等; 2)建…

【设计模式-2】原型模式的原理、代码实现及类图展示

我们一定对类的实例化比较熟悉,前面我们说的单例、还有3种工厂模式都是通过new关键字来创建对象,下面我们来了解一种新的对象创建的方式。 1. 定义 原型模式也是一种创建型的设计模式,实现和原理总体比较简单,一句话总结呢&#…

帮企10合一万能分销商城源码系统:全开源可二开,全端覆盖+完整的代码包以及搭建教程

电商市场的竞争日益激烈,越来越多的企业开始意识到分销商城的重要性。然而,市面上的分销商城系统往往存在着功能单一、扩展性差等问题,无法满足企业的多样化需求。今天来给大家分享一款10合一万能分销商城源码系统。 以下是部分代码示例&…

MYSQL二主二从集群部署

目录 一、环境描述 二、安装mysql 2.1 卸载mysql(如果没安装过,可忽略) 2.1.1 列出安装的mysql 2.1.2 卸载mysql 2.1.3 删除mysql文件目录 2.1.3.1 查看mysql 目录 2.1.3.2 依次删除 2.2 在线安装 2.2.1 下载安装源 2.2.2 安装源rpm 2.2.3 加入rpm密钥 …

西安人民检察院 | OLED翻页查询一体机

产品:55寸OLED柔性屏 项目时间:2023年12月 项目地点:西安 在2023年12月,西安人民检察院引入了OLED翻页查询一体机,为来访者提供了一种全新的信息查询方式。 这款一体机采用55寸OLED柔性屏,具有高清晰度、…

虚幻UE 材质-进阶边界混合之WAT世界对齐纹理

边界混合前篇:虚幻UE 材质-边界混合之PDO像素深度偏移量 上一篇主要讲材质相似或者不同的两个物体之间的边界混合 这一篇主要讲自建材质且相同的两个物体之间的边界混合 文章目录 一、世界对齐纹理二、世界对齐纹理实验1、制作材质 三、进一步优化 一、世界对齐纹理…

25计算机专业考研经验贴之准备篇

Hello各位小伙伴,大家新年好! 马上就要进入寒假假期了,25考研也该提上日程了。今天先跟大家分享一下大家在假期可以先做起来的准备工作。 【选择学校】 择校是个非常重要的内容,因为不同学校的考试内容是不一样的,有些…

免费SSL证书:为你的网站安全护航

SSL证书作为保障网站安全的重要工具,其价值不言而喻。然而,许多人对SSL证书望而却步,因为其高昂的价格让人望而生畏。但现在,我们为您带来了福音——免费SSL证书!让您轻松实现网站安全,无惧网络威胁。 一、…

UTF-8编码文件:有BOM和无BOM的区别

UTF-8编码文件:有BOM和无BOM的区别 在处理UTF-8编码的文本文件时,你可能会遇到“有BOM”和“无BOM”两种类型。了解这两者之间的区别对于确保文件兼容性和正确的数据处理至关重要。 什么是BOM? BOM(Byte Order Mark,…

CRM系统如何实现市场销售管理?CRM系统有哪些营销功能

CRM管理系统中的营销管理模块,它的锋芒常被销售管理所掩盖,但对于企业的业务来说同样重要。营销部门虽然不像销售人员一样直接面对客户,却是挖掘线索、商机的重要角色。CRM在市场营销领域的关键功能包括:营销漏斗、客户细分、营销…

javascript 常见工具函数(五)

41.深度拷贝对象: static deepCopyObj$(obj) {var result Array.isArray(obj) ? [] : {};for (var key in obj) {if (obj.hasOwnProperty(key)) {if (typeof obj[key] object && obj[key] ! null) {result[key] Utils$.deepCopyObj$(obj[key]); //递归…

微信好友添加频繁的原因

01 微信好友添加频繁的原因 1. 添加好友的频率太高:短时间内添加多个好友,系统会认为账号被盗,从而限制用户添加好友; 2. 频繁的发送好友请求:在短时间内连续发送好友请求,也会导致微信限制操作&#xff0…

系列五、搭建Naco(集群版)

一、搭建Naco(集群版) 1.1、前置说明 (1)64位Red Hat7 Linux 系统; (2)64位JDK1.8;备注:如果没有安装JDK,请参考【系列二、Linux中安装JDK】 (3&…

HbuilderX中的git的使用

原文链接https://blog.csdn.net/Aom_yt/article/details/119924356

【C++入门】类和对象(完)

前言 在谈论C时,常常会涉及到一些高级特性和概念,比如初始化列表、static成员、友元、内部类、匿名对象等。这些概念在C编程中起着非常重要的作用,对于想要深入了解C语言的开发者来说,掌握这些知识是至关重要的。本文,…

LeetCode第32题 : 最长有效括号

题目介绍 给你一个只包含 ( 和 ) 的字符串,找出最长有效(格式正确且连续)括号子串的长度。 示例 1: 输入:s "(()" 输出:2 解释:最长有效括号子串是 "()" 示例 2&#xf…

SpringBoot整合mybatis多数据源

废话不多说先上结果 对应数据库 首先导入所需的mybatis、mysql和lombok依赖 <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version></dependen…

关于我花费六千多组了台window+Linux主机

一边学习&#xff0c;一边总结&#xff0c;一边分享&#xff01; 写在前面 我在2023年12月组了一台“洋垃圾”的主机&#xff0c;一边当做台式机使用&#xff0c;一边当做服务器使用。这个方案算是相对比较划算的方案。我开始是打算直接单做服务器使用的&#xff0c;以及内存…

【好书推荐】只更新软件,座椅为何能获得加热功能?《一书读懂物联网:基础知识+运行机制+工程实现》

文章目录 什么是OTA&#xff1f;OTA方案的特点时间短、效率高合理使用无线资源&#xff0c;提升终端更新的服务效率高可靠性通用性 OTA系统的参考架构和服务流程结语 2020年&#xff0c;特斯拉发布过一次OTA更新&#xff0c;车主可以通过这次系统更新获得座椅加热功能。当时&am…