美文网首页
变分自编码Variational Auto-Encoders

变分自编码Variational Auto-Encoders

作者: Ice_spring | 来源:发表于2020-08-12 22:41 被阅读0次

自编码Auto-Encoders

自编码(Auto-Encoders)是非监督学习领域中的一种, 可以自动从无标注的数据中学习特征, 是一种以重构输入信号为目标的神经网络, 它可以给出比原始数据更好的特征描述, 具有较强的特征学习能力, 在深度学习中常用自编码网络生成的特征来取代原始数据, 以得到更好的结果。长被用于生成类模型。
如下图所示:

ae.png

输入一张图片,通过一个 Encoder 网络,输出一个压缩后的特征。之后将这个压缩特征通过一个 Decoder 网络,又将这张图片还原回去了。
我们知道,PCA是可以做降维的,不过PCA降维依赖线性性,本质仍然是线性变换,而自编码是通过神经网络降维,由于激活函数所以自编码有非线性性,理论上可以有更好的降维效果,事实也是如此。下图展示了二者重建图像的区别:

pca.PNG

自编码器原理

让我们来考虑有监督学习的神经网络的功能:
𝒐 = 𝑓_𝜃(𝒙), 𝒙 ∈ 𝑅^{𝑑_{𝑖𝑛}}, 𝒐 ∈ 𝑅^{𝑑_{𝑜𝑢𝑡}}

𝑑_{𝑖𝑛} 是输入的向量长度, 𝑑_{𝑜𝑢𝑡} 是网络输出的向量长度。对于分类问题,网络模型通过把长度为𝑑_{𝑖𝑛} 输入特征向量 𝒙 变换到长度为 𝑑_{𝑜𝑢𝑡} 的输出向量 𝒐,这个过程可以看成是特征降维的过程,把原始的高维输入向量𝒙变换到低维的变量𝒐。特征降维(Dimensionality reduction)在机器学习中有广泛的应用, 比如文件压缩(Compression),数据预处理(Preprocessing)等。
自编码网络利用数据 𝒙 本身作为监督信号来指导网络的训练,即希望神经网络能够学习到映射𝑓_𝜃: 𝒙 → 𝒙,我们把网络 𝑓_𝜃 切分为 2 个部分,前面的子网络尝试学习映射关系: 𝑔_{𝜃_1}: 𝒙 → 𝒛 ,后面的子网络尝试学习映射关系 ℎ_{𝜃_2}: 𝒛 → 𝒙,我们把 𝑔_{𝜃_1} 看成一个数据编码(Encode)的过程,把高维度的输入 𝒙 编码成低维度的隐变量 𝒛 (Latent variable,或隐藏变量),称为 Encoder 网络(编码器); ℎ_{𝜃_2} 看成数据解码(Decode)的过程,把编码过后的输入 𝒛 解码为高维度的 𝒙, 称为 Decoder 网络(解码器)。

2.PNG

编码器和解码器共同完成了输入数据𝒙的编码和解码过程,我们把整个网络模型 𝑓_𝜃 叫做自动编码器(Auto-Encoder),简称自编码器。 如果都使用深层神经网络来参数化 𝑔_{𝜃_1}ℎ_{𝜃_2} 函数,则称为深度自编码器(Deep auto-encoder),如下图所示。

深度自编码器

自编码器能够将输入变换到隐藏向量 𝒛,并通过解码器重建(Reconstruct,或恢复)出 \overline{𝒙}。我们希望解码器的输出能够完美地或者近似恢复出原来的输入,即 \overline{𝒙} ≈ 𝒙 ,那么,自编码器的优化目标:
\begin{array}{l} \text { Minimize } \mathcal{L}=\operatorname{dist}(\boldsymbol{x}, \overline{\boldsymbol{x}}) ,\quad \overline{\boldsymbol{x}}=h_{\theta_{2}}\left(g_{\theta_{1}}(\boldsymbol{x})\right) \end{array}

其中𝑑𝑖𝑠𝑡(𝒙, \overline{𝒙})表示 𝒙\overline{𝒙} 的距离度量(Distance metric)。
自编码器网络和普通的神经网络并没有本质的区别, 只不过训练的监督信号由标签 y 变成了自身 𝒙

去噪自编码Denoising Auto-Encoders

要想取得好的特征只靠重构输入数据是不够的, 在实际应用中, 还需要让这些特征具有抗干扰的能力, 即当输入数据发生一定程度的扰动时, 生成的特征仍然保持不变在这种情况下训练出来的模型才会有更好的鲁棒性。
Denoising Auto-Encoders 给输入数据添加随机的噪声扰动,如给输入x添加采样自高斯分布的噪声\epsilon
\overline{x}=x+\epsilon,\quad \epsilon \sim N(0,1)

添加噪声后,网络需要从\overline{x} 学习到数据的真实隐藏变量 z,并还原出原始的输入x
\theta^{*}=\operatorname{argmin}_{\theta} \operatorname{dist}\left(h_{\theta_{2}}\left(g_{\theta_{1}}(\widetilde{x})\right), x\right)

去噪自编码

变分自编码Variational Auto-Encoders

基本的自编码器本质上是学习输入𝒙,隐藏变量 𝒛 之间映射关系, 它是一个判别模型(Discriminative model),并不是严格的生成模型(Generative model)。 于是考虑将模型变为生成模型,我们可以学习到给定 x, 隐藏变量的条件概率分布 p(z|x), 在学习到这个分布后, 通过对p(z|x)进行采样可以生成不同的样本。 这就是变分自编码器(Variational Auto-Encoders,VAE)。

VAE原理

从概率的角度, 我们假设任何数据集都采样自某个分布 p(x|z)z 是隐藏的变量,代表了某种内部特征, 比如手写数字的图片 xz 可以表示字体的大小,书写风格,加粗、斜体等设定,它符合某个先验分布 p(z),在给定具体隐藏变量 z 的情况下,我们可以从学到的分布 p(x|z) 中采样一系列的生成样本,这些样本都具有 z 所表示的共性。
p(z) 已知(比如z \sim N(0,1))的条件下, 我们的目的就是希望能学会生成概率模型 p(x|z)。这里我们可以采用最大似然估计(Maximum likelihood estimation): 一个好的模型,应该拥有很大的概率产生已观测的样本。 如果我们的生成模型 p(x|z) 是用 \theta 来参数化,比如我们通过一个神经网络 Decoder 来学习 p(x|z),那么 \theta 就是此 decoder 的权值 w, b 等,那么我们的神经网络的优化目标是:
\underset{\theta}{\operatorname{max}}p(x)=\int_z{p(x|z)p(z)}dz

注意上式的含义,p(x|z)p(z)=p(x,z) 是联合概率密度,对联合概率密度积分可得到边缘概率密度。
很遗憾的是,由于 z 是连续变量,上述积分没法转换为离散形式,所以直接优化上式几乎是不可能的。

vae

换一个思路,利用 变分推断(Variational Inference) 的思想,我们通过分布 q_{\phi}(z|x) 来逼近真实的后验概率 p(z|x),即需要优化 q_{\phi}(z|x)p(z|x) 之间的距离:
\min _{\phi} \mathbb{D}_{K L}\left(q_{\phi}(z \mid x)|p(z \mid x))\right.

其中KL散度定义为:
\begin{array}{l} \mathbb{D}_{KL}(P | Q)=\sum P(x) \log \frac{P(x)}{Q(x)} \quad 离散分布律\\ \mathbb{D}_{KL}(P | Q)=\int P(x) \log \frac{P(x)}{Q(x)} d x \quad 连续概率密度 \end{array}

严格来说距离应该是对称的,但是KL散度并不对称。
将min式的KL散度展开:
\mathbb{D}_{K L}\left(q_{\phi}(z \mid x)|p(z \mid x)\right)=\int_{z} q_{\phi}(z \mid x) \log \frac{q_{\phi}(z \mid x)}{p(z \mid x)} d z.

进一步由 p(z|x)p(x)=p(x,z)
\begin{array}{l} \mathbb{D}_{K L} \left (q_{\phi}(z \mid x)|p(z \mid x) \right)=\int_{z} q_{\phi}(z \mid x) \log \frac{q_{\phi}(z \mid x) p(x)}{p(x, z)} d z. \\ =\int_{z} q_{\phi}(z \mid x) \log \frac{q_{\phi}(z \mid x)}{p(x, z)} d z+\int_{z} q_{\phi}(z \mid x) \log p(x) d z \\ =-\underbrace{\left(-\int_{z} q_{\phi}(z \mid x) \log \frac{q_{\phi}(z \mid x)}{p(x, z)} d z\right)}_{\mathcal{L}(\phi, \theta)}+\log p(x) \end{array}

上式中 \int_{z} q_{\phi}(z \mid x) \log p(x) d z 部分,\log p(x) 相对于积分变量 z 是常数,剩余部分由概率密度定义,积分为 \int_{z} q_{\phi}(z \mid x) d z=1
我们将 -\int_{z} q_{\phi}(z \mid x) \log \frac{q_{\phi}(z \mid x)}{p(x, z)} d z 项定义为 {\mathcal{L}(\phi, \theta)},上式即为:
\mathbb{D}_{K L} \left (q_{\phi}(z \mid x)|p(z \mid x) \right)=-{\mathcal{L}(\phi, \theta)}+\log p(x)

其中:
{\mathcal{L}(\phi, \theta)}=-\int_{z} q_{\phi}(z \mid x) \log \frac{q_{\phi}(z \mid x)}{p(x, z)} d z=\int_{z} q_{\phi}(z \mid x) \log \frac{p_{\theta}(x, z)}{q_{\phi}(z \mid x)}dz

考虑到 \mathbb{D}_{K L}\left(q_{\phi}(z \mid x)|p(z \mid x)\right) \geq 0,故有 \mathcal{L}(\phi, \theta) \leq \log p(x)
也就是说,\mathcal{L}(\phi, \theta)\log p(x) 的下界(Lower bound),优化目标 \mathcal{L}(\phi, \theta) 称为Evidence Lower Bound Objective(ELBO),为了最大化似然 \max p(x)\max \log p(x),可以通过 \max \mathcal{L}(\phi, \theta) 实现。
现在我们分析如何最大化 \mathcal{L}(\phi, \theta),将其展开可得:
\begin{aligned} \mathcal{L}(\theta, \phi)&=\int_{z} q_{\phi}(z \mid x) \log \frac{p_{\theta}(x, z)}{q_{\phi}(z \mid x)}dz \\ &=\int_{z} q_{\phi}(z \mid x) \log \frac{p(z) p_{\theta}(x \mid z)}{q_{\phi}(z \mid x)}dz \\ &=\int_{z} q_{\phi}(z \mid x) \log \frac{p(z)}{q_{\phi}(z \mid x)}dz+\int_{z} q_{\phi}(z \mid x) \log p_{\theta}(x \mid z)dz \\ &=-\int_{z} q_{\phi}(z \mid x) \log \frac{q_{\phi}(z \mid x)}{p(z)}dz+\mathbb{E}_{z \sim q}\left[\log p_{\theta}(x \mid z)\right] \\ &=-\mathbb{D}_{K L}\left(q_{\phi}(z \mid x) \mid p(z)\right)+\mathbb{E}_{z \sim q}\left[\log p_{\theta}(x \mid z)\right] \end{aligned}

因此:
\mathcal{L}(\theta, \phi)=-\mathbb{D}_{K L}\left(q_{\phi}(z \mid x) \mid p(z)\right)+\mathbb{E}_{z \sim q}\left[\log p_{\theta}(x \mid z)\right]

因此可以用编码器网络参数化 q_{\phi}(z|x) 函数,解码器网络参数化 p_{\theta}(x|z) 函数,通过计算解码器的输出分布 q_{\phi}(z|x) 与先验分布 p(z) 之间的 KL 散度,以及解码器的似然概率 \log p_{\theta}(x|z) 构成的损失函数,即可优化 \mathcal{L}(\theta, \phi) 目标。
q_{\phi}(z|x) \sim N(\mu_1,\sigma_1^2)p(z) \sim N(\mu_2,\sigma_2^2) 都假设为正态分布时:
\mathbb{D}_{K L}\left(q_{\phi}(z \mid x) \mid p(z)\right)=\log \frac{\sigma_{2}}{\sigma_{1}}+\frac{\sigma_{1}^{2}+\left(\mu_{1}-\mu_{2}\right)^{2}}{2 \sigma_{2}^{2}}-\frac{1}{2}

Reparameterization Trick

隐变量采样自编码器的输出 q_{\phi}(z|x),如下图左所示,编码器输出正态分布的均值 \mu 和方差 \sigma^2,解码器的输入采样自 N(\mu,\sigma^2)。由于采样操作的存在,导致梯度传播是不连续的,无法通过梯度下降算法训练 VAE 网络。原VAE论文中提供了一种连续可导的解决方案,称为 Reparameterization Trick, 它通过 z = 𝜇 + 𝜎 ⊙ 𝜀方式采样隐变量 z,从而将梯度传播连接起来。如下图右所示,𝜀 变量采样自标准正态分布 N(0, 1)𝜇𝜎 由编码器网络产生,通过 z= 𝜇 + 𝜎 ⊙ 𝜀 即可获得采样后的隐变量。

Reparameterization Trick

VAE 网络模型如下图所示,输入x 通过编码器网络 q_{\phi}(z|x) 计算得到隐变量 z 的均
值与方差,通过 Reparameterization trick 方式采样后送入解码器网络,获得分布 p_{\theta}(x|z)
并通过损失函数 \mathcal{L}(\theta,\phi) 计算误差优化参数。

参考资料

KL divergence

VAE原论文

https://zhuanlan.zhihu.com/p/25401928

相关文章

网友评论

      本文标题:变分自编码Variational Auto-Encoders

      本文链接:https://www.haomeiwen.com/subject/fmiglktx.html