# 生成对抗网络

# 1.简介

生成对抗网络Generative Adversarial Networks是法国蒙特利尔大学发表在2014NIPS上的文章,提出了非常有意思的生成对抗网络。关于生成模型的介绍可以参考MITDeepLearning课程 (opens new window)

# 2.背景

# 2.1生成模型

生成模型是这样的模型,其从一个数据分布中采样一部分点作为输入,然后训练模型来表征训练数据分布。

使用生成模型的优点有:

  • 1.能够去除数据中的偏置,找到数据的公共特征
  • 2.当出现新的情况时可以做异常检测,处理未出现的情况

常见的生成模型有自编码器AutoEncoder和生成对抗网络GANs,这两种模型,一般输入是图像,输出也是图像,网络本身包含了下采样和上采样的过程,似乎把模型变量隐藏了,因此也称为隐变量模型Latent Variable Models

# 2.2自编码器

自编码器是通过下采样的编码器和上采样解码器来训练模型,使得对于输入图像得到与原图像大小相同的图像,然后最小化重建误差,来学习训练数据中的隐藏公共特征。

# 2.3变分自编码器

变分自编码器(Variational auto-encoder,VAE)对每一个样本匹配一个高斯分布,隐变量Z就是从高斯分布中采样得到的。VAE让每个高斯分布尽可能地趋于标准高斯分布,拟合过程中的误差损失则是采用KL散度作为计算。

# 3.生成对抗网络

生成对抗网络有两部分组成,一个生成器和判别器,生成器用来将一个随机的输入生成一个图像,并使该图像尽可能的接近真实图像以欺骗过判别器使判别器将生成器生成的图像当成真实图像。而判别器则尽可能的区分出生成器生成的图像和真实图像。

生成对抗网络的结构及损失函数

graph TD a(noise)-->b[Generator]-->c(generated_images) c-->d[Discriminator]-->e(fake_output) f(image)--->h[Discriminator]--->g(real_output) subgraph generated_loss sg1(ones_like_fake_output)--> sg2[cross_entropy] e-->sg2 sg2-->sg(generated_loss) end subgraph discriminator_loss ds1(ones_like_real_output)--> ds2[cross_entropy_real_loss] g-->ds2 ds4(zeros_like_fake_output)--> ds3[cross_entropy_fake_loss] e-->ds3 ds[discriminator_loss] ds2-->ds ds3-->ds end

代码实现可参考gitee仓库 (opens new window)

(adsbygoogle = window.adsbygoogle || []).push({});

# 参考资料