显然这么做性能不好,所以我们将其改进,中间部分加一些trick,模型称之为variational auto-encoder VAE变分自编码器。在原encoder编码器部分改进output,不直接输出code,而是先输出两个与code同维向量\((m1,\sigma)\),并用正态分布生成同维向量\(e\),对三者进行组合得到 code为\(c=exp(\sigma) * e+m\)之后minmize reconstruction error最小化重建误差。除此之外还需要最小化\(Σ(1+\sigma-(m)^{2}-exp(\sigma)\)
VAE得到的图像不是很清楚,但是相比PixelRNN不同的是,VAE可以control控制(在维度上拉伸,就可以发现每个维度的相对含义)生成的图像。
第二十二章 无监督学习 - 深度生成模型Ⅱ
VAE续:
对于之前自编码器而言,假设满月图为code空间上一个点,半月图也为一个点,如果想要得到中间样子的图,没有办法从两者之间取样,因为编码器和解码器都是非线性的,中间样子的图并非是在其线性关系上。
而对于VAE而言,可以在c处加上一个noise,满月图往半月图方向加noise,半月图往满月图方向加noise,那么对于该点而言,它既被希望往满月图重建,又被希望往半月图重建,VAE训练要minimize mean square最小均方,那么最后产生的就是一张介于满月和半月之间的图。所以在VAE上code space采样会得到中间图而在自编码器上得不到。
所以对VAE中的值有了解释:\(m\)代表原来的code,\(c\)代表加上noise以后的code,\(\sigma\)代表 noise的variance方差,\(e\)代表正态分布采样值。其中variance是模型自己学习得到的(从encoder产生)。
对variance而言必须加上限制,不能让它太小,如果让模型自己决定那肯定就是0(没有方差肯定最好),所以新加的最小化\(Σ(1+\sigma-(m)^{2}-exp(\sigma)\)就是对其做的限制。前部分是对 variance做约束,后部分类似加了L2-Norm作正则化。
上述是直观理由,后面是正式理由:
我们可以把每张图看作是高维空间的一个数据点,要做的就是估计高维空间上的概率分布P(x)。只要得到概率分布就能根据去采样图像,找出来的图就会接近我们需要的图像。
如何去估计概率分布,我们可以用gaussion mixture model高斯混合模型:我们现在有个分布,这个分布是由很多高斯分布用不同w权重叠合起来的,如果高斯分布越多,就可以产生很复杂的该分布,公式为\(p(x)=Σp(m)p(x|m)\)。如果我们想要从\(p(x)\)采样,先要决定要从哪一个高斯分布中采样,每个高斯分布都有自己的权重和\((μ,Σ)\),根据各权重去决定你要从哪个高斯分布中采样数据,所以有了上式。
每个x都是某一子分布中被采样出来的,这件事类似分类,但他也不是完全,因为data做聚类是不够的,更好的方式是distributed representation分布式表示,即不属于任何一个class,而是用一个vector来描述各个不同方向的特性。可以说VAE是gaussion mixture model的distributed representation版本。
首先要从正态分布采样假设z(意思是可以映射到所有的高斯分布),向量z的每个维度都代表了某种属性,带入一个function产生其对应的\(N(μ,\sigma)\)。我们可以训练一个神经网络来作为这个 function。然后对P(x)来说有\(P(x)=\int {P(z)P(x|z)dz}\)。知道了z是什么就可以决定x是从怎样的\((μ,Σ)\)function里被采样出来的。\((μ,Σ)\)的关系等式是maximizing the likelihood最大化可能性。
即输入数据集data_x希望找一组\((μ,Σ)\)function,它可以让p(x)取log后相加是被maximizing。所以我们要做的就是调整NN里面的参数使得likehood可以被最大化。\(L=ΣlogP(x)\)
另外引入一个分布叫做\(q(z|x)\),也就是我们有另外一个\(NN^{T}\),input一个x它会返回对应z的\((μ\',\sigma\')\)。之前的NN就是VAE里面的解码器,另一个\(NN^{T}\)是VAE的编码器。(x->z->分布)
归纳到一起就是:\(logP(x)=\int{q(z|x)logP(x)}dz\),\(q(z|x)\)是一个分布,对此积分与\(P(x)\)无关可以提出来,可以得到\(logP(x)=\int{q(z|x)log(\frac{P(z,x)}{q(z|x)})}dz + \int{q(z|x)log(\frac{q(z|x)}{P(z|x)})}dz\),左边部分表示的是KL divergence距离代表的是两个分布相近的程度,一定是大于等于0的,所以L=logP(x)一定会大于左边项,这项为lower bounud下界,称之为\(L _ {b}\)