【李宏毅】-生成对抗式网络(GAN)

生成对抗式网络GAN

1. Network as Generator

输入不再是只是x,还有一个simple distribution(样本分布),输出也是一个分布
【李宏毅】-生成对抗式网络(GAN)_第1张图片
Why distribution
不同的分布即意味着:相同的输入会有不同的输出
尤其在任务需要创造力的时候,需要分布

2. Anime Face Generation

2.1 Unconditional generation(输入无x)

输入一个
假设z是从normal distribution中sample出来的向量,而输出y是二次元任务的脸,生成图片其实就是生成非常高维的向量,不同的z,输出都是二次人物的脸。
【李宏毅】-生成对抗式网络(GAN)_第2张图片

2.2 Discriminator

scaler越大,表示越像真实的二次元任务的图像
【李宏毅】-生成对抗式网络(GAN)_第3张图片

2.3 Basic idea of GAN

关于generator和discriminator,像是相互促进的存在
在生成二次人物的脸的过程中:
最开始generator的参数是随机的,生成完的图像会丢给discriminator,discriminator拿generator生成的图片和真实的图片做比较,判断是不是生成的,然后generator就会进化,进化的目标是为了骗过discriminator。
第二代的generator会再生成一组图片,然后再交给第二代的discriminator判断,循环往复,直到停止训练。
【李宏毅】-生成对抗式网络(GAN)_第4张图片

2.4 Algorithm

  • 初始化一个generator和一个discriminator
  • 在每个训练步骤下
    • 固定generator G,更新discriminator D。用generator生成一些图片后,和真实的样本做对比,去训练一个discriminator,D的目标就是去分辨真实的二次元任务跟G产生的二次元人物之间的差异。对于D来说,可以把真实是label标记为1,生成的label标记为2,这样的话,可以看成一个分类问题,训练一个分类器,输出图片的标签。或者看成regression的问题把真实是label标记为1,生成的label标记为0,让D学着去分辨。
      【李宏毅】-生成对抗式网络(GAN)_第5张图片
    • 固定discriminator D,训练generator G训练的目的是为了让Generator骗过Discriminator,即让Discriminator的输出值越大越好。将输入z丢进G,G生成图片(高维vector),图片丢进D,D输出一个分数,固定D的参数训练G,D的输出越大越好。而G和D连起来其实可以看成一个大的network,只不过中间有一个高维vector的输出, 这个vector跟图片维度是相同的。训练的方法跟其他的网络的训练没有差异。
      【李宏毅】-生成对抗式网络(GAN)_第6张图片
    • 再固定G,训练D,反复执行以上两个步骤,直到得到满意的结果停止训练。

3. Our Objective

PG是Generator生成的图片的分布,Pdata是真实的数据的分布,我们希望PG和Pdata之间的divergence越小越好,这个divergence就是PG和Pdata之间的某种距离。

【李宏毅】-生成对抗式网络(GAN)_第7张图片

3.1 如何计算divergence?

在GAN中,只需要sample就足够了
我们可以从真实数据库中的图片中sample出Pdata,也可以从G中sample出PG
然后,使用Discriminator就够了
【李宏毅】-生成对抗式网络(GAN)_第8张图片
在Discriminator中,有PdataPG用于训练,如果是Pdata,就给高的分数,如果是PG,就给低的分数,公式如下:
【李宏毅】-生成对抗式网络(GAN)_第9张图片
我们希望V越大越好,那Dy越大越好,所以从真实数据sample的数据给更高的分数,PG反之。
所以Div(PG, Pdata)可以替换成maxV(D, G),就有了下面的式子

【李宏毅】-生成对抗式网络(GAN)_第10张图片

4. 训练GAN的一些技巧

4.1 JS divergence is not suitable

在大多数情况下,PG和Pdata是不能重叠的
【李宏毅】-生成对抗式网络(GAN)_第11张图片
这样的情况下,计算的JS divergence都是log2.
【李宏毅】-生成对抗式网络(GAN)_第12张图片

4.2 Wasserstein distance

可以吧下图中P想象成一堆土,Q想象成堆土的目的地,要把P推到Q处(形状保持一致),推动的距离d就表示wasserstein distance
【李宏毅】-生成对抗式网络(GAN)_第13张图片
但如果P和Q比较复杂,那么就需要做一些处理才能移动,穷举所有把P变成Q的方法,距离最小的那个,就是wasserstein distance
【李宏毅】-生成对抗式网络(GAN)_第14张图片
所以换成wasserstein distance,我们可以知道G是不是做的越来越好
【李宏毅】-生成对抗式网络(GAN)_第15张图片

4.3 WGAN

使用Wseeerstein distance评估Pdata和PG之间的距离
【李宏毅】-生成对抗式网络(GAN)_第16张图片

你可能感兴趣的:(机器学习深度学习,生成对抗网络,机器学习,人工智能)