admin 管理员组

文章数量: 887021

GAN

1 GAN概述

GAN主要由两个网络组成,一个是生成网络G(Generator),另一个是判别网络D(Discriminator)。
以图片生成为例:

  • G是一个生成图片的网络,它的输入是一个随机噪声z,通过这个噪声生成的图片记作G(z)
  • D是一个判别网络,它可以判别一张图片是不是真实的。它的输入是x,x表示一张图片;输出是D(x),表示图片x是真实图片的概率,如果为1,则表示这张图片是真实的概率为100%,如果为0,则表示这张图片是真实的概率为0%

在训练过程中,G的目标就是尽量生成真实的图片去欺骗判别网络D。而D的目标就是尽量把G生成的图片和真实的图片分别开来。这样,G和D构成了一个动态的“博弈过程”。

最后博弈的结果是什么?

在最理想的状态下,G可以生成“以假乱真”的图片G(z)。对于D来说,它难以判定G生成的图片究竟是不是真实的,因此D(G(z)) = 0.5。

这样我们的目的就达成了:我们得到了一个生成式的模型G,它可以用来生成图片。

定义一个模型来作为生成器G(图中蓝色部分Generator),能够输入一个向量,输出手写数字大小的像素图像。

定义一个分类器来作为判别器D(图中红色部分Discriminator)用来判别图片是真的还是假的(或者说是来自数据集中的还是生成器中生成的),输入为手写图片,输出为判别图片的标签。

2 模型推导

3 GAN的缺陷

(1)模型坍塌(Model collapse)
(2)梯度消失
(3)训练不稳定,训练缓慢

4 优化模型

4.1 DCGAN

全称:Deep Convolutional GAN

4.1.1 概述

使用CNN的方式来实现GAN,在经典CNN中通常是使用卷积逐层实现信息提取,用pooling实现信息筛减。但是在GAN中使用CNN时,需要使用到转置卷积,生成器G将输入的噪声z通过一层层的转置卷积将信息扩充,生成与目标相似的信息。

DCGAN生成器G的结构如图所示:

转置卷积示意图:

4.1.2 缺陷

1)生成质量不高
2)当需要生成的图片太大的时候,训练的稳定性有问题
3)模型坍塌
4)梯度消失

4.2 LSGAN

全称:Least Squares GAN

4.2.1 概述

LSGAN是为了解决梯度消失和模型坍塌这一系列问题而提出的一种方法。

它通过修改训练中的Loss来改进模型。使用Least Squares来作为Loss,让梯度更有效的传递回去。

4.2.2 Loss分析

上面的经典GAN和DCGAN使用的是sigmoid cross entropy,但是sigmoid的梯度范围非常有限,如果梯度无法有效的传递给网络,那么会导致1)网络的参数更新缓慢;2)网络趋向于停止学习


从上面两幅图可以看出,sigmoid的梯度值是最小的。

LSGAN通过修改loss,将sigmoid替换为least squares
sigmoid

MeanSquaredError

4.2.3 缺陷

1)新的loss实现方式知识优化了梯度传递中的问题,但是仍然存在模型坍塌的问题。
2)在训练过程中,生成器和判别器是在一种对抗的状态,但是任何一方太强,就会碾压对方,对抗的平衡被打破,从而导致训练失败。

4.3 WGAN

全称:Wasserstein GAN
WGAN使用了一种更好的方式来测量生成数据与真实数据的差距,并用这种方式来拉近他们的距离

4.3.1 问题提出

1)梯度上的问题
在经典GAN中,它使用的是一种叫做JS散度的数据分布测量方法。知乎上的这篇文章从数学的角度分析了经典GAN中JS散度的缺陷——当两个分布没有重叠部分,或重叠部分比较小的话,其可以用来更新模型的梯度就是0,或忽略不计。

2)模型坍塌的问题
经典GAN中还存在模型塌陷的问题,导致生成器G生成的模式固定,生成多样性非常少。

4.3.2 解决问题

WGAN中,使用Wasserstein距离来替换经典GAN中loss使用的JS散度

上面公式的详细理解可以参考知乎中的这篇文章

4.3.3 缺陷

WGAN从GAN的理论上深度剖析了经典GAN中loss的劣势,并提出了释放GAN学习能力的方法,用Wasserstein (W) distance释放GAN的学习力。不过由于里面用了一个clip截断网络参数的做法,让GAN的学习力还没有完全的发挥出来。

4.4 WGAN-gp

全称:WGAN with gradient penalty

WGAN-gp是对上面提出的WGAN的一种改良:用一种梯度惩罚的方法替换 clip weights

WGAN在为了保证1-Lipschitz这种约束条件时,使用了clip weights的方法,局限住判别器的能力,但是这种一刀切肯定是不好的。WGAN-gp为了解决这种一刀切,提出了一种更柔和的方式,也就是使用gradient penalty来约束。

4.5 WGAN-div

全称:Wasserstein Divergence for GANs

在WGAN-gp中,为了满足1-Lipschitz约束,训练出好效果,作者采用了真假数据的插值方法,来模拟全空间的均匀分布。WGAN-div的作者认为,这种做法是一种机械性的,很难靠有限的采样,模拟出这种全空间分布。

4.6 SAGAN

全称:Self-Attention GAN
SAGAN中引入了注意力机制,让模型可以有重点的观察、分析,从而生成效果更好的图像。简单的来说就是:围绕着重点画画,画出来的画更有神

4.7 PGGAN

全称:Progressive Growing GAN
GAN 在小尺寸上图片(<60px)的生成任务已经可以达到相对比较好的效果了,但是继续扩大尺寸,比如到到1024px,生成的难度是指数型增加的, 因为可以尝试的排列组合数是指数型增高。

训练难度的提高,将会出现几个问题:

  • 训练时间的指数型加长
  • 训练效果的降低
  • 有可能压根训练不出来,或只能训练出模糊的图片

PGGAN 从训练方法上革新,实现分阶段,从易到难,从简单的小任务到大任务过度型学习

PGGAN的训练方式如图所示:

  1. Generator 生成 44 的图片,Discriminator 识别 44 的图片
  2. 生成 88, 识别 88
  3. 生成 1616, 识别 1616
  4. 生成 10241024, 识别 10241024

参考资料

[1] GAN学习指南:从原理入门到制作生成Demo
[2] 通俗理解生成对抗网络GAN
[3] 你的GAN训练得如何–GAN 的召回率(多样性)和精确率(图像质量)方法评估
[4] 生成对抗网络——GAN(一)
[5] GAN生成对抗网络——莫烦
[6] 通俗理解GAN(一):把GAN给你讲得明明白白

本文标签: GAN