Generative models(生成模型)

1、PixelRNN

根据前面的一个像素,输出下一个像素。这种方式可以收集大量的图片进行无监督训练,训练网络。通过部分的图像就可以预测后面的图像。

在训练的过程中,首先输入图像的第一个像素,这个时候神经网络的输出应该是图像的第二个像素;然后输入图像的第一、二个像素,这个时候神经网络输出的是图像的第三个像素,依次类推,对网络进行训练。

神经网络网络无监督降维 无监督 神经网络_神经网络


神经网络网络无监督降维 无监督 神经网络_高斯混合模型_02


如上图,最左侧的图像为原始图像,中间的为输入图像,已经将图像的一半遮盖住,希望补全另一半图像。后面是得到的三种结果。

在训练上面这个网络的时候,一个直观的方法是将图像的 RGB 三个通道作为输入,但是这种方法得到的测试结果往往会偏灰色和棕色,这是因为神经网络的输出常常使得输出的三个值在数值上十分接近。因此在这里利用 1 of N encoding 对颜色进行编码,但是如果对所有颜色进行编码的话,总共有256256256种编码,维数过高,所以首先对颜色进行聚类,对聚在一类的颜色使用相同的编码,大大降低了编码的维数。

2、Variational Autoencoder(变分自动编码器)

回忆自动编码器方法,如果随机生成一个向量code输出一张图片就是在生成图片了,但是发现这样做的效果并不很好,而变分自动编码器会好很多。

神经网络网络无监督降维 无监督 神经网络_编码器_03

VAE 的结构

神经网络网络无监督降维 无监督 神经网络_神经网络_04


VAE 能通过code来控制产生的结果。下面是VAE的实验结果

神经网络网络无监督降维 无监督 神经网络_神经网络_05


可以看出来 VAE 想画点什么东西出来,但是并不知道 VAE 具体想画什么出来。那么他与pixel Rnn 的区别在于哪呢?在 VAE 中,可以如下图所示

神经网络网络无监督降维 无监督 神经网络_编码器_06


假如我们中间编码的是一个十维的向量,那么可以保持其中的八维不变,变化其中的两维,看看这两维对于图像的影响是怎样的。具体的实验结果如下图所示

神经网络网络无监督降维 无监督 神经网络_高斯混合模型_07


或者也可以使用VAE写诗。将上面的的输入输出都改成 sentence。随便输入两个句子,找到它们的编码向量,在两个向量之间做一条连线,在连线上等间距的取若干个点(即一些编码),将这些编码进行解码就可得到对应的句子。

神经网络网络无监督降维 无监督 神经网络_神经网络_08

为什么使用VAE

我们实际上是希望生成图像。假如我们将图像看作是高维空间上的一个点,那么我们需要的就是估计这些点在高维空间的分布,这个概率分布的大概的形式应该如下图所示

神经网络网络无监督降维 无监督 神经网络_高斯混合模型_09


它在有宝可梦存在的地方的概率应该比较高,在没有宝可梦的区域应该比较低。所以可以从概率比较高的部分进行抽样,生成新的数据。而估计概率这件事情可以使用高斯混合模型。高斯混合模型可以大概表示为下图的样子

神经网络网络无监督降维 无监督 神经网络_神经网络_10


其中黑线是高斯混合模型的概率密度曲线,它是由许许多多个高斯模型按照一定的权重混合得到的。那如何从这样的混合模型中进行采样呢?首先我们选取从组成高斯混合模型的若干个高斯分布中选择使用哪一个高斯分布,然后对于选定的某一个高斯分布,他有着自己的均值 神经网络网络无监督降维 无监督 神经网络_神经网络_11神经网络网络无监督降维 无监督 神经网络_编码器_12

本质上,VAE就是高斯混合模型的分布表示的形式

神经网络网络无监督降维 无监督 神经网络_高斯混合模型_13