VAE(Variational Auto-Encoder)

一、普通的auto-encoder

auto-encoder分为encoder,latent vector,decoder三个部分,通过encoder(全连接,卷积,RNNs等)将一些图片,语言等高维的数据映射到低维的数据,得到压缩后的或者说是降维后的表达,也就是latent vector。decoder一般来说与encoder对称的一个结构,当然也可以是另外的结构。但是实现的功能只有一个,就是将latent vector恢复成原始的图像,也就是一个生成时模型(generator),类似于GAN种也有生成式模型。
整个模型通过反向传播来进行实现,目标loss是输入的数据和生成数据的MSE(按像素/逐点)
在这里插入图片描述
**缺点:**auto encoder可以将数据降维,降维后的数据可以恢复成原来的图像,这样就可以认为降维后的数据完美的包含了原始数据的所有关键的特征,信息的损失有限,其实也就相当于一个压缩算法。但是,思考一下你会发现这个信息的提取和初始化特征有很大的关系,除了各个层的维度是确定的,其他的参数都是自动获取的,也就是说对于同一个数据集,每次从头开始重新训练得到特征会有非常大的差异。

应用:
作为压缩算法。
作为图像分割算法:重建时候的目标是将目标挖除的
作为去噪算法:将输入叠加噪声一起输入,输出就是原始数据。强迫模型去除噪声(降维时候将噪声去除)。

二、变分自编码(VAE)

变分自编码与基础的自编码最大的区别就是
1)我们不再将原始数据映射为一个定长的向量,而是映射到一个分布,这个分布我们认为是符合正太分布。也就是将瓶颈处(最中间的编码结果)的一个向量,替换成了两个向量,也就是态分布的均值和方差。每次要喂给解码部分输入的时候,从这两个向量中采样出一个数据出来
2)loss的区别。因为我们现在希望得到的是一个分布,那么loss中也需要增加这一部分,就是KL散度。另外加上重建误差,就是VAE的loss。
L ( θ , ϕ , x ( i ) ) =    − D K L ( q ϕ ( z ∣ x ( i ) ) ∣ ∣ p θ ( z ) )    +    E q ϕ ( z ∣ x ( i ) ) [ log ⁡ p θ ( x ( i ) ∣ z ) ] \mathcal{L}\left( \theta ,\phi ,x^{\left( i \right)} \right) =\,\,-D_{KL}\left( q_{\phi}\left( z|x^{\left( i \right)} \right) ||p_{\theta}\left( z \right) \right) \,\,+\,\,\mathbb{E}_{q_{\phi}\left( z|x^{\left( i \right)} \right)}\left[ \log p_{\theta}\left( x^{\left( i \right)}|z \right) \right] L(θ,ϕ,x(i))=DKL(qϕ(zx(i))pθ(z))+Eqϕ(zx(i))[logpθ(x(i)z)]

这里的重建误差其实和普通的AE是类似的,最多就是加了概率,因为是采样出来的。具体细节看论文,并查阅KL散度的资料。论文点击这里

VAE模型有个重要的问题就是,喂给解码器输入的时候,我们是采样得到的一个结果,那反向传播的时候,我们应该如何反向传播呢?论文中给出了解决方法,那就是采用了一个参数重现(Reparameterization Trick)的技巧。这个过程是这样的。首先将均值向量和方差向量认为是两个值μ和σ,然后转化为
z=μ + σ*ε 其中ε是一个标准正太随机分布。这样我们就可以进行训练了,因为我们关心的是μ和σ,至于ε是一个固定分布的随机数,是不需要改变的。这个地方就避免了完全随机的采样方式.
总的来说就是把采样过程分成两个可以使用反向传播的部分,其中一个需要训练,另一个固定且不需要训练。
在这里插入图片描述

三、解耦变分自编码(Disentangled VAE)

相对于VAE来说,希望你得到的低纬度表示中,每两个维度之间是不相关的。相对于VAE来说,只需要在loss的KL散度部分增加一个超参数β就可以了。其中β过小容易过拟合,β过大容易损失很多的细节信息。

相关代码点击这里

参考:
https://www.bilibili.com/video/av29126924?from=search
https://www.bilibili.com/video/av60862404?from=search

猜你喜欢

转载自blog.csdn.net/qq_39117858/article/details/104898137