为了解决前文中叙述的自动编码器存在的问题,VAE在普通的自动编码器上加入了一些限制条件,要求产生的压缩向量限制为一个近似的正态分布,在编码阶段将编码器输出的结果从一个向量变成两个向量,分别为均值(Mean)与标准差(Standard Deviation, STD),通过均值向量和标准差向量的随机采用可以形成一个隐含向量,这样能够帮助自动编码器真正学习训练数据的潜在规律,从而让自动编码器能够基于训练数据学习到参数的概率分布。最终再通过解码器将编码向量还原成与原始图片非常接近的图像。
在实际的训练过程中需要考虑两个问题,一个是网络对图像还原的准确程度,第二个是编码变量是否可以很好地符合正态分布。为此可以设计两个损失函数:第一个是描述网络对图像还原程度的损失函数,具体的方法是输出图像与输入图像各像素点之间的均方误差;第二个是编码变量与正态分布相近程度的损失函数。
为计算第二个损失函数,可以利用KL散度(Kullback-Leibler divergence)。KL散度可以用于度量两个概率分布之间的差异程度,当KL散度越高或越低的时候,说明两者的差异程度越大或越小。当两者概率相同时,KL散度为0。然后将两个损失函数相加,在VAE网络训练过程中将损失函数之和作为优化目标,使用优化算法进行网络参数更新,进而使得模型能够达到最优的结果。
loss_generation=mean(square(generated_image-real_image))
loss_latent=KL-Divergence(latent_variable, unit_gaussian)
Loss_total=loss_generation+loss_latent(www.xing528.com)
VAE训练完毕,需要从得到的正态分布中随机釆样一个隐含向量,然后将其输入解码器,即可生成全新的数据。图7-3列出了利用不同的隐含向量生成的数字,可以看到随着隐含向量的变化,手写数字也会逐渐从左下角的手写数字9逐渐演变成右上角的手写数字0。
图7-3 隐含向量与生成图像之间的关系
VAE使用平均值和方差这两个参数来从正态分布中随机采样一个向量,并将这个向量解码到原始输入,这个过程能够保证解码器能够生成有效的输出。但是VAE在训练最终模型的目的也包含输岀数据与输入数据的均方误差最小化,这使得VAE本质上也并非学会了如何自主的生成数据,仍然缺少“无中生有”的能力。
为了克服VAE的缺点,也为了让生成模型更加优秀,下面看一下本章的主角——生成对抗网络(GAN)。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。