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

强化学习 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,清楚了,撒花~~~

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

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

相关文章

高精度地图服务引擎项目

技术栈:使用vue3TypeScriptElement PlusPiniaaxios 项目描述:高精度地图服务引擎项目,提供轻量化处理3D瓦片切片分布式处理分发服务的一站式解决方案 工作内容:1、项目60%已上的页面开发 2、部分模块的功能实现, 3、封…

Docker consul的容器服务更新与发现

consul 服务自动发现和注册 1.什么是服务注册与发现 服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的,不保障高可用性,也不考虑服务的压力承载,服务之间调用单纯的通过接口访问。直到后来出现了多个节点的分布式架构…

ElasticSearch基础篇-安装与基本操作

ElasticSearch基础篇 安装 官网 下载地址 下载完成后对文件进行解压,项目结构如下 进入bin目录点击elasticsearch.bat启动服务 9300 端口为 Elasticsearch 集群间组件的通信端口, 9200 端口为浏览器访问的 http协议 RESTful 端口 打开浏览器&#…

ffplay播放器剖析(6)----音视频同步分析

文章目录 1. 音视频同步基础1.1 音视频同步策略1.2 音视频同步概念1.3 FFmpeg中的时间单位1.4 不同结构体的time_base/duration分析1.5 不同结构体的pts/dts分析1.6 ffplay中Frame结构体分析1.7 Vidoe Frame PTS获取及矫正1.8 Audio Frame PTS的获取 2.以音频为基准3.以视频为基…

Android Studio 代码模板插件实现

Android Studio 代码模板插件 背景 可以跳过背景和简述,从模板插件实现开始看. 开发新页面时,原先需要写一堆模板代码。比如用Databinding写列表结构的页面,需要手写以下文件: XxActivity.ktXxFragment.ktXxViewModel.ktXxListA…

redis中缓存雪崩,缓存穿透,缓存击穿的原因以及解决方案

一 redis的缓存雪崩 1.1 缓存雪崩 在redis中,新,旧数据交替时候,旧数据进行了删除,新数据没有更新过来,造成在高并发环境下,大量请求查询redis没有数据,直接查询mysql,造成mysql的…

并行计算-OPENMP(windows)

并行计算(Parallel Computing)是指同时使用多种计算资源解决计算问题的过程,是提高计算机系统计算速度和处理能力的一种有效手段。它的基本思想是用多个处理器来协同求解同一问题,即将被求解的问题分解成若干个部分,各…

SpringCloud学习路线(12)——分布式搜索ElasticSeach数据聚合、自动补全、数据同步

一、数据聚合 聚合(aggregations): 实现对文档数据的统计、分析、运算。 (一)聚合的常见种类 桶(Bucket)聚合: 用来做文档分组。 TermAggregation: 按照文档字段值分组…

AWS / VPC 云流量监控

由于安全性、数据现代化、增长、灵活性和成本等原因促使更多企业迁移到云,将数据存储在本地的组织正在使用云来存储其重要数据。亚马逊网络服务(AWS)仍然是最受追捧和需求的服务之一,而亚马逊虚拟私有云(VPC&#xff0…

flutter android Webview 打开网页错误ERR_CLEARTEXT_NOT_PERMITTED 、 net:ERR_CACHE_MISS

当你在Flutter应用中尝试打开一个非安全连接的网页(例如HTTP连接而不是HTTPS连接)时,可能会遇到"ERR_CLEARTEXT_NOT_PERMITTED"错误。这是因为默认情况下,Android 9及更高版本禁止应用程序通过非安全的明文HTTP连接进行…

5-linux中的定时任务调度

定时任务调度 crond 任务调度概述基本语法常用选项快速入门应用实例crond 相关指令 at 定时任务基本介绍at 命令格式at 命令选项at 时间的定义其他指令 crond 任务调度 crontab 进行 定时任务调度 概述 任务调度:是指系统在某个时间执行的特定的命令或程序 任务…

JVM运行时数据区——字符串常量池位置的调整

在JDK6及之前,使用永久代来实现方法区,字符串常量池(StringTable)是在永久代(方法区)中的,但是方法区的回收效率不高,在Full GC时才会回收。 在JDK7中,将字符串常量池转移到了堆中,分配在年轻代和老年代中。…

C++模板的简单练习

运行代码&#xff1a; #include"std_lib_facilities.h"template <class T>struct S { private:T val; public:S<T>() :val(T()) {}S<T>(T tt) : val(tt) {};T& get();void set(T tt) { val tt; }ostream& operator << (ostream&a…

电脑记事本在哪里?电脑桌面显示记事本要怎么设置?

绝大多数上班族在使用电脑办公时&#xff0c;都需要随手记录一些琐碎或重要的事情&#xff0c;例如工作注意事项、常用的文案、某项工作的具体要求、多个平台的账号和密码等。于是就有不少小伙伴想要使用电脑记事本软件来记录&#xff0c;那么电脑记事本在哪里呢&#xff1f;想…

MySQL数据库关于表的一系列操作

MySQL中的数据类型 varchar 动态字符串类型&#xff08;最长255位&#xff09;&#xff0c;可以根据实际长度来动态分配空间&#xff0c;例如&#xff1a;varchar(100) char 定长字符串&#xff08;最长255位&#xff09;&#xff0c;存储空间是固定的&#xff0c;例如&#…

【大虾送书第三期】《Python高并发与高性能编程: 原理与实践》

目录 ✨写在前面 ✨主要内容 ✨本书特色 ✨关于作者 &#x1f990;博客主页&#xff1a;大虾好吃吗的博客 &#x1f990;专栏地址&#xff1a;免费送书活动专栏地址 写在前面 Python成为时下技术革新的弄潮儿&#xff0c;全民Python的发展趋势让人们不再满足于简单地运行Python…

LeetCode三步问题(动态规划)

LeetCode三步问题&#xff08;动态规划&#xff09; 编写代码代码优化 链接: 三步问题 编写代码 class Solution { public:int waysToStep(int n) {if(n 1 || n 2) return n;vector<int> dp(n1);const int MOD 1e9 7;dp[0] dp[1] 1;dp[2] 2;for(int i 3;i<n…

白话机器学习笔记(一)学习回归

最小二乘法 定义模型 表达式&#xff1a; f θ ( x ) θ 0 θ 1 x f_\theta(x)\theta_0\theta_1x fθ​(x)θ0​θ1​x &#xff08;常用 θ \theta θ表示未知数、 f θ ( x ) f_\theta(x) fθ​(x)表示含有参数 θ \theta θ并且和变量 x x x相关的函数&#xff09; 目标…

Vue中TodoLists案例_底部统计

与上一篇Vue中TodoList案例_删除有俩个文件变化了 App.vue&#xff1a;向儿子组件MyFooter传递参数todos <template><div id"root"><div class"todo-container"><div class"todo-wrap"><MyHeader :addTodo"add…

Qt 第一讲

登录框设置 #include "zuoye.h" #include "ui_zuoye.h"Zuoye::Zuoye(QWidget *parent): QWidget(parent), ui(new Ui::Zuoye) {ui->setupUi(this);//界面this->resize(540,420); //设置尺寸this->setFixedSize(540,420);//固定尺寸this->setS…