GAN理论

简介

对抗神经网络其实是两个网络的组合,可以理解为一个网络生成模拟数据另一个网络判断生成的数据是真实的还是模拟的。生成模拟数据的网络要不断优化自己让判别的网络判断不出来,判别的网络也要优化自己让自己判断得更准确。二者关系形成对抗,因此叫对抗生成神经网络。

GAN由generator(生成式模型)和discriminator(判别式模型)两部分构成。

$\bullet$ generator:主要是从训练数据中产生相同分布的samples,对于输入x,类别标签y,在生成式模型中估计其联合概率分布(两个及以上随机变量组成的随机向量的概率分布)。

$\bullet$ discriminator:判断输入是真实数据还是generator生成的数据,即估计样本属于某类的条件概率分布。它采用传统的监督学习的方法。 

基本结构

生成器

生成式模型又叫生成器。它先用一个随机编码向量来输出一个模拟样本。

一般的生成模型, 必须先初始化一个“假设分布”,即后验分布, 通过各种抽样方法抽样这个后验分布,就能知道这个分布与真实分布之间究竟有多大差异。这里的差异就要通过构造损失函数(loss function)来估算。

判别器

判别式模型又叫判别器。它的输入是一个样本(可以是真实样本也可以是模拟样本),输出一个判断该样本是真样本还是模拟样本(假样本)的结果

总结:判别器的目标是区分真假样本,生成器的目标是让判别器区分不出真假样本,两者目标相反,存在对抗。

我们可以把生成模型看作一个伪装者,而把判别模型看成一个警察。生成模型通过不断地学习来提高自己的伪装能力,从而使得生成出来的数据能够更好地“欺骗”判别模型。而判别模型则通过不断的训练来提高自己的判别能力,能够更准确地判断出数据的来源。GAN就是这样一个不断对抗的网络。

$\bullet$ 生成模型以随机变量作为输入,其输出是对真实数据分布的一个估计。
$\bullet$ 生成数据和真实数据的采样都由判别模型进行判别,并给出真假性的判断和当前的损失。
$\bullet$ 利用反向传播,GAN对生成模型和判别模型进行交替优化。

例子

假设数据的概率分布为M,但是我们不知道具体的分布和构造是什么样的,就好像是一个黑盒子。为了了解这个黑盒子,我们就可以构建一个对抗生成网络:

$\bullet$ 生成模型G:使用一种我们完全知道的概率分布N来不断学习成为我们不知道的概率分布M.
$\bullet$ 判别模型D:用来判别这个不断学习的概率是我们知道的概率分布N还是我们不知道的概率分布M。

https://arxiv.org/abs/1406.2661

模型训练

训练两个模型的方法:单独交替迭代训练
判别模型: 希望真样本集尽可能输出1,假样本集输出0。对于判别网络,此时问题转换成一个有监督的二分类问题,直接送到神经网络模型中训练。
生成网络:目的是生成尽可能逼真的样本。在训练生成网络的时候,需要联合判别网络才能达到训练的目的。

总结:首先固定G,单独训练D,为了让D得到充分训练,有的时候要迭代多次。D训练完毕后,固定D,训练G,如此循环。训练的方式是反向传播算法。

数学推导

符号定义

  • $P_{data}(x)$:真实数据的分布

  • $P_z(Z)$:噪声数据

  • $P_g(x)$:生成模型生成的数据分布

  • D(X):判别器

  • G(x):生成器

定义生成器和判别器

`

由上式可知:当取得最大值。

`

由上式可知:当取得最大值。

所以为了我们的判别模型越来越好,能力越来越强大,定义目标函数为:

$V(G,D)= logD(x) + log(1-D(G(z)))$

要使判别模型取得最好,所以需要使V(G,D)V(G,D)取得最大,即:

$D = agrmax_DV(G,D)$

判别模型最好的时候,最好的生成模型就是目标函数取得最小的时候:

$G=argmin_G(aggmax_D(V(G, D)))$

所以经过这一系列的讨论,这个问题就变成了最大最小的问题,即:

`

最优判别模型

最终的目标函数:

`

令:$V(G,D)=f(y), P_{data}(x)=a, P_g(x)=b$

所以:$f(y)=alogy+blog(1-y)$

因为: $a+b \ne 0$

所以最大值:$\frac{a}{a+b}$

最后,我们得到的最优判别模型就是:

`

由于生成对抗网络的目的是:得到生成模型可以生成非常逼真的数据,也就是说是和真实数据的分布是一样的。因此最优的判别模型的输出为:

`

其中:的数据分布是一样的。

也就是说当D输出为0.5时,说明鉴别模型已经完全分不清真实数据和GAN生成的数据了,此时就是得到了最优生成模型了。

特点

优点:

$\bullet$ 模型优化只用到了反向传播,而不需要马尔科夫链。
$\bullet$ 训练时不需要对隐变量做推断。
$\bullet$ 理论上,只要是可微分函数都能用于构建生成模型G和判别模型D,因而能够与深度神经网络结合–>深度产生式模型。
$\bullet$ 生成模型G的参数更新不是直接来自于数据样本,而是使用来自判别模型D的反向传播梯度。

缺点:

$\bullet$ 可解释性差,生成模型的分布没有显示的表达。它只是一个黑盒子一样的映射函数:输入是一个随机变量,输出是我们想要的一个数据分布。
$\bullet$ 比较难训练,生成模型D和判别模型G之间需要很好的同步。例如,在实际中我们常常需要 D 更新 K次, G 才能更新 1 次,如果没有很好地平衡这两个部件的优化,那么G最后就极大可能会坍缩到一个鞍点。

------ 本文结束 🎉🎉 谢谢观看 ------
0%