VAE详解及PyTorch代码

news2024/11/24 18:29:13

三大有名的生成模型VAE、GAN以及Diffusion Model

其余两篇

看了网上的一些博客,大多都写到了重点,也就是后面的公式推导部分,可是大部分只有推导过程,很少有讲明白为什么要这么假设,我看的时候内心不断有个疑问:这些所有推导的第一个式子是怎么来的?为什么所有的推导都是要证明第一个式子?下面我们从生成模型的源头来理解这个问题,就茅塞顿开了

什么是生成模型?

首先要明白什么是生成模型?比如我们有一堆数据点 X X X,他的真实分布是 P g t ( X ) P_{gt}(X) Pgt(X),生成模型的目的就是去学习一个模型 M M M,将一些随机采样的噪声(通常为高斯噪声)输入到此模型中,使得此模型的输出为 X X X中的数据,即模型 M M M的分布 P P P去尽可能的接近数据的真实分布 P g t ( X ) P_{gt}(X) Pgt(X),或者说让模型 M M M能够尽可能地生成数据点 X X X中的数据

在这里插入图片描述

生成模型要做什么

如上所述,生成模型就是要去接近数据点(数据集) X X X的真实分布,也就是说我们要最大化所建模的概率分布

P ( X ) = ∫ P ( X ∣ z ; θ ) P ( z ) d z = ∫ P ( X ∣ z ) P ( z ) d z P(X) = \int P(X|z;\theta)P(z)dz = \int P(X|z)P(z)dz P(X)=P(Xz;θ)P(z)dz=P(Xz)P(z)dz

这里的 θ \theta θ就是模型的参数, z z z就是随机采样的噪声, P ( X ∣ z ; θ ) P(X|z;\theta) P(Xz;θ) X X X的后验概率分布,通常来说 P ( X ∣ z ; θ ) P(X|z;\theta) P(Xz;θ) P ( z ) P(z) P(z)都是高斯分布

VAE的目标函数

实际上,对于大多数的 z z z P ( X ∣ z ) P(X|z) P(Xz)的取值都接近0,因此VAE的核心就是不断地进行采样,直到可能产生数据点 X X X为止,这显然会让生成过程变得困难/复杂

在真正实现时,作者构建了一个新的函数 Q ( z ∣ X ) Q(z|X) Q(zX),给定数据集中的一个数据 X X X Q ( z ∣ X ) Q(z|X) Q(zX)可以给我们一个 z z z的分布,这个给定的分布就更加容易产生出 X X X了,在 Q ( z ∣ X ) Q(z|X) Q(zX)后的 z z z的范围比先验 P ( z ) P(z) P(z)要小得多,因此我们将 E z ∼ Q P ( X ∣ z ) E_{z\sim Q}P(X|z) EzQP(Xz) P ( X ) P(X) P(X)关联起来,如下
E z ∼ Q P ( X ∣ z ) = ∫ P ( X ∣ z ) Q ( z ) d z E_{z\sim Q}P(X|z) = \int P(X|z)Q(z)dz EzQP(Xz)=P(Xz)Q(z)dz
这个式子是不是和上面那个很相似?只是讲 P ( z ) P(z) P(z)替换为了 Q ( z ) Q(z) Q(z),这种替换能够使得我们的随机采样变得不是那么的随机(即,相对于 P ( z ) P(z) P(z) Q ( z ) Q(z) Q(z)更加具体了采样的范围,而不是无脑采样…)

在原文中,也有提到 E z ∼ Q P ( X ∣ z ) E_{z\sim Q}P(X|z) EzQP(Xz)是求解 P ( X ) P(X) P(X)的关键: The relationship between E z ∼ Q P ( X ∣ z ) E_{z\sim Q}P(X|z) EzQP(Xz) and P ( X ) P(X) P(X) is one of the cornerstones of variational Bayesian methods.

既然上面提到了 Q ( z ) Q(z) Q(z)的获取对生成 X X X至关重要,那如何去获得呢,作者用KL散度来构建 Q ( z ) Q(z) Q(z) P ( z ∣ X ) P(z|X) P(zX)之间的关系(在文中KL散度用符号 D \mathcal{D} D来表示)
D [ Q ( z ) ∣ ∣ P ( z ∣ X ) ] = E z ∼ Q [ log ⁡ Q ( z ) − log ⁡ P ( z ∣ X ) ] \mathcal{D}[Q(z)||P(z|X)] = E_{z\sim Q}[\log Q(z) - \log P(z|X)] D[Q(z)∣∣P(zX)]=EzQ[logQ(z)logP(zX)]

下面用Bayes公式来化简上述式子,将 P ( z ∣ X ) = P ( z ) P ( X ∣ z ) P ( X ) P(z|X)=\frac{P(z)P(X|z)}{P(X)} P(zX)=P(X)P(z)P(Xz)代替
D [ Q ( z ) ∣ ∣ P ( z ∣ X ) ] = E z ∼ Q [ log ⁡ Q ( z ) − log ⁡ P ( z ) P ( X ∣ z ) P ( X ) ] = E z ∼ Q [ log ⁡ Q ( z ) − log ⁡ P ( z ) − log ⁡ P ( X ∣ z ) + log ⁡ P ( X ) ] = E z ∼ Q [ log ⁡ Q ( z ) − log ⁡ P ( z ) − log ⁡ P ( X ∣ z ) ] + log ⁡ P ( X ) \begin{aligned} \mathcal{D}[Q(z)||P(z|X)] &= E_{z\sim Q}[\log Q(z) - \log \frac{P(z)P(X|z)}{P(X)}] \\ &= E_{z\sim Q}[\log Q(z) - \log P(z) - \log P(X|z) + \log P(X)] \\ &= E_{z\sim Q}[\log Q(z) - \log P(z) - \log P(X|z)] + \log P(X) \end{aligned} D[Q(z)∣∣P(zX)]=EzQ[logQ(z)logP(X)P(z)P(Xz)]=EzQ[logQ(z)logP(z)logP(Xz)+logP(X)]=EzQ[logQ(z)logP(z)logP(Xz)]+logP(X)

因为 log ⁡ P ( X ) \log P(X) logP(X)与变量 z z z无关,因此可以从期望中拿出,将上式继续整理得
log ⁡ P ( X ) − D [ Q ( z ) ∣ ∣ P ( z ∣ X ) ] = E z ∼ Q [ log ⁡ P ( z ) + log ⁡ P ( X ∣ z ) − log ⁡ Q ( z ) ] = E z ∼ Q [ log ⁡ P ( X ∣ z ) ] + E z ∼ Q [ log ⁡ P ( z ) − log ⁡ Q ( z ) ] = E z ∼ Q [ log ⁡ P ( X ∣ z ) ] − D [ Q ( z ) ∣ ∣ P ( z ) ] \begin{aligned} \log P(X) - \mathcal{D}[Q(z)||P(z|X)] &= E_{z\sim Q}[\log P(z) + \log P(X|z) - \log Q(z)] \\ &= E_{z\sim Q}[\log P(X|z)] + E_{z\sim Q}[\log P(z) - \log Q(z)] \\ &= E_{z\sim Q}[\log P(X|z)] - \mathcal{D}[Q(z) || P(z)] \end{aligned} logP(X)D[Q(z)∣∣P(zX)]=EzQ[logP(z)+logP(Xz)logQ(z)]=EzQ[logP(Xz)]+EzQ[logP(z)logQ(z)]=EzQ[logP(Xz)]D[Q(z)∣∣P(z)]

注意到这里的 Q ( z ) Q(z) Q(z)可以是任意的概率分布,但是为了让其有意义,使从其采样出的噪声更容易建模出 P ( X ) P(X) P(X),并最小化 D [ Q ( z ) ∣ ∣ P ( z ∣ X ) ] \mathcal{D}[Q(z)||P(z|X)] D[Q(z)∣∣P(zX)],我们让 Q ( z ) Q(z) Q(z)去依赖于 X X X,即得到下式
log ⁡ P ( X ) − D [ Q ( z ∣ X ) ∣ ∣ P ( z ∣ X ) ] = E z ∼ Q [ log ⁡ P ( X ∣ z ) ] − D [ Q ( z ∣ X ) ∣ ∣ P ( z ) ] \log P(X) - \mathcal{D}[Q(z|X)||P(z|X)] = E_{z\sim Q}[\log P(X|z)] - \mathcal{D}[Q(z|X) || P(z)] logP(X)D[Q(zX)∣∣P(zX)]=EzQ[logP(Xz)]D[Q(zX)∣∣P(z)]

上式就是VAE最核心的公式了

  • 等号左边: log ⁡ P ( X ) \log P(X) logP(X)是我们要最大化的项, P ( z ∣ X ) P(z|X) P(zX)描述了可能生成 X X X z z z的取值,当模型的建模能力足够时, D [ Q ( z ∣ X ) ∣ ∣ P ( z ∣ X ) ] \mathcal{D}[Q(z|X)||P(z|X)] D[Q(zX)∣∣P(zX)]可以看做0
  • 等号右边:可以通过梯度下降来优化,他更像是一个自编码器(AE),因为 Q ( z ∣ X ) Q(z|X) Q(zX) X X X编码到 z z z空间, P ( X ∣ z ) P(X|z) P(Xz) z z z解码重建出 X X X

未完…

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

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

相关文章

这篇文章详细介绍动态内存管理 ,让你醍醐灌顶【c语言】

文章目录动态内存函数mallocfreecallocrealloc常见的动态内存错误对NULL指针的解引用操作对动态开辟空间的越界访问对非动态开辟内存使用free释放使用free释放一块动态开辟内存的一部分对同一块动态内存多次释放动态开辟内存忘记释放(内存泄漏)练习柔性数…

物联网终端的信息保护

针对漏洞的恶意行为分析 我们共捕获到 4 种针对 UPnP 漏洞的利用行为 1,如表 4.7 所示。从中可以看出,这些漏洞均为远程 命令执行类漏洞。另外我们也发现,当漏洞出现在特定端口时,攻击者一般不会经过 UPnP 的发现阶段&#xff0c…

Moran指数分析

Moran指数分析 Moran指数(莫兰指数)是研究空间关系的一种相关系数值,比如研究中国31省市GDP之间是否具有空间相关关系。Moran指数通常分为两种,分别是全局Moran指数和local局部Moran指数。全局Moran指数用于分析整体上是否存在空…

概率分布到底有什么用?

1.1 要概率分布有什么用? 个人理解:每种概率分布对应描述了某种特定事件发生的规律,像是一个模板,只要某种事件符合该分布的要求,那么就可以用对应的概率分布计算此事件的概率 1.2 为什么非要确定一个分布?…

计算机组成原理复习题

一、选择题 一个节拍信号的宽度是指______。 A. 指令周期 B. 存储周期 C. 机器周期 D. 时钟周期 我的答案: D正确答案: D 3.3分 2. (单选题) 中断向量地址是______。 A. 子程序入口地址 B. 中断服务子程序出口地址 C. 中断返回地址 D. 中断服务子程序入口地址 我的答案: D正…

SpringCloudAlibaba、SpringCloud版本和SpringBoot版本适配

本文继SpringCloud版本和SpringBoot版本适配后,加入SpringCloudAlibaba组件版本适配! 官网链接:https://github.com/alibaba/spring-cloud-alibaba/wiki/

MySQL基本用法

一、数据库的基本操作: 1、启动数据库:net start mysql; 2、进入数据库:mysql -h localhost -u root -p; 3、关闭数据库服务:net stop mysql; 4、查看数据库:show databases; 5、新建数据库:create databa…

[vue element-ui]JAVA POST请求

01.前端 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><script type"text/javascript" src"js/jquery-3.4.1.min.js"></script><script type"text/javascript&qu…

Raft论文翻译(5.4.2)——安全性-提交之前term的日志entry

5.4.2 Committing entries from previous terms 提交之前term的日志entry As described in Section 5.3, a leader knows that an entry from its current term is committed once that entry is stored on a majority of the servers. If a leader crashes before committin…

linux 分析启动时服务时间消耗

工具systemd-analyze systemd-analyze是一个分析启动性能的工具&#xff0c;用于分析启动时服务时间消耗。 1 systemd-analyze使用 1.1 查看启动耗时 rootloongson-pc:/# systemd-analyze 1.2 查看每个服务的启动耗时 rootloongson-pc:/# systemd-analyze blame 1.3 显…

Docker安装配置运行Redis

本文前提是基于已安装Docker容器引擎。Ubuntu安装docker容器引擎_流沙QS的博客-CSDN博客 1.拉取redis镜像 sudo docker pull redis 2.创建文件挂载目录并进入到创建目录&#xff0c;下载官方的redis.conf配置文件 mkdir -p /home/geng/soft/redis wget http://download.re…

如何在每次辩论中都取得胜利,捍卫自己的权力-----苏格拉底产婆术

文章目录苏格拉底的产婆术四步法是&#xff1a;产婆术&#xff08;art of midwifery&#xff09;苏格拉底&#xff1a;认识你自己&#x1f338;I could be bounded in a nutshell and count myself a king of infinite space. 特别鸣谢&#xff1a;木芯工作室 、Ivan from Rus…

2022年度《中国数字安全能力图谱(精选版)》发布,中睿天下实力入选

近日&#xff0c;国内数字安全领域中立的第三方调研机构数世咨询正式发布《2022年度中国数字安全能力图谱&#xff08;精选版&#xff09;》&#xff08;以下简称能力图谱&#xff09;&#xff0c;中睿天下凭借领先的技术创新实力&#xff0c;成功入选上榜高级威胁防御能力者及…

照片如何加滤镜?一步一步教会你给图片加上滤镜

我们在外出游玩的时候&#xff0c;常常会拍摄一些好看的风景照或者是美食照&#xff0c;有时我们还会将这些不错的照片分享在社交平台上&#xff0c;相信这个时候你们在分享照片之前&#xff0c;都会先给照片添加滤镜&#xff0c;因为一个好的滤镜&#xff0c;不仅能够美化照片…

7的2022年终总结

7&的2022年终总结 文章目录7&的2022年终总结1、前言2、技术3、生活4、展望未来1、前言 2022年&#xff0c;终究是不平凡的一年。 2022年2月4日&#xff0c;中国农历大年初四&#xff0c;这一天&#xff0c;北京冬奥会将拉开大幕。 2022年3月份&#xff0c;疫情还未结束…

Linux小白入门经验

雄关漫道真如铁&#xff0c;而今迈步从头越。我们在单位工作的人都有一个梦想&#xff0c;那就是搞定所有的计算机难题&#xff0c;帮助公司完成更多的电脑维修、软件开发以及系统监测。随着互联网的深入发展&#xff0c;我们都在很努力的学习各种程序和系统&#xff0c;希望能…

20个python编码小技巧-推导式、翻转、排序、迭代器等等

本文分享一些 Python 技巧&#xff0c;它可以让你的代码更简洁、更高效。 1.列表推导式 li [x for x in range(10) if x % 2 0] print(li) # [0, 2, 4, 6, 8]li [i*2 if i%20 else i*3 for i in range(10)] print(li) # [0, 3, 4, 9, 8, 15, 12, 21, 16, 27]# 应用&#xf…

flutter 并不完美的登录完美验证功能

flutter 并不完美的登录完美验证功能前言一、文本输入功能二、验证提示功能三、业务部分总结前言 在一个APP 中&#xff0c;登录页面做为门户&#xff0c;很多时候&#xff0c;我们都需要写一个完善的登录验证页面&#xff0c;本篇文章将记录如何去封装一个并不算完美的登录验…

BurpSuite抓取App包,详细教程

BurpSuite抓取App包&#xff0c;详细教程1.工具准备2.手动代理模拟器3.修改BurpSuite代理4.测试最近有很多粉丝小伙伴反映自己不会使用BurpSuite抓取手机App的流量包&#xff0c;其实很简单&#xff0c;和Web基本是如出一辙的 1.工具准备 夜神模拟器 BurpSuite请自行准备环境…

CISP-DSG证书有效期多久?是否需要续证?

CISP-DSG证书有效期为3年。有效期结束后需向中国信息安全测评中心授权机构进行续证维持&#xff0c;并缴纳证书维持费。如超期半年以上需多交一年年金&#xff0c;以此累计。建议大家在证书到期前三个月提交材料进行续证。那么CISP-DSG续证流程是什么呢&#xff1f;以下是小编整…