VAE是Diffusion的基础,在其中将输入的图片数据编码到潜在空间后再解码出来。
略显复杂,博主结合李宏毅视频、网上一些讲解以及自己的理解将其总结如下:
一、什么是VAE
VAE(变量自编码器)最早在以上两篇文章被提出。
VAE与自编码器类似
包括从原始的数据将其编码到潜在空间(隐藏表示空间,维度更低)中的变量z、以及将变量z还原到原来的空间x的解码器,不同的是,它是对分布的均值和标准差进行估计。
二、为什么要VAE
如果每个图像是空间中的一个向量,那么如果能够估计出这个向量的分布,那么就可以根据这个分布来采样出你想要的图片。
使用模型去预测Z的均值和方差
由于模型自己去学习均值和方差,为了防止模型将方差降为0,必须对方差做一个限制,这里的方差是:
所以,当等于0时,方差是1,此时loss最低,所以就不会将方差学习到1
上述推导中,在对Z的积分时,X是常数,所以里面的积分是1,logP(x)只是个系数
而KL散度是衡量两个部分的相似程度,是一个大于等于0的值(当二者分布完全一样时,log1=0, KL=0)
这个lower bound又可以进行拆解:
拆解成一个负的KL散度,这个q(z|x)是从一个网络进行估计出来的,这个网络从X估计z|x的分布的均值和方差
首先要让根据x采样产生的z的分布接近正态分布,然后再让z重新恢复的x越接近x越好(自编码器在做的事),最终这两项就是VAE的损失函数
VAE存在的问题,它只是对数据分布的模仿(线性重组),没法产生新的数据: