当前位置: 代码迷 >> 综合 >> 浅析生成对抗网络(Generative Adversarial Networks)
  详细解决方案

浅析生成对抗网络(Generative Adversarial Networks)

热度:42   发布时间:2023-12-29 00:16:57.0

目录

 

导语

聚焦GANs

训练GANs:双人游戏

GANs的卷积神经网络架构

一些有趣的例子

生成模型的分类 

总结 


导语

除却变分自编码器VAE(Variational Auto-Encoder), 生成对抗网络GAN(Generative Adversarial Networks)同样也是一种生成模型(Generative Model)。 

VAE中比较恶心的是隐变量z的求解,我们通常使用以下公式生成隐变量z的概率分布,通常假设p(z)服从标准正态分布(参数和可调整)。

VAE的问题就在于我们无法对其进行直接优化, 而是根据可能性推导和优化下限(相关博文后面会更新,详细推导VAE的整个过程)。

在VAE中,我们是通过假设隐变量z的概率密度,这是一种显式的概率密度建模方法,那我们为什么不直接强化采样能力呢?

于是乎,天降正义,GAN出现了!它不需要任何显式的概率密度函数!相反,它采用了一种类似博弈论的手段,即通过双人游戏来生成数据。

 

聚焦GANs

我们暂时先不解释这个双人游戏的定义,我们先来看GAN它解决了什么问题。

问题:在实战或者工程领域,机器学习工程师们往往需要从非常复杂,维度非常高的训练分布中做数据采样,但是这是一个非常困难的事情。

解决方案:我们可以首先从一个简单的分布(比如高斯噪声)中进行采样(类似于Importance Sampling中引入的Proposal Distribution)。然后我们通过训练,训练出一个可以将简单分布转换为复杂分布的转换器(生成器网络)。

 

训练GANs:双人游戏

这个双人游戏有两位玩家构成:

  • 生成器网络(Generative Network):生成逼真的假图片去试图欺骗判别器
  • 判别器网络(Discriminator Network):试图判别真图片和假图片,把真图片判为真,假图片判为假。

具体流程可见下图:

如上图所示,生成器网络在接受随机噪声z后生成了相应的仿真假图片(Fake Image),假图片与训练集中的真图片一道作为判别器网络的输入,最后判别器会输出图片的真伪信息。

那么,使用数学公式来表达上述过程即为:

上图公式即,

需要找到判别器参数\theta_d,使得中括号中的公式取得极大值;

同时,需要找到生成器参数\theta_g,使得中括号中的公式取得极小值。

判别器(Discriminator)对真实图片的判别的输出介于(0,1)之间

因此,对于判别器Discriminator(\theta_d),我们希望使得D_{\theta_d}(x)接近1(将真实的图片判为真),同时希望D_{\theta_d}(G_{\theta_{g}}(z))接近0(将假图片判为假)。

对于生成器Generator(\theta_g),我们希望D_{\theta_d}(G_{\theta_{g}}(z))接近1(将假图片判为真)。

那么,我们可以将上图公式替换成两个子任务,即:

1. 判别器目标函数(梯度上升)(如下图)

 

2. 生成器目标函数(梯度下降)(如下图)

 

但在具体实践过程中,我们发现这种梯度下降生成器目标函数优化效果并不是很好。原因在于,当生成器能力并不是很强也就是生成的样本还非常假的时候,我们非常想要去优化它,但此时这一区域的梯度太过平整,也就意味着优化速度非常非常慢,但是当生成器已经具备很好的生成以假乱真的图片时,梯度倒好起来了。

 

为解决这个问题,我们将生成器目标函数等价地修改为

等价于最大化判别器将假图片判为真的概率。

比较修改前后的生成器目标函数,很明显,红线的更好。

 

 那么我们可以将以上过程再转换为伪代码的形式:

后续博客中会给大家带来Wasserstein GAN的介绍。

 

GANs的卷积神经网络架构

  • 生成器是具有分数步(可以是非整数步)的卷积的上采样网络
  • 鉴别器是一个卷积网络
  • 对于判别器而言,将所有池化层替换为strided卷积;对于生成器而言,将所有池化层替换为fractional-strided(分数步)卷积
  • 在生成器和判别器中都使用batchnorm
  • 移除所有深层结构中的隐层全连接层
  • 除去输出层使用Tanh以外,生成器的其他层全都使用ReLU作为激活函数
  • 判别器的所有函数都是用LeakyReLU作为激活函数

GANs生成器的卷积神经网络架构如下图所示

 

一些有趣的例子

 

 

 

生成模型的分类 

 

总结 

最后,再总结一下三种常见的生成模型

  • PixelRNN 和 PixelCNN: 显式概率密度模型,有较好的优化性能和采样能力,但是顺序生成效率低下。
  • 变分自编码器(VAE):显式概率密度模型,优化likelihood的变分下限。 有用的latent representation以及inference queries。 但是采样的质量并不是最好的。
  • 生成对抗网络(GANs):博弈论方法,最好的样本!但是训练起来可能很棘手且不稳定,没有inference queries。

 

 

 

  相关解决方案