[Deep Learning] Variational Autoencoders (VAEs)


Autoencoder

Autoencoder是一种无监督学习方法,用于从未标记的训练数据中学习较低维度的特征表示。这种表示通常被称为latent space features(潜在空间特征)或encoder,其目标是找到输入数据的有效压缩表示。

结构

  • Encoder

    Encoder是一个将输入 x x x映射到特征 z z z的函数,其可以是深度学习模型,也可以是线性或非线性模型。常见的非线性函数有sigmoid和ReLU等。编码器的架构可以是fully-connected,也可以是卷积神经网络。Encoder的目标是降维,所以特征 z z z的维度通常小于输入 x x x的维度。

    z = f θ ( x ) z = f_{\theta}(x) z=fθ(x)

    其中 θ \theta θ是Encoder的参数, f θ f_{\theta} fθ是Encoder的函数。

  • Decoder

    Decoder是一个将特征 z z z映射回输入空间的函数,生成重构的输入 x ^ \hat x x^。Decoder的目标是从压缩的特征 z z z中重建原始输入 x x x。Decoder的架构可以是深度的、线性或非线性的,也可以是fully-connected的或卷积的(例如上卷积)。

    x ^ = g ϕ ( z ) \hat x = g_{\phi}(z) x^=gϕ(z)

    其中 ϕ \phi ϕ是Decoder的参数, g ϕ g_{\phi} gϕ是Decoder的函数。

训练

Autoencoder的训练目标是使重构的输入 x ^ \hat x x^尽可能接近原始输入 x x x。常用的损失函数是L2 loss:

L ( x , x ^ ) = ∥ x − x ^ ∥ 2 L(x, \hat x) = \|x-\hat x\|^2 L(x,x^)=xx^2

通过最小化此损失函数,可以学习到Encoder和Decoder的参数。

应用

训练完Autoencoder后,通常会丢弃Decoder,仅使用Encoder从输入数据中提取特征。如果需要,还可以将Encoder与分类器进行联合微调。

x → z → y ^ x \rightarrow z \rightarrow \hat y xzy^

在此过程中, y ^ \hat y y^是通过Encoder和分类器得到的预测标签, y y y是真实标签。可以使用softmax损失函数来优化分类任务。

Autoencoder可以重构数据,并能学习到初始化监督模型的特征。这些特征能够捕获训练数据中的变化因素。

我们可以使用Autoencoder来生成新的图像,但这通常不是它们的主要用途。使用Autoencoder生成新图像的典型方式是从Autoencoder学习到的潜在空间进行采样,并通过Decoder生成新的图像。

Variational Autoencoder (VAE)

VAE是一种生成模型,它使用了Autoencoder的架构并加入了概率理论。与传统的Autoencoder不同,VAE的Encoder输出的不是一个确定的编码,而是编码的概率分布的参数。

结构

  • Encoder

    Encoder的目标是将输入 x x x映射到潜在空间的分布参数,通常是一个多元高斯分布的均值向量 m m m和方差向量 σ \sigma σ

    m = f θ ( x ) ,   σ = g θ ( x ) m = f_{\theta}(x),\ \sigma = g_{\theta}(x) m=fθ(x), σ=gθ(x)

  • Sampling

    采样步骤从Encoder学习到的分布中生成编码 z z z。这通过下面的公式实现:

    c i = exp ⁡ ( σ i 2 ) e i + m i c_i = \exp(\frac{\sigma_i}{2})e_i+m_i ci=exp(2σi)ei+mi

    在这里, σ i \sigma_i σi代表的是潜在空间的log-variance,所以 exp ⁡ ( σ i 2 ) \exp(\frac{\sigma_i}{2}) exp(2σi)就是标准差, e i e_i ei是从标准正态分布中采样的随机数。

  • Decoder

    Decoder将采样得到的 z z z映射回输入空间,生成重构的输入 x ^ \hat x x^

    x ^ = h ϕ ( c ) \hat x = h_{\phi}(c) x^=hϕ(c)

训练

VAE的训练目标是最小化重构误差和KL散度(Kullback-Leibler divergence)。其中,重构误差度量了输入 x x x和重构输入 x ^ \hat x x^的差异,可以使用均方误差(MSE)或者交叉熵(cross entropy)作为损失函数。KL散度则度量了Encoder学习到的潜在分布与先验分布(通常是标准正态分布)的差异。所以,总的损失函数可以写为:

L = MSE ( x , x ^ ) + D K L ( p θ ( z ∣ x ) ∣ ∣ p ( z ) ) L = \text{MSE}(x, \hat x) + D_{KL}(p_{\theta}(z|x)||p(z)) L=MSE(x,x^)+DKL(pθ(zx)∣∣p(z))

在上式中, D K L D_{KL} DKL表示KL散度, p θ ( z ∣ x ) p_{\theta}(z|x) pθ(zx)表示Encoder学习到的潜在分布, p ( z ) p(z) p(z)是先验分布。通常,KL散度的形式为:

D K L ( p θ ( z ∣ x ) ∣ ∣ p ( z ) ) = 1 2 ∑ ( 1 + σ i − ( m i ) 2 − exp ⁡ ( σ i ) ) D_{KL}(p_{\theta}(z|x)||p(z)) = \frac{1}{2}\sum (1+\sigma_i-(m_i)^2-\exp(\sigma_i)) DKL(pθ(zx)∣∣p(z))=21(1+σi(mi)2exp(σi))

通过最小化重构误差和KL散度,VAE可以在生成能够重构输入数据的同时,使潜在空间的分布接近于预设的先验分布,通常是标准正态分布。这有助于Decoder从潜在空间中生成新的、有意义的样本。

应用

当VAE生成数据时,我们只使用解码器部分并从先验分布中对 z z z进行采样。解码器接受来自潜在空间的向量 z z z,并生成对应的数据。在VAE中,这个潜在空间通常被训练为接近于某种已知的分布(通常是高斯分布)。这就意味着我们可以通过简单地从这个已知分布中抽取样本,然后将其传入解码器来生成新的数据。

z ∼ p ( z ) ,   x ^ = h ϕ ( z ) z \sim p(z),\ \hat x = h_{\phi}(z) zp(z), x^=hϕ(z)

在标准的VAE中,我们使用重构误差(例如均方误差或交叉熵)来评估输入数据 x x x和重构数据 x ^ \hat x x^的相似度。然而,这种评估方法有时候不能完全捕捉到数据的所有复杂性,尤其是在图像等高维数据中。

在VAE-GAN模型中,我们保留了VAE的Encoder和Decoder,但是用GAN的判别器来代替传统的重构误差。具体来说,判别器的目标是区分来自于先验分布的样本和由Encoder产生的样本。这使得VAE-GAN不仅能学习有效的潜在空间表示,还能生成高质量的样本,即使是在处理高维复杂数据的时候。

猜你喜欢

转载自blog.csdn.net/weixin_45427144/article/details/131097883
今日推荐