deep generative model stanford lecture note3 --- latent variable

1 Introduction

自回归模型随着gpt的出现取得很大的成功,还是有很多工程上的问题并不是很适合使用自回归模型:
1)自回归需要的算力太大,满足不了实时性要求:例如在自动驾驶的轨迹预测任务中,如果要用纯自回归的世界模型,耗时太大;
2)要求数据天然有时序性:很多图像任务并没有严格的序列生成的要求;
这个部分开始用隐变量的方式来进行建模。

2 特征提取和线形回归

自动驾驶和机器人中的很多任务,是通过感知的环境输入, 然后进行特征提取,最后用线形回归来预测和生成指令。

在这里插入图片描述
但是这种方式因为采用了非常简单的单高斯分布来估计指令,这个时候有几种提高的方式:
1)提高特征的表达能力
1.1)如果特征提取的模型(一般是transformer)记忆力足够强大,哪怕后面接了单峰高斯估计也能有一个比较好的拟合效果;直觉来说,就是把所有的情况都记住了。高质量的特征能够在一定程度上“预处理”复杂性。
1.2)采用anchor based的query来生成不同的feature,降低拟合难度。
2)提高概率分布的表达能力
2.1)采用混合高斯叠加的概率分布,来生成复杂的概率分布。
因为提高特征表达能力往往是多模态相关的工作,这里我门进行跳过,更加关注通过提高概率分布的表达能力这个方面。

3 vae 模型

z是隐变量,需要用模型构建z存在的情况下 p ( x ∣ z , θ ) p(x|z,\theta) p(xz,θ)的概率。
在这里插入图片描述
按照note2的内容,loss设计的时候,满足极大似然就可以 l o g P θ ( x ) logP_{\theta}(x) logPθ(x)
现在的问题是,每种z都有一定的概率能生成x。可以采用普查的方式,或者采用抽样的方式

l o g P θ ( x ) = 1 D ( z ) ∑ z ∈ D P ( x , z ; θ ) \begin{aligned} logP_{\theta}(x)=\frac{1}{D(z)}\sum_{z \in D}P(x,z;\theta) \end{aligned} logPθ(x)=D(z)1zDP(x,z;θ)

因为z本身是连续分布,采用普查的方式来采样无穷个 z j z^j zj显然是不现实的。我们只需要将和x相关性较高的z(重要性采样)找出来就好。
l o g P θ ( x ) = l o g ∑ j = 1 k q ( z ( j ) ) q ( z ( j ) ) P ( x , z ; θ ) = l o g E x − q ( z ) P ( x , z ; θ ) q ( z ( j ) ) \begin{aligned} logP_{\theta}(x) & = log\sum_{j=1}^k \frac{q(z^{(j)})}{q(z^{(j)})} P(x,z;\theta) \\ & = logE_{x-q(z)}\frac{P(x,z;\theta)}{q(z^{(j)})} \end{aligned} logPθ(x)=logj=1kq(z(j))q(z(j))P(x,z;θ)=logExq(z)q(z(j))P(x,z;θ)

在这里插入图片描述
对于log这种凸函数,满足 l o g E [ x ] > E [ l o g ( x ) ] logE[x]>E[log(x)] logE[x]>E[log(x)],可以对上面这个式子进行变换
l o g P θ ( x ) = l o g E x − q ( z ) P ( x , z ; θ ) q ( z ( j ) ) ≥ E x − q ( z ) l o g P ( x , z ; θ ) q ( z ( j ) ) = ∑ j = 1 k q ( z ( j ) ) l o g P ( x , z ; θ ) q ( z ( j ) ) = ∑ j = 1 k ( q ( z ( j ) ) l o g P ( x , z ; θ ) − q ( z ( j ) ) l o g q ( z ( j ) ) ) = E L B O \begin{aligned} logP_{\theta}(x) & = logE_{x-q(z)}\frac{P(x,z;\theta)}{q(z^{(j)})} \\ & \ge E_{x-q(z)}log\frac{P(x,z;\theta)}{q(z^{(j)})} \\ & = \sum_{j=1}^kq(z^{(j)})log\frac{P(x,z;\theta)}{q(z^{(j)})} \\ & = \sum_{j=1}^k(q(z^{(j)})logP(x,z;\theta)-q(z^{(j)})logq(z^{(j)}))=ELBO \end{aligned} logPθ(x)=logExq(z)q(z(j))P(x,z;θ)Exq(z)logq(z(j))P(x,z;θ)=j=1kq(z(j))logq(z(j))P(x,z;θ)=j=1k(q(z(j))logP(x,z;θ)q(z(j))logq(z(j)))=ELBO

现在问题变得很简单了,我们需要搞清楚 q ( z ) q(z) q(z)的概率分布q(z)概率分布可以理解成状态变量x通过网络提取出来的特征
但是这里可能存在一个问题,我们的encoder并没有很好的把z的概率分布估计好。也就是说重要的z可能给的概率不够高,不重要的z可能给的概率太高了,所以我们还是要看一下encoder到底拟合的怎么样。显然这里就用KL散度来描述。
D K L ( q ( z ) ∣ ∣ p ( z ∣ x ; θ ) ) = ∑ z q ( z ) l o g q ( z ) p ( z ∣ x ; θ ) = ∑ z q ( z ) l o g q ( z ) p ( z , x ; θ ) / p ( x ; θ ) = ∑ z ( q ( z ) l o g q ( z ) + q ( z ) l o g p ( x ; θ ) − q ( z ) l o g p ( x , z ; θ ) ) = ∑ z q ( z ) l o g p ( x ; θ ) − ∑ z ( q ( z ) l o g q ( z ) − q ( z ) l o g p ( x , z ; θ ) ) = l o g p ( x ; θ ) − ∑ j = 1 k ( q ( z ( j ) ) l o g P ( x , z ; θ ) − q ( z ( j ) ) l o g q ( z ( j ) ) ) \begin{aligned} D_{KL}(q(z)||p(z|x;\theta))&=\sum_z q(z)log\frac{q(z)}{p(z|x;\theta)} \\ & = \sum_z q(z)log\frac{q(z)}{p(z,x;\theta)/p(x;\theta)} \\ & = \sum_z (q(z)logq(z)+q(z)logp(x;\theta)-q(z)logp(x,z;\theta)) \\ & = \sum_z q(z)logp(x;\theta) - \sum_z (q(z)logq(z)-q(z)logp(x,z;\theta)) \\ & = logp(x;\theta)- \sum_{j=1}^k(q(z^{(j)})logP(x,z;\theta)-q(z^{(j)})logq(z^{(j)})) \end{aligned} DKL(q(z)∣∣p(zx;θ))=zq(z)logp(zx;θ)q(z)=zq(z)logp(z,x;θ)/p(x;θ)q(z)=z(q(z)logq(z)+q(z)logp(x;θ)q(z)logp(x,z;θ))=zq(z)logp(x;θ)z(q(z)logq(z)q(z)logp(x,z;θ))=logp(x;θ)j=1k(q(z(j))logP(x,z;θ)q(z(j))logq(z(j)))

这个公式就是我们上面那个公式,也证明了只有我们的encoder能充分的将z的概率分布学习好的时候,才能保证最大似然估计的更好。
在这里插入图片描述
现在我们来更新一下极大似然
l o g P θ ( x ) = ∑ z ( q ( z ∣ x , ϕ ) l o g P ( x , z ; θ ) − q ( z ∣ x , ϕ ) l o g q ( z ∣ x , ϕ ) ) − D K L ( q ( z ) ∣ ∣ p ( z ∣ x ; θ ) ) \begin{aligned} logP_{\theta}(x) & = \sum_{z}(q(z|x,\phi)logP(x,z;\theta)-q(z|x,\phi)logq(z|x,\phi)) - D_{KL}(q(z)||p(z|x;\theta))\\ \end{aligned} logPθ(x)=z(q(zx,ϕ)logP(x,z;θ)q(zx,ϕ)logq(zx,ϕ))DKL(q(z)∣∣p(zx;θ))

KL散度可以积分直接得到解析解,这里直接给出公式的结果
D K L ( q ϕ ( z ∣ x ) ∣ ∣ p ( z ) ) = D K L ( N ( μ , σ ) ∣ ∣ N ( 0 , 1 ) ) = 1 2 ∑ i ( σ i 2 + μ i 2 − 1 − l n σ i 2 ) \begin{aligned} D_{KL}(q_{\phi}(z|x)||p(z)) & = D_{KL}(\mathcal{N}(\mu, \sigma)||\mathcal{N}(0, 1)) \\ & = \frac{1}{2}\sum_i(\sigma_i^2+\mu_i^2-1-ln\sigma_i^2) \end{aligned} DKL(qϕ(zx)∣∣p(z))=DKL(N(μ,σ)∣∣N(0,1))=21i(σi2+μi21lnσi2)

对于ELBO,这里只能采用mento carlo的方式进行采样计算
z ( k ) = μ ϕ ( x ) + σ ϕ ( x ) ϵ , ϵ ∼ N ( 0 , 1 ) z^{(k)}=\mu_{\phi}(x)+\sigma_{\phi}(x)ϵ, ϵ \sim \mathcal{N}(0, 1) z(k)=μϕ(x)+σϕ(x)ϵ,ϵN(0,1)

那么极大似然可以更新成
l o g P θ ( x ) = 1 K ∑ k l o g P ( x , z ( k ) ; θ ) − l o g q ( z ( k ) ∣ x ; ϕ ) ) − D K L ( q ( z ) ∣ ∣ p ( z ∣ x ; θ ) ) \begin{aligned} logP_{\theta}(x) & =\frac{1}{K} \sum_{k}logP(x,z^{(k)};\theta)-logq(z^{(k)}|x;\phi)) - D_{KL}(q(z)||p(z|x;\theta))\\ \end{aligned} logPθ(x)=K1klogP(x,z(k);θ)logq(z(k)x;ϕ))DKL(q(z)∣∣p(zx;θ))

最后我们再来看一下这个公式,这个也解答了我们再线形回归中的问题。
1)如果我们的隐变量估计的很准确(特征提取)的越准确,越有助于我们进行参数似然估计;
2)我们从z变量中多采样几个(采样k个隐变量,类似于我们采用anchor-based 的query),越有助于我们更准确的进行参数似然估计;
3)KL散度则是encoder的正则化,确保真实后验 p ( z ∣ x ; θ ) p(z|x;\theta) p(zx;θ)和先验分布一致;在线形回归任务中,我门经常对提取的特征进行特征重建,也达到了类似的效果。

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

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

相关文章

变形金刚多元宇宙

涉及的公司: 日本Takara公司 Diaclone可变形机器人玩具 Microman可变形机器人玩具 孩之宝 孩之宝与Takara签订协议后,孩之宝开始使用Takara的专利进行研发。 漫威 为了推广玩具,1984年5月,孩之宝玩具与漫威《变形金刚》漫画试探…

Day33【AI思考】-分层递进式结构 对数学数系的 终极系统分类

文章目录 **分层递进式结构** 对数学数系的 **终极系统分类**总览**一、数系演化树(纵向维度)**数系扩展逻辑树**数系扩展逻辑** **二、代数结构对照表(横向维度)**数系扩展的数学意义 **三、几何对应图谱(空间维度&am…

蓝桥杯python基础算法(2-1)——排序

目录 一、排序 二、例题 P3225——宝藏排序Ⅰ 三、各种排序比较 四、例题 P3226——宝藏排序Ⅱ 一、排序 (一)冒泡排序 基本思想:比较相邻的元素,如果顺序错误就把它们交换过来。 (二)选择排序 基本思想…

对象的实例化、内存布局与访问定位

一、创建对象的方式 二、创建对象的步骤: 一、判断对象对应的类是否加载、链接、初始化: 虚拟机遇到一条new指令,首先去检查这个指令的参数能否在Metaspace的常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化…

OSCP - Proving Grounds - Roquefort

主要知识点 githook 注入Linux path覆盖 具体步骤 依旧是nmap扫描开始,3000端口不是很熟悉,先看一下 Nmap scan report for 192.168.54.67 Host is up (0.00083s latency). Not shown: 65530 filtered tcp ports (no-response) PORT STATE SERV…

Python + Tkinter + pyttsx3实现的桌面版英语学习工具

Python Tkinter pyttsx3实现的桌面版英语学习工具 在多行文本框输入英文句子,双击其中的英文单词,给出英文读音和中文含义和音标。 本程序查询本地词典数据。通过菜单栏"文件"->"打开词典编辑器"进入编辑界面。 词典数据存储…

实验六 项目二 简易信号发生器的设计与实现 (HEU)

声明:代码部分使用了AI工具 实验六 综合考核 Quartus 18.0 FPGA 5CSXFC6D6F31C6N 1. 实验项目 要求利用硬件描述语言Verilog(或VHDL)、图形描述方式、IP核,结合数字系统设计方法,在Quartus开发环境下&#xff…

17.3.4 颜色矩阵

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 17.3.4.1 矩阵基本概念 矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,类似于数组。 由…

音视频入门基础:RTP专题(8)——使用Wireshark分析RTP

一、引言 通过Wireshark可以抓取RTP数据包,该软件可以从Wireshark Go Deep 下载。 二、通过Wireshark抓取RTP数据包 首先通过FFmpeg将一个媒体文件转推RTP,生成RTP流: ffmpeg -re -stream_loop -1 -i input.mp4 -vcodec copy -an -f rtp …

【leetcode100】路径总和Ⅲ

1、题目描述 给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。 路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点…

解锁数据结构密码:层次树与自引用树的设计艺术与API实践

1. 引言:为什么选择层次树和自引用树? 数据结构是编程中的基石之一,尤其是在处理复杂关系和层次化数据时,树形结构常常是最佳选择。层次树(Hierarchical Tree)和自引用树(Self-referencing Tree…

python-leetcode-二叉树的层序遍历

102. 二叉树的层序遍历 - 力扣(LeetCode) # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right from coll…

c++可变参数详解

目录 引言 库的基本功能 va_start 宏: va_arg 宏 va_end 宏 va_copy 宏 使用 处理可变参数代码 C11可变参数模板 基本概念 sizeof... 运算符 包扩展 引言 在C编程中,处理不确定数量的参数是一个常见的需求。为了支持这种需求,C标准库提供了 &…

w191教师工作量管理系统的设计与实现

🙊作者简介:多年一线开发工作经验,原创团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹赠送计算机毕业设计600个选题excel文…

Vuex状态管理

1、Vuex 是什么? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 简单理解 Vuex可以帮我们管理全局的属性,并且是是响应式的&…

DBASE DBF数据库文件解析

基于Java实现DBase DBF文件的解析和显示 JDK19编译运行,实现了数据库字段和数据解析显示。 首先解析数据库文件头代码 byte bytes[] Files.readAllBytes(Paths.get(file));BinaryBufferArray bis new BinaryBufferArray(bytes);DBF dbf new DBF();dbf.VersionN…

亚博microros小车-原生ubuntu支持系列:20 ROS Robot APP建图

依赖工程 新建工程laserscan_to_point_publisher src/laserscan_to_point_publisher/laserscan_to_point_publisher/目录下新建文件laserscan_to_point_publish.py #!/usr/bin/env python3import rclpy from rclpy.node import Node from geometry_msgs.msg import PoseStam…

冷启动+强化学习:DeepSeek-R1 的原理详解——无需监督数据的推理能力进化之路

本文基于 DeepSeek 官方论文进行分析,论文地址为:https://github.com/deepseek-ai/DeepSeek-R1/blob/main/DeepSeek_R1.pdf 有不足之处欢迎评论区交流 原文翻译 在阅读和理解一篇复杂的技术论文时,逐字翻译是一个重要的步骤。它不仅能帮助我们准确把握作者的原意,还能为后续…

优选算法的灵动之章:双指针专题(一)

个人主页:手握风云 专栏:算法 一、双指针算法思想 双指针算法主要用于处理数组、链表等线性数据结构中的问题。它通过设置两个指针,在数据结构上进行遍历和操作,从而实现高效解决问题。 二、算法题精讲 2.1. 查找总价格为目标值…

数据结构之栈和队列(超详解)

文章目录 概念与结构栈队列 代码实现栈栈是否为空,取栈顶数据、栈的有效个数 队列入队列出队列队列判空,取队头、队尾数据,队列的有效个数 算法题解有效的括号用队列实现栈用栈实现队列复用 设计循环队列数组结构实现循环队列构造、销毁循环队…