今天跟你们说一说VAE模型相关的原理,首先咱们从判别模型和生成模型定义开始提及:网络
判别式模型:已知观察变量X和隐含变量z,它对p(z|X)进行建模,它根据输入的观察变量X获得隐含变量z出现的可能性。函数
在图像模型中,好比根据原始图像推测图像具有的一些性质,例如根据数字图像推测数字的名称等等图像分类问题。学习
生成式模型:与判别式模型相反,它对p(X|z)进行建模,输入变量是隐含变量,输出是观察变量的几率。编码
在图像中,一般是输入图像具有的性质,输出是性质对应的图像。spa
生成式模型一般用于解决以下问题:3d
1.构建高维、复杂几率分布,2.数据缺失,3.多模态输出,4.真实输出模型,5.将来数据预测,等系列问题code
VAEblog
在经典的自编码机中,编码网络把原始图像编码卷积成向量,解码网络则可以将向量解码成原始图像,经过使用尽量多的图像来训练网络,若是保存了某张图像的编码向量,那么就可以随时用解码组建来重建该图像。变量
那么,问题就来了,潜在向量除了从已有图像中编码获得,可否凭空创造出这些潜在的向量来呢? 咱们能够这样作,在编码网络中,增长一个约束,使得编码网络所生成的潜在向量大致上服从单位高斯分布。那么,解码器通过训练以后,能是可以解码服从单位高斯分布的解码器了,因而咱们只须要从单位高斯分布中菜样出一个潜在向量,并将其传到解码器中便可。原理
在VAE中,假定认为输入数据的数据集D(显示变量)的分布彻底有一组隐变量z操控,而这组隐变量之间相互独立并且服从高斯分布,那么VAE让encoder去学习输入数据的隐变量模型,也就是去学习这组隐变量的高斯几率分布的参数均值和方差,而隐变量z就能够从这组分布参数的正态分布中采样获得z~N,再经过decoder对z隐变量进行解码来重构输入,本质上是实现了连续的,平滑的潜在空间表示。
对于目标函数,偏差项精度与潜在变量在单位高斯分布上的契合程度,包括两部分的内容:一、生成偏差,用以衡量网络在重构图像精度的均方偏差,二、潜在偏差,用以衡量潜在变量在单位高斯分布上契合程度的KL散度,总的目标函数以下:
假设如今有一个样本集中两个几率分布p,q,其中p为真实分布,q为非真实分布,那么,按照真实分布p来衡量识别一个样本所需的编码长度的指望为:
若是采用错误的分布q来表示来自真实分布p的平均编码长度,则应该是:
此时,就将H(p,q)称之为交叉熵。
对于KL散度,又称为相对熵,就是两个几率分布P和Q差异的非对称性度量。典型状况下,P表示数据的真实分布,Q表示数据的理论分布,那么D(P||Q)的计算以下:
KL散度不是对称的,并不知足距离的性质,即D(P||Q) != D(Q||P)。为了解决对称问题,咱们引入JS散度。
JS散度度量了两个几率分布的类似度,基于KL散度的变体,解决了KL散度的非对称的问题,通常的,JS散度是对称的,其取值是0到1之间,计算以下:
明白了度量以后,在VAE模型中并无真正的用z~N来采样获得z变量,由于采样以后,没法进行求导。其作法是先采样一个标准高斯分布(正态分布),而后经过变换获得z~N分布,这样就可以对参数进行正常的求导计算了:
VAE遵循 编码-解码 的模式,能直接把生成的图像同原始图像进行对比,不足的是因为它是直接均方偏差,其神经网络倾向于生成模糊的图像。