生成对抗网络入门(一)生成模型

何谓生成模型

生成模型是指能够在给定某些隐含参数的条件下,随机生成观测数据的模型,它给观测值和标注数据序列指定一个联合概率分布。

随机分布--------生成模型------->生成数据分布(逼近真实数据分布)

生成模型具备表现和处理高维度概率分布的能力。其要做的事情就是生成大量数据进行训练。

自动编码器

原理

自动编码器(auto-encoder)是一种可以实现生成模型的具体方法。

其最初的存在意义是为了对数据进行压缩。

由高维度的原始数据x经过一个多层的神经网络(编码器)压缩为一个低维度的z。再经过一个多层的神经网络(解码器)解码为与输入具有相同维度的数据x'。

对数据进行降维处理后,也就是前面说的数据压缩,在对数据进行还原,在还原过程中肯定会出现一些损失。

自动编码器的训练则是把编码器和解码器绑定在一起进行训练,反向传播的损失函数为x与x'之间的偏差程度。

自动编码器的结构特点在于输入层和输出层具有相同的节点数量,中间编码层的节点数量小于输入层与输出层的节点数量。

除了数据压缩的功能外,研究人员也使用自动编码器来实现生成模型的功能,即为我们使用如上的训练过程进行某种类型的数据训练后,编码器和解码器具备了此类型数据的编码或是解码能力。在训练完成之后我们可以单独使用解码器作为生成模型,在编码层输入与z相同维度的任意数据,解码器都可以产生对应额生成数据

问题缺陷

自动编码器并不适合作为生成模型,如上文中提到的z,我们无法通过编码器以外的任何方法来生成z,这就导致当我们随意输入相同维度的z时,往往解码器生成的数据并不是我们想要的结果。

例如:以手写数字集为例,对每一个手写数字生成编码z,再使用解码器进行还原可以很好的还原当时的手写数字,但当我们输入一个训练集中从未出现过的编码z时,往往输出的结果是噪声。

针对这个问题,研究人员提出了自动编码器的升级版本——变分自动编码器(Variational Auto-Encoder)

变分自动编码器

相较于普通的自动编码器,变分自动编码器才算得上是真正的生成模型。

为了解决前文中出现——不能通过新编码生成数据的问题,VAE在自动编码器中加入了一些限制,要求产生的编码z遵循高斯分布。这样我们就可以使用任意范围的高斯分布的数据用于解码器生成模型。

VAE具体实现方法:在编码阶段我们把编码器的输出由一个变为两个,两个低维向量分别对应均值向量和标准差向量。通过均值向量和标准差向量又可以还原为一个完整的低维向量z,最终通过解码器还原为原始高维向量。

在实际的操作中,我们需要权衡两个问题。一是网络整体的准确程度;二是隐含变量是否可以很好的吻合高斯分布。对应这两个问题形成了两个损失函数:一是描述网络还原程度的损失函数;二是编码后的低维变量z与高斯分布相近程度的损失函数。

引入一个概念:KL散度(kullback_leibler divergence)也可以成为相对熵。KL散度的理论意义在于度量两个概率之间的差异程度。当KL散度越高,说明两者差异程度越大,如果两者相同的话,KL散度应该为0。最终的损失函数由这两个损失函数相加后的结果,由网络自己调节。

发布了267 篇原创文章 · 获赞 51 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/AcSuccess/article/details/99756695