软性演员-评论家算法 SAC

news2024/10/7 12:22:40

软性演员-评论家算法 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

 


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

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

相关文章

【算法挨揍日记】day46——377. 组合总和 Ⅳ\、96. 不同的二叉搜索树

377. 组合总和 Ⅳ 377. 组合总和 Ⅳ 题目描述: 给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。 题目数据保证答案符合 32 位整数范围。 解题思路: 算法思路&a…

深度生成模型之图像翻译GAN ->(个人学习记录笔记)

文章目录 深度生成模型之图像翻译GAN图像翻译的应用1. 风格迁移2. 数据增强3. 经典图像任务4. 内容创作5. 人脸图像编辑6. 人体图像编辑 图像翻译模型1. 有监督图像翻译模型2. 无监督图像翻译模型3. 多域图像翻译模型 深度生成模型之图像翻译GAN 图像翻译的应用 1. 风格迁移 …

基于python的leetcode算法介绍之动态规划

文章目录 零 算法介绍一 例题介绍 使用最小花费爬楼梯问题分析 Leetcode例题与思路[118. 杨辉三角](https://leetcode.cn/problems/pascals-triangle/)解题思路题解 [53. 最大子数组和](https://leetcode.cn/problems/maximum-subarray/)解题思路题解 [96. 不同的二叉搜索树](h…

网络安全B模块(笔记详解)- 数字取证

数据分析数字取证-attack 1.使用Wireshark查看并分析Windows 7桌面下的attack.pcapng数据包文件,通过分析数据包attack.pcapng找出恶意用户的IP地址,并将恶意用户的IP地址作为Flag(形式:[IP地址])提交; 解析:http.request.method==POST ​ Flag:[172.16.1.102] 2.继续…

属龙人的性格命运怎么样呢?

​ 属龙人慷慨大方,为人友爱,人缘很好,才情十足,细腻的思维和独到的见解常常能打动别人的心弦,在社交场合游刃有余,且魅力独特,身边不乏追求者。属龙人感情细腻,浪漫多情&#xff0…

通过软盘拷贝文件 - 华为OD统一考试

OD统一考试(B卷) 分值: 200分 题解: Java / Python / C 题目描述 有一名科学家想要从一台古董电脑中拷贝文件到自己的电脑中加以研究但此电脑除了有一个3.5寸软盘驱动器以外,没有任何手段可以将文件持贝出来,而且只有一张软盘可以…

开源CalDAV和CardDav网页客户端InfCloud

本文应网友 畅天 的要求折腾。他遇到了跨域问题,所以老苏找了个二合一的镜像来规避。其中使用的 Baikal 和 InfCloud 都是最新的版本; 什么是 Baikal ? Baikal 是一个免费的开源自托管 CalDAV 和 CardDAV 服务器,适用于想要管理其…

普中STM32-PZ6806L开发板(HAL库函数实现-TIM5 设置 PWM input, 获取频率跟占空比)

简介 初始化 TIM5 为 PWM input CH1, 获取输入PWM的频率和占空比电路原理图 连线 将 PC7 与 PA0使用跳线进行连接 其他知识 APIs /* Blocking mode: Polling */ HAL_StatusTypeDef HAL_TIM_IC_Start(TIM_HandleTypeDef *htim, uint32_t Channel); // 堵塞捕获开…

微信好友添加频繁的原因

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

2021-01-03 excel实现列递增,行保持不变

需求:excel文档数据操作的时候发现自动递增只能实现列不变行号递增 我这里里需要的是列递增行不变 解决方式:通过一些函数的组合使用 INDIRECT("驻场明细!"&CHAR(ROW()62)&ROW(驻场明细!A$28)) INDIRECT()函数的使用: INDI…

Android studio ViewPager2应用设计

一、ViewPager2应用场景: ViewPager2是一个功能强大的滑动容器,提供灵活的页面切换和布局定制功能,使得应用程序界面更加丰富和交互性强,主要应用于以下场景: 1)、实现引导页或欢迎页:ViewPag…

妙手ERP功能更新:优化各平台描述设置、Ozon去除会员价设置、对接速虎速运.......

为了给卖家朋友带来更好的使用体验,更高效地运营跨境店铺,妙手ERP在上周优化了以下多项功能。 01、产品模块优化 全平台 - 优化各平台认领配置中的描述设置:具体优化见各平台描述设置 - 采集亚马逊产品到公用采集箱时,简易描述默…

助力成长的开源项目 —— 筑梦之路

闯关式 SQL 自学:sql-mother 免费的闯关式 SQL 自学教程网站,从 0 到 1 带大家掌握常用 SQL 语法,目前一共有 30 多个关卡,希望你在通关的时候,变身为一个 SQL 高手。除了闯关模式之外,这个项目支持自由选…

基于ssm的校友录的设计与实现+jsp论文

摘 要 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古…

声明式管理方(yaml)文件

声明式管理方(yaml)文件: 1、适合对资源的修改操作 2、声明式管理依赖于yaml文件,所有的内容都在yaml文件当中。 3、编辑好的yaml文件需要依靠陈述是还是要依靠陈述式的命令发布到k8s集群当中 create只能创建,不能更新。从指定yaml文件中读取配置&#…

深度确定性策略梯度 DDPG

深度确定性策略梯度 DDPG 深度确定性策略梯度 DDPG模型结构目标函数算法步骤适合场景 深度确定性策略梯度 DDPG A2C、A3C 都是在线策略,在与环境交互时,样本参数更新效率低,所以主要是应用在离散空间,计算量没那么大。 DDPG 专用…

脆弱的SSL加密算法漏洞原理以及修复方法

漏洞名称:弱加密算法、脆弱的加密算法、脆弱的SSL加密算法、openssl的FREAK Attack漏洞 漏洞描述:脆弱的SSL加密算法,是一种常见的漏洞,且至今仍有大量软件支持低强度的加密协议,包括部分版本的openssl。其实&#xf…

x-cmd pkg | lazygit - git 命令的终端 UI

目录 简介首次用户功能特点类似工具与竞品进一步探索 简介 lazygit 由 Jesse Duffield 于 2018 年使用 Go 语言构建的 git 终端交互式命令行工具,旨在终端界面中便捷管理 git 存储库。 首次用户 使用 x lazygit 即可自动下载并使用 在终端运行 eval "$(curl …

栈的经典算法问题(算法村第四关白银挑战)

括号匹配问题 有效的括号 20. 有效的括号 - 力扣(LeetCode) 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类…

包围盒体积-体积计算

文章目录 环境:1.1 包围盒法介绍:2.1 python代码3.1 可视化4.1 体积Calculation 环境: Open3D 1.1 包围盒法介绍: 求解离散点最优包围空间 常用的凸包算法: AABB OOB 2.1 python代码 conda activete deeplabv3plus(…