VAE模型简析和精要(原理和代码)

news/2025/1/21 10:23:57/文章来源:https://www.cnblogs.com/myleaf/p/18682945

1. 前言

这篇博客主要用于记录VAE的原理部分。
一方面便于日后自己的温故学习,另一方面也便于大家的学习和交流。
如有不对之处,欢迎评论区指出错误,你我共同进步学习!

图均引用自4部分的博客!!!!!!!

2. 正文

这篇博客集各博客之长,比较简洁易懂:因为有的博客交代清楚了原理,但损失函数部分比较迷惑,有的是公式比较清晰,但原理比较迷惑,我从我个人的角度,把我认为比较直观的地方做一个总结。
AEAuto-Encoder)自编码器
VAEVariational Auto-Encoder)变分自编码器
变分在哪里?
image

2.1 整体结构

编码器就是想把一个物体投到隐空间,相当于编码的过程,提取输入的特征,用向量的形式表征出来,便于运算。

普通编码器的结构:
image
VAE的结构:
image

2.2 主要目的

假设任何人像图片都可以由表情、肤色、性别、发型等几个特征的取值来唯一确定,那么我们将一张人像图片输入自动编码器后将会得到这张图片在表情、肤色等特征上的取值的向量X’,而后解码器将会根据这些特征的取值重构出原始输入的这张人像图片。
image
但如果输入蒙娜丽莎的照片,将微笑特征设定为特定的单值(相当于断定蒙娜丽莎笑了或者没笑)显然不如将微笑特征设定为某个取值范围(例如将微笑特征设定为x到y范围内的某个数,这个范围内既有数值可以表示蒙娜丽莎笑了又有数值可以表示蒙娜丽莎没笑)更合适,于是:
image
就可以把确定的事件描述为概率分布:
image
然后最后再采样得到所谓的latent变量Z
image

2.3 损失函数

再来看一下网络结构:
image
vae的loss函数为两项,重构损失(reconstruct loss)以及kl散度正则项(kl loss),分别对应模型训练过程希望达成的两个目的。
image

2.3.1

重构损失(reconstruct loss)希望vae生成的结果和输入之间的差异比较小。

2.3.2

kl散度正则项(kl loss)希望编码器生成的隐变量尽可能符合标准正态分布。
为什么呢?详情请查看其他博客的公式推导,因为本文主打一个简洁,公式就不再赘述。
image
大概也就是下面这个图:
image

2.4 代码实现

这是pytorch里面的代码实现过程:

class VAE(nn.Module):def __init__(self):super(VAE, self).__init__()self.fc1 = nn.Linear(784, 400)self.fc21 = nn.Linear(400, 20)self.fc22 = nn.Linear(400, 20)self.fc3 = nn.Linear(20, 400)self.fc4 = nn.Linear(400, 784)def encode(self, x):h1 = F.relu(self.fc1(x))return self.fc21(h1), self.fc22(h1)def reparameterize(self, mu, logvar):std = torch.exp(0.5*logvar)eps = torch.randn_like(std)return mu + eps*stddef decode(self, z):h3 = F.relu(self.fc3(z))return torch.sigmoid(self.fc4(h3))def forward(self, x):mu, logvar = self.encode(x.view(-1, 784))z = self.reparameterize(mu, logvar)return self.decode(z), mu, logvar

给出简单的计算图:
image
大家对比代码和计算图一起食用,效果更佳!
注意:reparam的代码部分和图的部分对应于我之前的结构图的这个部分:
image

3. 后记

这篇博客点到为止,日后我会继续补充,保证你看完后大概明白其原理而不会像其他博客一样一头雾水,因为笔者把很多博客的精华都提炼出来了。
zsy 2025.1.21

4. Acknowledge

本文参考的博客如下:
https://zhuanlan.zhihu.com/p/64485020
https://zhuanlan.zhihu.com/p/578619659
https://zhuanlan.zhihu.com/p/345360992
https://blog.csdn.net/A2321161581/article/details/140632339
下面这篇博客写的非常详细:
https://spaces.ac.cn/archives/5253

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

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

相关文章

有效提高BT下载速度:Tracker 正确的使用知识

前言BT下载对 DHT 和 Tracker 是非常依赖,然而网上有不少的 Tracker 列表项目,每次更新都要全部添加一遍,显然很麻烦。那么就需要一个每次可以一键更新的列表页面,每天自动获取热门 Tracker 列表项目,去重复后制作成一个 Tracker 列表合集。这样你不需要去一个个添加 Trac…

通过sqlserver添加修改系统管理员账号.120510

一,思路: 在其他服务器B,通过sa账号远程登录需增加/修改系统管理员账号的服务器A,用sqlserver的xp_cmdshell功能,模拟cmd通过net user命令进行添加或者修改系统管理员账号。 特别提示:此解决方案只适用于服务器没有加域且忘记管理员密码的用户使用,请不要作为非法用途!…

MySQL架构总览_查询执行流程_SQL解析顺序

目录MySQL 架构总览查询执行流程连接处理结果SQL 解析顺序准备工作FROMWHEREGROUP BYHAVINGSELECTORDER BYLIMIT总结参考书籍 MySQL 架构总览 架构最好看图,再配上必要的说明文字。 下图根据参考书籍中一图为原本,再在其上添加上了自己的理解。从上图中我们可以看到,整个架构…

BAT批处理文件语法.061024

bat是dos下的批处理文件 .cmd是nt内核命令行环境的另一种批处理文件。 从更广义的角度来看,unix的shell脚本以及其它操作系统甚至应用程序中由外壳进行解释执行的文本,都具有与批处理文件十分相似的作用,而且同样是由专用解释器以行为单位解释执行,这种文本形式更通用的称谓…

AD中域用户密码策略不生效的解决方案.100301

每到一个月,AD就会提示修改密码,改就改吧,但是还提示一些乱七八糟的规则。 我把这些规则都禁用或是设为没有定义了,但还是报“不能和之前的0个密码相同”, 最后, 解决方案: 在域控制器服务器中: 运行以下指令: gpupdate /force好了。.zstitle { width: 280px; text-al…

金融波动率的多模型建模研究:GARCH族与HAR模型的Python实现与对比分析

金融资产波动率建模在现代金融工程中具有重要地位,其应用涵盖风险管理、衍生品定价和投资组合优化等核心领域。本文着重探讨三种主流波动率建模方法:广义自回归条件异方差模型(GARCH)、Glosten-Jagannathan-Runkle-GARCH模型(GJR-GARCH)以及异质自回归模型(HAR)。本文将系统阐…

「youlai-boot」入门篇:从0到1搭建 Java、Spring Boot、Spring Security 企业级权限管理系统

本文介绍了如何使用 Java 和 Spring Boot 3,从零开始构建开源的 youlai-boot 企业级权限管理系统,涵盖 MySQL、Redis 整合及 Spring Security,适合前端开发者和后端初学者。🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-u…

SQL Server 2005部署备份任务.120308

环境:SQL Server 2005 任务: 1,每日凌晨1点给本地sql server做本地完整备份,且只保留7天的本地备份; 2,每日凌晨5点将本地的备份打包上传到存储服务器。 思路: 1,sql server2005不支持SQL Server2000的sqlmaint命令,所以,需要通过数据库维护计划进行备份,而不能一步…

[每日 B] Kevin and Geometry

前言 想着能做的题也不多, 直接当每日一练的形式写就好了 心态放平, 冷静利用时间 思路 转化题意 考虑一个等腰梯形的性质朴素的想法是, 枚举 \(b\) , 枚举 \(c < b\) , 然后计算是否有对应的 \(a\) 满足 \(\exists a, \exists a + 2c\) , 特判 \(c = 0\) 这样直接爆炸, 考虑…

【译】调查并确定 Windows 运行速度变慢问题

我最近注意到,我的 Windows 7 家用笔记本电脑运行速度比平时要慢。系统似乎在磁盘 I/O 上花了很多时间。当我查看任务管理器时,我发现笔记本电脑的缓存磁盘数据量大约只有平时的 五分之一,但问题的原因并不明显。 我的工作之一是性能专家——要调查各种日常或深层次的性能问…

SQLServer2005恢复Master库.110509

master库对于SQLServer来说,是很重要的系统数据库,保存着所有Sqlserver的用户信息、数据库信息等,当数据库崩溃时,master数据库的恢复成功与否起着重要的作用。这就跟Oracle的System表空间一样,非常的重要。 备份数据前期准备: (1)在备用机准备好和生产机器一样的sql20…

legged-robot关于locomotion、Navigation任务主要文章速览

0. 前言 目前legged robot包括locomotion(怎么走)、navigation(往哪走)、人形机器人的whole body control以及基于机械臂的manipulation的任务。 本文章特此记录 一方面便于日后自己的温故学习,另一方面也便于大家的学习和交流。 如有不对之处,欢迎评论区指出错误,你我共…