GAN笔记

GAN

首先我们知道真实图片集的分布 Pdata(x),x 是一个真实图片,可以想象成一个向量,这个向量集合的分布就是 Pdata。我们需要生成一些也在这个分布内的图片,如果直接就是这个分布的话,怕是做不到的。

我们现在有的 generator 生成的分布可以假设为 PG(x;θ),这是一个由 θ 控制的分布,θ 是这个分布的参数(如果是高斯混合模型,那么 θ 就是每个高斯分布的平均值和方差)

假设我们在真实分布中取出一些数据,{x1, x2, ... , xm},我们想要计算一个似然 PG(xi; θ)。

对于这些数据,在生成模型中的似然就是

image

我们想要最大化这个似然,等价于让 generator 生成那些真实图片的概率最大。这就变成了一个最大似然估计的问题了,我们需要找到一个 θ* 来最大化这个似然。

image

但这里的​假设的是高斯混合分布,如果不是高斯分布我们怎么表示PG呢,很难表示,也就算不出极大似然估计。但是我们的神经网络是万能的,所以才产生了GAN

2.GAN

大名鼎鼎的 GAN 是如何生成图片的呢?首先大家都知道 GAN 有两个网络,一个是 generator,一个是 discriminator,从二人零和博弈中受启发,通过两个网络互相对抗来达到最好的生成效果。流程如下:

image

主要流程类似上面这个图。首先,有一个一代的 generator,它能生成一些很差的图片,然后有一个一代的 discriminator,它能准确的把生成的图片,和真实的图片分类,简而言之,这个 discriminator 就是一个二分类器,对生成的图片输出 0,对真实的图片输出 1。

接着,开始训练出二代的 generator,它能生成稍好一点的图片,能够让一代的 discriminator 认为这些生成的图片是真实的图片。然后会训练出一个二代的 discriminator,它能准确的识别出真实的图片,和二代 generator 生成的图片。以此类推,会有三代,四代。。。n 代的 generator 和 discriminator,最后 discriminator 无法分辨生成的图片和真实图片,这个网络就拟合了。

这就是 GAN,运行过程就是这么的简单。这就结束了嘛?显然没有,下面还要介绍一下 GAN 的原理。

3.原理

首先我们知道真实图片集的分布 Pdata(x),x 是一个真实图片,可以想象成一个向量,这个向量集合的分布就是 Pdata。我们需要生成一些也在这个分布内的图片,如果直接就是这个分布的话,怕是做不到的。

我们现在有的 generator 生成的分布可以假设为 PG(x;θ),这是一个由 θ 控制的分布,θ 是这个分布的参数(如果是高斯混合模型,那么 θ 就是每个高斯分布的平均值和方差)

假设我们在真实分布中取出一些数据,{x1, x2, ... , xm},我们想要计算一个似然 PG(xi; θ)。

对于这些数据,在生成模型中的似然就是

image

我们想要最大化这个似然,等价于让 generator 生成那些真实图片的概率最大。这就变成了一个最大似然估计的问题了,我们需要找到一个 θ* 来最大化这个似然。

image

寻找一个 θ* 来最大化这个似然,等价于最大化 log 似然。因为此时这 m 个数据,是从真实分布中取的,所以也就约等于,真实分布中的所有 x 在 PG 分布中的 log 似然的期望。

真实分布中的所有 x 的期望,等价于求概率积分,所以可以转化成积分运算,因为减号后面的项和 θ 无关,所以添上之后还是等价的。然后提出共有的项,括号内的反转,max 变 min,就可以转化为 KL divergence 的形式了,KL divergence 描述的是两个概率分布之间的差异。

所以最大化似然,让 generator 最大概率的生成真实图片,也就是要找一个 θ 让 PG 更接近于 Pdata。

那如何来找这个最合理的 θ 呢?我们可以假设 PG(x; θ) 是一个神经网络。

首先随机一个向量 z,通过 G(z)=x 这个网络,生成图片 x,那么我们如何比较两个分布是否相似呢?只要我们取一组 sample z,这组 z 符合一个分布,那么通过网络就可以生成另一个分布 PG,然后来比较与真实分布 Pdata。

大家都知道,神经网络只要有非线性激活函数,就可以去拟合任意的函数,那么分布也是一样,所以可以用一直正态分布,或者高斯分布,取样去训练一个神经网络,学习到一个很复杂的分布。

image

可以采样,但不能知道data散度

如何来找到更接近的分布,这就是 GAN 的贡献了。先给出 GAN 的公式:

image

这个式子的好处在于,固定 G,max V(G,D) 就表示 PG 和 Pdata 之间的差异,然后要找一个最好的 G,让这个最大值最小,也就是两个分布之间的差异最小。

image

表面上看这个的意思是,D 要让这个式子尽可能的大,也就是对于 x 是真实分布中,D(x) 要接近与 1,对于 x 来自于生成的分布,D(x) 要接近于 0,然后 G 要让式子尽可能的小,让来自于生成分布中的 x,D(x) 尽可能的接近 1。

现在我们先固定 G,来求解最优的 判别器D:

image
image

拿到一个x,在data里计算一下概率是Pdata,在G里计算一下是PG,代入D*就是D

image

对于一个给定的 x,得到最优的 D 如上图,范围在 (0,1) 内,把最优的 D* 带入

image

即得到了maxV

image
image

JS divergence 是 KL divergence 的对称平滑版本,表示了两个分布之间的差异,这个推导就表明了上面所说的,固定 G。

image

表示两个分布之间的差异,最小值是 -2log2,最大值为 0。

现在我们需要找个 G,来最小化

image

观察上式,当 PG(x)=Pdata(x) 时,G 是最优的。

GAN到底在做一个什么事情?

  • 最大化判别器损失,等价于 计算合成数据分布和真实数据分布的JS散度

  • 最小化生成器损失,等价于最小化JS散度(也就是生成器模型)

4.训练

有了上面推导的基础之后,我们就可以开始训练 GAN 了。结合我们开头说的,两个网络交替训练,我们可以在起初有一个 G0 和 D0,先训练 D0 找到 :

image

然后固定 D0 开始训练 G0, 训练的过程都可以使用 gradient descent,以此类推,训练 D1,G1,D2,G2,...

但是这里有个问题就是,你可能在 D0* 的位置取到了:

image

然后更新 G0 为 G1,可能

image

了,但是并不保证会出现一个新的点 D1* 使得

image

这样更新 G 就没达到它原来应该要的效果,如下图所示:

image

避免上述情况的方法就是更新 G 的时候,不要更新 G 太多。

知道了网络的训练顺序,我们还需要设定两个 loss function,一个是 D 的 loss,一个是 G 的 loss。下面是整个 GAN 的训练具体步骤:

image

上述步骤在机器学习和深度学习中也是非常常见,易于理解。

5.存在的问题

但是上面 G 的 loss function 还是有一点小问题,下图是两个函数的图像:

image

log(1-D(x)) 是我们计算时 G 的 loss function,但是我们发现,在 D(x) 接近于 0 的时候,这个函数十分平滑,梯度非常的小。这就会导致,在训练的初期,G 想要骗过 D,变化十分的缓慢,而上面的函数,趋势和下面的是一样的,都是递减的。但是它的优势是在 D(x) 接近 0 的时候,梯度很大,有利于训练,在 D(x) 越来越大之后,梯度减小,这也很符合实际,在初期应该训练速度更快,到后期速度减慢。

所以我们把 G 的 loss function 修改为

image

这样可以提高训练的速度。

还有一个问题,在其他 paper 中提出,就是经过实验发现,经过许多次训练,loss 一直都是平的,也就是

image

JS divergence 一直都是 log2,PG 和 Pdata 完全没有交集,但是实际上两个分布是有交集的,造成这个的原因是因为,我们无法真正计算期望和积分,只能使用 sample 的方法,如果训练的过拟合了,D 还是能够完全把两部分的点分开,如下图:

image

对于这个问题,我们是否应该让 D 变得弱一点,减弱它的分类能力,但是从理论上讲,为了让它能够有效的区分真假图片,我们又希望它能够 powerful,所以这里就产生了矛盾。

还有可能的原因是,虽然两个分布都是高维的,但是两个分布都十分的窄,可能交集相当小,这样也会导致 JS divergence 算出来 =log2,约等于没有交集。

解决的一些方法,有添加噪声,让两个分布变得更宽,可能可以增大它们的交集,这样 JS divergence 就可以计算,但是随着时间变化,噪声需要逐渐变小。

还有一个问题叫 Mode Collapse,如下图:

image

这个图的意思是,data 的分布是一个双峰的,但是学习到的生成分布却只有单峰,我们可以看到模型学到的数据,但是却不知道它没有学到的分布。

造成这个情况的原因是,KL divergence 里的两个分布写反了

image

这个图很清楚的显示了,如果是第一个 KL divergence 的写法,为了防止出现无穷大,所以有 Pdata 出现的地方都必须要有 PG 覆盖,就不会出现 Mode Collapse。


image

这里假设

image
image
image

生成模型其实就是在学习(找到)数据的分布

每一个图片都是高维空间中的一个点,在真实分布内的点(图片)更真实,不在真实分布内的点(图片)更假,而且距离越远越假

image

最大化极大估计==最小化KL散度

image
image

但是很多情况下,假设数据符合高斯分布是不合理的,数据分布是无法用公式显示第写出来的

因此用高斯模型去拟合数据分布,生成的结果总是不令人满意

我们需要一个更通用的生成模型,可以拟合任意数据分布

神器:神经网络

一个神话网络可以学习任意复杂数据分布

image

DIV这个模型没法优化,

image
image

积分里的每一项都可以单独算。对D求导。

Given x, the optimal D* maximizing

PlogD + Plog(1-D)

image
image

如何理解最优判别器:

  • 一个样本x来自真实分布和生成分布概率的相对比例

  • 如果来自生成分布的概率为0,那么就给出概率是1,即确定该样本是真的

  • 如果来自真实分布的概率是1,那么就给出概率是0,即确定该样本是假的。

  • 如果来自真实概率的分布 等于 来自生成分布的概率,那么就给出概率0.5,即不确定

image

生成器的 等于 JS散度

image

cGAN

传统的GAN无法控制生产数据的类别

很多有意义的任务都需要学习条件生产模型

image

DCGAN

原始GAN,使用全连接网络作为判别器和生成器

  • 不利于建模图像信息

  • 参数量大,需要大量的计算资源,难以优化

DCGAN,使用卷积神经网络作为判别器和生成器

  • 通过大量的工程实践,经验性地提出一系列的网络结,来有效地建模图像数据构和优化策略

  • 通过Pooling下采样,Pooling是不可学习的,这可能造成GAN训练困难

  • 使用滑动卷积stride convolution所有参数都可学习,实验发现效果更好

  • 通过插值法上采样,插值方法是固定的,不可学习的,这可能给训练造成困难

  • 使用滑动反卷积所有参数都可学习,实验发现效果更好

批归一化

IID独立同分布假设,就是假设训练数据和测试数据是满足相同分布的,这是通过训练数据获得的模型能够在测试集获得好的效果的一个基本保障

BatchNorm就是深度神经网络训练过程中使得每一层神经网络的输入保持相同分布的

优势:加速神经网络收敛,减小神经网络参数对于初始化的依赖

实验发现效果更好

激活函数:ReLU

image
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容