当先锋百科网

首页 1 2 3 4 5 6 7

basic idea of GAN

在这里插入图片描述

generator

对于generation的认识
在这里插入图片描述
我们的generator可以是一个NN,也可以是一个function(在DCGAN中是CNN)
在这里插入图片描述

discriminator

同样判别器也可以是一个NN、function…
在这里插入图片描述
output是一个数值,判断input的“好坏”
在这里插入图片描述

基础的思想

那生物进化的例子来说,
1.首先蝴蝶是鲜艳的,那么波比鸟知道说有鲜艳颜色的很有可能是蝴蝶
2.蝴蝶开始进化,颜色不再鲜艳,这个时候波比鸟需要学习到说有蝴蝶纹理的可能是蝴蝶
3.蝴蝶再次进化,纹理和树叶类同,这个时候波比鸟就发现不了蝴蝶了

在这里插入图片描述
作假钱的例子:
在这里插入图片描述

那我们的GAN的思想也是类似:

在这里插入图片描述

Theoretical Results

在训练的时候,我们希望得到以下图这个结果:
在这里插入图片描述
对于上图的解释:
A、绿线表示我们生成样本的概率分布 黑色表示是真实样本的概率分布 蓝色表示我们辨别器判断什么时候是真的还是假的

B、我们首先需要让判别器知道什么是好的什么是坏的

C、然后固定住判别器 ,让生成器更加接近真实的样本,骗过辨别器

到最后 如果生成器和真实的样本完全一致,辨别器就无法区分出是真实的还是生成的

手写数字举例

工作流程
在这里插入图片描述
上图中的目标函数:

1.整个式子由两项构成。x表示真实图片,z表示输入G网络的噪声,而G(z)表示G网络生成的图片。

2.D(x)表示D网络判断真实图片是否真实的概率(因为x就是真实的,所以对于D来说,这个值越接近1越好,而D(G(z))是D网络判断G生成的图片的是否真实的概率。

3.G的目的:G应该希望自己生成的图片“越接近真实越好"。

4·D的目的:D的能力越强,D(x)应该越大,D(G(x))应该越小。这时V(D,G)会变大。因此式子对于D来说是求最大(max_D)

algorithm

初始化G、D

在每一次训练轮回中:

step1:fix G,update D

因为我们判别器首先需要知道什么是好的,什么是不好的,才能给G生成的图片打分,这个时候需要给予真实图片的分数越高越好,给G生成的图片越小越好。
在这里插入图片描述

step2:fix D, update G

现在D给予我们G生成的image分数很低,那么我们G需要进步,骗过现在的D,得到更高的分数,也就是越来越接近真实的图片。
在这里插入图片描述
整个流程:

在这里插入图片描述

Advantages and disadvantages

advantages

1.可以产生更加清晰的图片,更加真实的样本

2.无监督的学习,可以被广泛用在无监督学习和半监督学习领域

3.GAN应用到一些场景上,比如图片风格迁移,超分辨率,图像补全,去噪,避免了损失函数设计的困难,只要有一个的基准,直接上判别器,剩下的就交给对抗训练了。

disadvantages

这个部分会细说GAN的一些问题:训练困难、生成器和判别器的loss无法指示训练进程、生成样本缺乏多样性等问题。

第一个问题:训练困难、不稳定

问题的根源——目标函数对D(这个时候G是固定住的,去找到最优的判别器,即最大化目标函数的时候得到D):
在这里插入图片描述
我们对这个目标函数进行变形,:
在这里插入图片描述
去简化算式,然后求导,得到最优的D:

在这里插入图片描述
在这里插入图片描述
但是我们在训练GAN的时候,我们说不能把判别器训练得太好,否则在实验中生成器会完全学不动(loss降不下去),这是为什么呢?

我们接着对上面的式子变形,我们已经知道了最优的D是什么样子的,我们把它代入到原本的目标函数中去。
在这里插入图片描述
我们为什么要向上面那样去做呢,是为了将我们的目标函数转化成JS散度。

(预先科普一下JS散度的公式)
在这里插入图片描述
简单的转换:
在这里插入图片描述
得到的结论:根据原始GAN定义的判别器loss,我们可以得到最优判别器的形式;而在最优判别器的下,我们可以把原始GAN定义的生成器loss等价变换为最小化真实分布Pdata与生成分布PG之间的JS散度。我们越训练判别器,它就越接近最优,最小化生成器的loss也就会越近似于最小化Pdata和PG之间的JS散度

所以我们发现我们的最优化D是和JS散度有关系的,那这个会有什么问题呢?问题在JS散度上面。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第二个问题:多样性不足

生成器的loss:
在这里插入图片描述


我们对KL散度进行变形:
在这里插入图片描述
我们对生成器的loss进行变形(就是上面的公式左右移动一下):
在这里插入图片描述
我们会发现很严重的问题:

1.它同时要最小化生成分布与真实分布的KL散度,却又要最大化两者的JS散度,一个要拉近,一个却要推远。

2.KL散度项也有毛病,因为KL散度不是一个对称的衡量

在这里插入图片描述
在这里插入图片描述

development

后面会一个一个提到。-_-