首页 > 其他分享 >VAE模型简析和精要(原理和代码)

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

时间:2025-01-21 10:21:37浏览次数:1  
标签:编码器 nn self 博客 VAE 简析 logvar 精要

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*std

    def 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

标签:编码器,nn,self,博客,VAE,简析,logvar,精要
From: https://www.cnblogs.com/myleaf/p/18682945

相关文章

  • 初始JavaEE篇 —— 快速上手 SpringBoot
    找往期文章包括但不限于本期文章中不懂的知识点:个人主页:我要学编程程(ಥ_ಥ)-CSDN博客所属专栏:JavaEE目录SpringBoot相关介绍与解惑 SpringBoot项目的创建 通过官方提供的网页来创建通过IDEA来创建SpringBoot项目的介绍pom.xml文件项目目录介绍第一个Hel......
  • 【JavaEE进阶】SpringMVC 响应
    目录......
  • VQVAE思路+代码讲解
    VQVAE本文转自:https://zhuanlan.zhihu.com/p/633744455https://zhuanlan.zhihu.com/p/640000410我们知道了VQ-VAE是怎么生成离散编码的。VQ-VAE的编码器其实不会显式地输出离散编码,而是输出了多个「假嵌入」$z_e(x)$。之后,VQ-VAE对每个$z_e(x)$在嵌入空间里找最近邻,得到真正的......
  • JavaEE初阶——计算机工作原理
    一、什么是JavaEE JavaEE(JavaPlatform,EnterpriseEdition)是sun公司(2009年4月20日甲骨文将其收购)推出的企业级应用程序版本。这个版本以前称为J2EE。能够帮助我们开发和部署可移植、健壮、可伸缩且安全的服务器端 Java应用程序。JavaEE是在JavaSE的基础上构建的,它提供......
  • 基于ssm的游戏购买下载平台(有报告)。Javaee项目,ssm项目。
    演示视频:基于ssm的游戏购买下载平台(有报告)。Javaee项目,ssm项目。项目介绍:采用M(model)V(view)C(controller)三层体系结构,通过Spring+SpringMvc+Mybatis+Jsp+Maven来实现。MySQL数据库作为系统数据储存平台,实现了基于B/S结构的Web系统。系统设计思想一个成功......
  • 变分推断(VI)、随机梯度变分推断(SGVI/SGVB)、变分自编码器(VAE)串讲
    参考资料:VI参考:PRMLChapter10.SGVI原文:Auto-EncodingVariationalBayes--Kingma.VAE参考1:TutorialonVariationalAutoencoders--CARLDOERSCH.VAE参考2:StanfordUniversityCS236:DeepGenerativeModels.泛函和变分法本章主要是了解:"变分"这个名称是怎么来的。......
  • 【金融+数字化转型】战略篇:国内银行业数字化转型简析
    当前,数字化浪潮已经成为我国经济发展的重要引擎,新兴数字技术的迅猛发展正以前所未有的广度和深度重塑着各行业发展格局。银行业无可避免地置身于这场深刻变革,数字化转型已不再是银行业可有可无的选择,而是关乎其生存与长远发展的必然选择。“十四五”以来,金融管理部门发布了一系列......
  • Javaer开发环境的搭建(个人喜好向)
    前言我们进入到新的工作环境,或者电脑重新安装系统后,总要重新配置开发环境,这时候需要四处搜来搜去的就很麻烦了,所以在此做一个笔记文件编辑器个人习惯使用VisualStudioCode大文件查看(比如看1GB以上的日志文件)可以使用EmEditorJavaJDK下载个人使用更习惯OpenJDK,可以在清......
  • GaussDB数据库中逻辑对象关系简析
    初次接触openGauss或GaussDB数据库的逻辑对象,被其中的表空间、数据库、schema和用户之间的关系,以及授权管理困惑住了,与熟悉的MySQL数据库的逻辑对象又有明显的不同。本文旨在简要梳理下GaussDB数据库逻辑对象之间的关系,以加深理解。1、GaussDB数据库逻辑对象1.1表空间、Databas......
  • 深度学习笔记——dVAE(DALL·E的核心部件)
    详细介绍DALL·E的核心部件之一——dVAE,在VQ-VAE的基础上使用Gumbel-Softmax实现采样,用于图像生成。文章目录前情提要VAEVQ-VAEVAEvs.VQ-VAE区别不可导问题及解决方法dVAEVQ-VAE和dVAE的对比背景:VQ-VAE的停止梯度策略局限性dVAE的结构dVAE引入Gumbel-Sof......