强化学习SAC算法对数概率公式推导

news2024/12/21 2:20:58

强化学习 SAC算法 对数概率推导

先上原论文:

SAC

首先对公式 ( 20 ) (20) (20) 做推导。

公式 ( 20 ) (20) (20) 的数据流应该是这样的:
s → π ( u ∣ s ) → u → a = tanh ⁡ ( u ) → a \mathbf{s}\rightarrow \pi(\mathbf{u}|\mathbf{s}) \rightarrow \mathbf{u}\rightarrow \mathbf{a}=\tanh(\mathbf{u})\rightarrow \mathbf{a} sπ(us)ua=tanh(u)a
a \mathbf{a} a 的概率密度,我们先可以这样写出 a \mathbf{a} a 的分布函数表达式:
P r A ( a ) = P r ( A ≤ a )   ( A 表示随机变量 , a 表示 A 的某个观察值 , 也就是实际产生的“ a c t i o n ” ) = P r ( tanh ⁡ ( U ) ≤ a )   ( 带入 tanh ⁡ 函数 , 将随机变量 A 用 U 的函数来表示 ) = P r ( U ≤ tanh ⁡ − 1 ( a ) )   ( 求解 P r 里面的不等式 , tanh ⁡ 的反函数用 tanh ⁡ − 1 表示 ) = F U ( tanh ⁡ − 1 ( a ) )   ( 根据分布函数的定义 , 化简这个表达式 ) (1) \begin{align*} Pr_{A}(a) &= Pr(A\le a) \\ &\ (A表示随机变量,a表示A的某个观察值,也就是实际产生的“action”) \\ &= Pr(\tanh(U)\le a) \\ &\ (带入\tanh 函数,将随机变量A用U的函数来表示) \\ &= Pr(U\le\tanh^{-1}(a)) \\ &\ (求解Pr里面的不等式,\tanh 的反函数用\tanh^{-1}表示) \\ &= F_{U}(\tanh^{-1}(a)) \\ &\ (根据分布函数的定义,化简这个表达式) \\ \end{align*}\tag{1} PrA(a)=Pr(Aa) (A表示随机变量,a表示A的某个观察值,也就是实际产生的action)=Pr(tanh(U)a) (带入tanh函数,将随机变量AU的函数来表示)=Pr(Utanh1(a)) (求解Pr里面的不等式,tanh的反函数用tanh1表示)=FU(tanh1(a)) (根据分布函数的定义,化简这个表达式)(1)
a \mathbf{a} a 的概率密度,我们可以由 a \mathbf{a} a 的分布函数求导得到:
p ( A ) = d P r A ( a ) d a = d F U ( tanh ⁡ − 1 ( a ) ) d a   ( 代入 ( 1 ) 中的表达式 ) = d F U ( tanh ⁡ − 1 ( a ) ) d tanh ⁡ − 1 ( a ) ⋅ d tanh ⁡ − 1 ( a ) d a   ( 对表达式做链式求导 ) = d F U ( u ) d u ⋅ d u d a   ( 这是因为 a = tanh ⁡ ( u ) , 则 u = tanh ⁡ − 1 ( a ) ) = p ( U ) ⋅ ( det ⁡ d a d u ) − 1   ( 左边一部分根据概率密度函数的定义 , 右边一部分根据: )   ( “反函数的导数等于原函数导数的倒数” )   ( 另外 , 向量对向量求导得到的结果是矩阵形式 , 因为 a = tanh ⁡ ( u ) )   ( 是逐个对应元素做计算 , 那么得到的矩阵就是一个对角阵 )   ( 最后的结果是:原函数的导数的对角阵的逆 ) = μ ( u ∣ s ) ⋅ ∣ det ⁡ d a d u ∣ − 1 (2) \begin{align*} p(A) &= \frac{\mathbf{d}Pr_{A}(\mathbf{a})}{\mathbf{d}\mathbf{a}} \\ &= \frac{\mathbf{d}F_{U}(\tanh^{-1}(\mathbf{a}))}{\mathbf{d}\mathbf{a}} \\ &\ (代入(1)中的表达式) \\ &= \frac{\mathbf{d}F_{U}(\tanh^{-1}(\mathbf{a}))}{\mathbf{d}\tanh^{-1}(\mathbf{a})}\cdot\frac{\mathbf{d}\tanh^{-1}(\mathbf{a})}{\mathbf{d}\mathbf{a}} \\ &\ (对表达式做链式求导) \\ &= \frac{\mathbf{d}F_{U}(\mathbf{u})}{\mathbf{d}\mathbf{u}}\cdot\frac{\mathbf{d}\mathbf{u}}{\mathbf{d}\mathbf{a}} \\ &\ (这是因为\mathbf{a}=\tanh(\mathbf{u}),则\mathbf{u}=\tanh^{-1}(\mathbf{a})) \\ &= p(U)\cdot\big(\det\frac{\mathbf{d}\mathbf{a}}{\mathbf{d}\mathbf{u}}\big)^{-1} \\ &\ (左边一部分根据概率密度函数的定义,右边一部分根据:) \\ &\ (“反函数的导数等于原函数导数的倒数”) \\ &\ (另外,向量对向量求导得到的结果是矩阵形式,因为\mathbf{a}=\tanh(\mathbf{u})) \\ &\ (是逐个对应元素做计算,那么得到的矩阵就是一个对角阵) \\ &\ (最后的结果是:原函数的导数的对角阵的逆) \\ &= \mu(\mathbf{u}|\mathbf{s})\cdot \big|\det\frac{\mathbf{d}\mathbf{a}}{\mathbf{d}\mathbf{u}}\big|^{-1} \\ \end{align*}\tag{2} p(A)=dadPrA(a)=dadFU(tanh1(a)) (代入(1)中的表达式)=dtanh1(a)dFU(tanh1(a))dadtanh1(a) (对表达式做链式求导)=dudFU(u)dadu (这是因为a=tanh(u),u=tanh1(a))=p(U)(detduda)1 (左边一部分根据概率密度函数的定义,右边一部分根据:) (反函数的导数等于原函数导数的倒数) (另外,向量对向量求导得到的结果是矩阵形式,因为a=tanh(u)) (是逐个对应元素做计算,那么得到的矩阵就是一个对角阵) (最后的结果是:原函数的导数的对角阵的逆)=μ(us) detduda 1(2)
我们得到了论文的公式 ( 20 ) (20) (20) ,但是后面导数的对角阵的逆还需要进一步处理。
y = tanh ⁡ ( x ) = sinh ⁡ ( x ) cosh ⁡ ( x ) y ′ = cosh ⁡ 2 ( x ) − sinh ⁡ 2 ( x ) cosh ⁡ 2 ( x ) = 1 − tanh ⁡ 2 ( x ) 其中, [ cosh ⁡ ( x ) ] ′ = sinh ⁡ ( x ) , [ sinh ⁡ ( x ) ] ′ = cosh ⁡ ( x ) \begin{align*} y&=\tanh(x)=\frac{\sinh(x)}{\cosh(x)}\tag{3} \\ y^{\prime}&=\frac{\cosh^{2}(x)-\sinh^{2}(x)}{\cosh^{2}(x)} \\ &= 1-\tanh^{2}(x)\tag{4} \\ &其中,[\cosh(x)]^{\prime}=\sinh(x),[\sinh(x)]^{\prime}=\cosh(x) \end{align*} yy=tanh(x)=cosh(x)sinh(x)=cosh2(x)cosh2(x)sinh2(x)=1tanh2(x)其中,[cosh(x)]=sinh(x)[sinh(x)]=cosh(x)(3)(4)
得到了这样一个等式之后,我们可以把这个等式用到向量之间:
     ∣ det ⁡ d a d u ∣ − 1 = ∣ d a 1 d u 1 ⋱ d a n d u n ∣ − 1 = ∣ 1 − tanh ⁡ 2 ( u 1 ) ⋱ 1 − tanh ⁡ 2 ( u n ) ∣ − 1 = 1 ( 1 − tanh ⁡ 2 ( u 1 ) ) ⋯ ( 1 − tanh ⁡ 2 ( u n ) ) (5) \begin{align*} &\ \ \ \ \big|\det\frac{\mathbf{d}\mathbf{a}}{\mathbf{d}\mathbf{u}}\big|^{-1} \\ &= \begin{vmatrix} \frac{\mathbf{d}a_{1}}{\mathbf{d}u_{1}} & & \\ & \ddots & \\ & & \frac{\mathbf{d}a_{n}}{\mathbf{d}u_{n}} \end{vmatrix}^{-1} \\ &= \begin{vmatrix} 1-\tanh^{2}(u_{1}) & & \\ & \ddots & \\ & & 1-\tanh^{2}(u_{n}) \end{vmatrix}^{-1} \\ &=\frac{1}{( 1-\tanh^{2}(u_{1}))\cdots(1-\tanh^{2}(u_{n}))} \end{align*}\tag{5}      detduda 1= du1da1dundan 1= 1tanh2(u1)1tanh2(un) 1=(1tanh2(u1))(1tanh2(un))1(5)
最后计算对数概率密度:
log ⁡ π ( a ∣ s ) = log ⁡ μ ( u ∣ s ) + log ⁡ 1 ( 1 − tanh ⁡ 2 ( u 1 ) ) ⋯ ( 1 − tanh ⁡ 2 ( u n ) )   ( 把公式 ( 5 ) 带进来并根据对数等式拆分 ) = log ⁡ μ ( u ∣ s ) − log ⁡ ( 1 − tanh ⁡ 2 ( u 1 ) ) − ⋯ log ⁡ ( 1 − tanh ⁡ 2 ( u n ) )   ( 根据对数等式拆分 ) = log ⁡ μ ( u ∣ s ) − ∑ i = 1 n log ⁡ ( 1 − tanh ⁡ 2 ( u i ) )   ( 化简一下 ) (6) \begin{align*} \log\pi(\mathbf{a}|\mathbf{s}) &= \log\mu(\mathbf{u}|\mathbf{s})+\log\frac{1}{( 1-\tanh^{2}(u_{1}))\cdots(1-\tanh^{2}(u_{n}))} \\ &\ (把公式(5)带进来并根据对数等式拆分) \\ &= \log\mu(\mathbf{u}|\mathbf{s}) - \log( 1-\tanh^{2}(u_{1}))-\cdots\log( 1-\tanh^{2}(u_{n})) \\ &\ (根据对数等式拆分) \\ &= \log\mu(\mathbf{u}|\mathbf{s}) -\sum\limits_{i=1}^{n}\log(1-\tanh^{2}(u_{i})) \\ &\ (化简一下) \\ \end{align*}\tag{6} logπ(as)=logμ(us)+log(1tanh2(u1))(1tanh2(un))1 (把公式(5)带进来并根据对数等式拆分)=logμ(us)log(1tanh2(u1))log(1tanh2(un)) (根据对数等式拆分)=logμ(us)i=1nlog(1tanh2(ui)) (化简一下)(6)
最后我想说的是:

  1. 这就是为什么在SAC的策略更新代码中,计算重采样之后的概率密度,还要再加上一串很奇怪的项。

    这一串很奇怪的项就是公式 ( 6 ) (6) (6) 的第二项。

  2. 一般是重采样之后通过 tanh ⁡ ( ) \tanh() tanh() 计算实际作用于环境的动作,然后对这个动作按元素做平方计算,最后用数字1减去这个平方计算值(内含广播机制),然后与前面的重采样直接计算的概率密度相减!

  3. 为什么会有 ϵ \epsilon ϵ 小量?我认为这是因为公式 ( 5 ) (5) (5) 的除法导致的。小量一般是10的-7次方,其实是忽略不计的。

OK,清楚了,撒花~~~

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

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

相关文章

Vue3标签(Tag)

APIs 参数说明类型默认值必传closable标签是否可以关闭booleanfalsefalsecolor标签颜色,预置多种常用颜色:success, processing, error, warn, pink, red, orange, green, cyan, blue, purplestring‘’falseicon设置图标string | slot‘’false Event…

【深度学习】【Image Inpainting】Generative Image Inpainting with Contextual Attention

Generative Image Inpainting with Contextual Attention DeepFillv1 (CVPR’2018) 论文:https://arxiv.org/abs/1801.07892 论文代码:https://github.com/JiahuiYu/generative_inpainting 论文摘录 文章目录 效果一览摘要介绍论文贡献相关工作Image…

MySQL数据备份与恢复练习

目录 1.创建student和score表 2.为student表和score表增加记录 3.备份数据库school到/backup目录 4.备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库 5.直接将MySQL数据库压缩备份 6.备份MySQL数据库某个(些)表。此例备…

『Python学习笔记』Python代码打包成pip包(可pip install)|查看安装torch、cuda和cudnn版本号

Python代码打包成pip包(可pip install)|查看安装torch、cuda和cudnn版本号 文章目录 一. pip包的好处二. 简单小例子2.1. 创建Python包2.2. 构建Python包2.3. 上传到PyPI2.4. pip安装测试 三. CLIP多模态模型相关例子3.1. Chinese-CLIP例子3.2. CLIP-ONNX例子3.3. 问题1和问题…

vue使用driver.js完成页面引导的功能

需求:用户首次进入的时候肯定不知道一些功能是干什么在哪里,之后给用户一个页面引导,教他怎么做。 点击插件driver.js官方文档 效果: 1.下载driverjs 我默认下载的是最新版 "driver.js": "^1.0.5",&#x…

MySQL 高级SQL语句(一)

目录 一、高级SQL语句(进阶查询) 1.1 select 1.2 distinct 1.3 where 1.4 and 和 or 1.5 in 1.6 between 1.7 通配符 1.8 like 1.9 order by 一、高级SQL语句(进阶查询) 先准备2个表 一个location表: use m…

私人记账本程序cashbook

什么是 cashbook ? cashbook 是一个私人或家庭记账程序,支持私有化部署,商用或其他使用不受约束。建议使用者每年创建一个账本,图表功能可以起到分析全年数据的效果。 官方提供了演示站点,但不建议记录真实数据 演示账…

ardupilot 遥控的输入控制模式

目录 本节主要记录自己整理ardupilot的遥控器的输入控制模式:正常模式、简单模式、超简单模式的理解。 1.正常模式(有头模式) 在不用简单和超简单的模式的情况下,无人机操作员操作的控制输入是对应着不断旋转着的飞行器进行操作的。如上方图所示举例,当无人机操作员进行…

flask中的werkzeug介绍

flask中的werkzeug Werkzeug是一个Python库,用于开发Web应用程序。它是一个WSGI(Web Server Gateway Interface)工具包,提供了一系列实用功能来帮助开发者处理HTTP请求、响应、URLs等等。Werkzeug的设计非常灵活,可以…

基础入门-SpringBoot-自动配置特性

一、自动配好Tomcat 引入Tomcat依赖。配置Tomcat <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><version>2.3.4.RELEASE</version><scope>compile</sco…

同城跑腿小程序怎么做

同城跑腿小程序是一款基于地理位置的服务平台&#xff0c;为用户提供了便捷的日常生活服务。以下是该小程序的主要功能介绍&#xff1a; 1. 快速下单&#xff1a;用户可以通过小程序平台快速填写订单信息&#xff0c;包括取送地址、物品类型和重量等信息&#xff0c;然后选择合…

LabVIEW开发环境试验箱控制器

LabVIEW开发环境试验箱控制器 环境或气候试验箱是一种外壳&#xff0c;用于模拟各种材料&#xff08;包括工业产品、生物物质、复合材料、电子设备和航空航天部件&#xff09;的特定环境条件&#xff0c;并评估调节对这些材料的影响。 环境试验箱&#xff08;ETC&#xff09;…

存储过程——游标

1.游标 什么是游标&#xff0c;以及游标使用的相关语法。 #声明游标&#xff0c;存储查询结果集 #准备&#xff1a;创建表结构 #开启游标 #获取游标中的记录 #插入数据到新表中 #关闭游标 create procedure p11(in uage int) begindeclare uname varchar(100);declare upro …

Istio 故障注入与重试的实验

故障注入 Istio流量治理有故障注入的功能&#xff0c;在接收到用户请求程序的流量时&#xff0c;注入故障现象&#xff0c;例如注入HTTP请求错误&#xff0c;当有流量进入Sidecar时&#xff0c;直接返回一个500的错误请求代码。 通过故障注入可以用来测试整个应用程序的故障恢…

DYLD--动态链接器

概念 dyld&#xff08;the dynamic link editor&#xff09;是苹果的动态链接器&#xff0c;是苹果操作系统一个重要组成部分&#xff0c;在系统内核 XNU 完成 Mach-O 文件的加载&#xff0c;做好程序准备工作之后&#xff0c;交由 dyld 负责余下的工作。在 macOS 系统中&…

vue2引入lottie动画

说明下&#xff1a;如果你是vue3的话请移步&#xff1a;https://blog.csdn.net/qq_67801847/article/details/128386661&#xff0c;这里只针对vue2. 同时动画官网链接&#xff1a;lottie官网 实现思路&#xff1a; 1. 安装lottie-web (版本无所谓) 2. 在使用的页面引入组件 #…

一起来看看音频转文字怎么弄吧

从前有一个名叫小明的学生&#xff0c;他在学校里总是很喜欢录制各种有趣的音频&#xff0c;包括老师的讲课、同学们的笑声&#xff0c;以及校园里的各种声音。有一天&#xff0c;他在课堂上录下了老师的授课内容&#xff0c;想着晚上回家后再将它们转换成文字&#xff0c;便于…

网络安全(黑客)学习手册

1.什么是网络安全&#xff1f; 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 2.网络安全市场 一是市场需求量高&#xff1b; 二则是发展…

Python+大数据开发拿到25k的offer!

随着95后、00后的登场&#xff0c;80后好似成为“古早”的存在&#xff0c;看似被生活磨平了棱角的他们&#xff0c;其实也在渴望重新“支棱”起来。今天分享的这位80后的逆袭故事&#xff0c;希望你能感受到他的力量…… 学科 | Python大数据开发 校区 | 北京 薪资 | 25k 我…

【深度学习之YOLO8】视频流推断

官方V8模型下载 需要准备两个东西 simsun.ttc字体包YOLOv8官方模型成品 ScreenCapture屏幕图像类 import cv2 import mss import numpy as npclass ScreenCapture:"""parameters----------screen_resolution : Tuple[int, int]屏幕宽高&#xff0c;分别为x&a…