2.1 Auto-encoder

大模型文本生成评估指标_数据集

先来看Auto-Encoder也就是我们说的AE,它的主要思路是把输入的vector编码成code,再把code解码成vector. 其中的编码器和解码器部分一般是Neural Network,可以是简单的线型神经元,也可以是CNN。为了训练函数用p-范数做损失函数:



L=∥x−G(z)∥p L =∥ x − G ( z ) ∥ p

p取1就是我们熟悉的L1 loss,p取2就是L2 loss.

把NN换成简单的3层神经网络:

大模型文本生成评估指标_数据_02

这里的图像编码是3位。用到的数据集主要是MNIST和我们自己的服装数据集。
我们先看MNIST上的例子

大模型文本生成评估指标_数据集_03



大模型文本生成评估指标_数据_04


从上边的结果发现,随着训练次数的增加,生成的图像在逐渐变清晰。但我们随机给一个长度为3的变量作为编码时,就会生成一些不是特别合理的结果。其实AE更像是一种非线性插值,输入训练集中的图片就会得到比较好的结果,如果我们输入随机编码,则得到的是一些过度的结果。再来个图能更说明AE产生的主要是训练数据的中间结果:

大模型文本生成评估指标_方差_05

固定其中的一个值,变化另外两个,我们就能看出数字的变化规律,如果随机选取点的编码值是已有编码的中间值,就会生成一些不合理的结果。我们再来看服装的结果:

大模型文本生成评估指标_数据集_06

第一个epoch的时候,所有的图像都会出现相同的轮廓,之后到50个epoch的时候逐渐出现了颜色信息,最后随着epoch的增加,生成的服装图像会出现一些个性化的特征,如已经可以出现了长袖、短袖。从某个角度看服装图像的生成,有点像胚胎的演化,所有动物的胚胎在初期都是很相似的,之后才慢慢分化出自己的形态。
把NN换成复杂的convNet

大模型文本生成评估指标_数据集_07

得到以下的服装生成效果:

大模型文本生成评估指标_方差_08

任意给一组编码得到以下结果:

大模型文本生成评估指标_数据_09

可以发现,跟线型神经元不同,用CNN做encoder和decoder的AE在1个epoch的时候就能还原出服装的形态,随着训练次数的增加,服装重建的结果也在慢慢变好。但也许是我自己设计的网络结构不太合理,生成的图像颗粒化很严重,能看到明显的像素块!,最后,我用随机输入的一串编码做测试,发现效果很差,这是因为服装之间的过渡关系远没有数字那么明显!为了能给随机输入的结果一个合理的结果,我们接着介绍VAE

2.2 Variational auto-encoder(VAE)

在GAN没出现之前,VAE是最popular的无监督学习方法。举个简单的例子,

大模型文本生成评估指标_大模型文本生成评估指标_10

真实的数据分布是大圆,我们的训练集是随机获取的真实数据一部分,因此只能反映真实分布中的侧面。因此用AE时,如果我们输入一张真实的图片,并得到它的编码能得到很好的结果,因为产生的编码属于小圆。但我们在小圆外随机选取1点,得到的就是一下不存在的结果。这个问题会随着特征向量维度增加而变得更糟,VAE的基本思想则是,我们假设是原始数据是一个很复杂的分布,我们高斯分布来逼近这个分布。这样一来,真实数据中的点就跟高斯分布上的点对应起来了!我们只需要利用现有的训练集去找出这个高斯分布

我们只介绍原始的VAE。与AE不同,VAE中编码器不再产生图片的编码,而是产生两个向量,一个表示均值,一个表示方差。如图

大模型文本生成评估指标_数据集_11

利用图中公式,就可以计算出code。整个网络的训练是要让生成器生成的分布与随机噪声分布(一般选标准高斯分布)接近,同时保证输入的图片与输出的图片越接近越好。因此训练网络时的loss为:


L=∥X−G(z)∥p+KL(ΠPi∥N(μ,Σ)) L =∥ X − G ( z ) ∥ p + K L ( Π P i ∥ N ( μ , Σ ) )

我们知道,如果随机变量是独立同分布的,则联合分布就是由每个变量分布的乘积。在图像生成中,我们可以随机变量是服从高斯分布的,编码器产生的是均值和方差,利用均值和方差可以构造联合高斯分布,这个联合分布与标准高斯分布越接近越好。我们的code是从任意噪声结合的均值和方差生成的,因此我们输入任意噪声作为code,都能产生出一种图片。同样的,设计简单的线型网络结构:

大模型文本生成评估指标_数据_12

也用服装数据集做生成:

大模型文本生成评估指标_大模型文本生成评估指标_13

实验结果如图所示,用VAE产生的图片相比于VE有一些模糊,因为VAE拟合的是分布。但给一些随机噪声作为编码,输入到网络后并不会出现不合理的结果,基本上也还保留着服装的形态

大模型文本生成评估指标_数据集_14

3 小结

上边介绍了auto-encoder跟variational auto-encoder,我们发现,生成的图片是在比较模糊。这有一部分原因是使用基于pixel-wise的是L2 loss造成的。举个很简单的例子:

大模型文本生成评估指标_方差_15

ground truth是手写字符2,上边两幅图中都是有1个pixel的错误,用L2 loss
都是1,下边两幅图都是多出来6个像素,用L2 loss是36.下边的loss大,但我们从直觉上看下边的图更真一