本文着重讨论VAE和CVAE,AE的原理不再赘述。主要采用Q&A的方式。
VAE
Q:为什么AE产生新的样本很难?
A:因为没有对隐空间的z进行建模。
Q:z是不确定的,如何建模?
A:给定z一个简单的分布,将采样空间(隐空间)压缩
可以假设隐空间z服从各维度独立的高斯分布,则可以认为数据集是由某个随机过程产生的,z是一个不可观测到的隐变量,该过程分为两个step:
step1:从p(z)中采样得到一个zi
step2:根据zi,从条件分布p(x|zi)中采样得到一个数据点xi
也就是:从隐空间sample一个z,经过decoder得到p(X|Z),从p(X|Z)中sample得到新数据。
Q:得到的p(X|Z)太复杂不好建模怎么办?
A:假设p(X|Z)也服从各维度独立的高斯分布。
生成模型的本质:找一个与真实的分布
越像越好
Q:如何对Pθ(X)建模?
A:因为,
,则有
但是上述方法不太可行,因为需要采样大量的
Q:如何解决?
A:在Encoder中引入后验分布,即前向传播中,给定
,计算出
的分布,从这个分布中采样
。
Q:为什么要这么做?
A:因为这样从中采样得到的
几乎都与
有关系。
Q:如何计算?
A:贝叶斯公式:
,分子可以算,但是分母上有积分不好处理。
Q:如何解决呢?
A:因为p(X|Z)与p(z)已经做了假设服从高斯分布,则可以证明,也服从高斯分布。(贝叶斯定理,这里不再证明),所以令一个由
参数化的Encoder
去拟合
。
至此,整个VAE的流程结束,但是有了采样的这个步骤,导致无法反向传播。
Q:如何解决?
A:重参数化技巧,得到分布的参数
和
之后,从
中采样一个
,令
,仍然是一个高斯分布。
在实际的操作中,对于不再采样,直接将均值作为生成的新数据点。
VAE的优化目标本文不做推导,主要是对思想进行探讨。
CVAE
VAE可以生成新的样本,但是无法控制生成内容。CVAE解决了上述问题。CVAE的结构如下图
整体结构和VAE差不多,区别是在将数据输入Encoder时把数据内容与其标签(label)合并(cat)一起输入,将编码(Z)输入Decoder时把编码内容与数据标签(label)合并(cat)一起输入。