淘先锋技术网

首页 1 2 3 4 5 6 7

做笔记的目的

1、监督自己把50多个小时的视频看下去,所以每看一部分内容做一下笔记,我认为这是比较有意义的一件事情。
2、路漫漫其修远兮,学习是不断重复和积累的过程。怕自己看完视频不及时做笔记,学习效果不好,因此想着做笔记,提高学习效果。
3、因为刚刚入门深度学习,听课的过程中,理解难免有偏差,也希望各位大佬指正。

GAN

generator

输入一个分布,同时输入(不输入也可以)一个x,之后输出一个复杂的分布,就是generator。Generator有很多应用,而GAN就是训练generator的方法。
在这里插入图片描述
但是为什么输出有的时候需要是一个分布那?下面这个例子是给出一个游戏画面,预测下一个游戏画面,因为有很多种可能(turn right or turn left),如果是预测模型,模型就会两个都选,即turn right and turn left,这样预测的游戏画面就会出错。因为不可能同时向左转又向右转。
在这里插入图片描述
所以当我们任务需要创造力的时候需要生成式模型,同样的输入有不同的输出,所以就要加一个Simple Distribution。比如写诗比如画画比如聊天机器人。

Unconditional generator

这里选的分布是高斯分布,但是实际上不同的分布差距也不是很大。
在这里插入图片描述
生成图片之后在进入判别器,判断是真的还是假的。两个都在不断进化,第一代Generator 不知道如何画,Discriminator 也不是很强,两个相互进化。
在这里插入图片描述
在这里插入图片描述
这里训练的步骤就是,先让生成器随便生成,然后判别器判断,两个分开update。

  1. 固定generator G 更新discriminator D,
  2. 固定discriminator D,之后更新generator G
  3. 不断重复过程1和过程2,提高网络性能。
    在这里插入图片描述
    在这里插入图片描述

Theory Behind

生成器的目标是,让生成的分布和真是分布尽可能地相近,这里就有很多不同的方法衡量,比如,Js Divergence、KL Divergence,但是要如何计算就成了一个问题,因为我们不知道两个是什么分布。Gan让我们可以计算出Div。
在这里插入图片描述
虽然我们不知道,两个分布是什么,但是我们可以sample出一些样例。
在这里插入图片描述
我们在看看Discriminator,他的目标方程就很类似于2分类,而他的目标方程和JS divergence有关系,所以可以用这个代替,具体做法如下图:
在这里插入图片描述
large divergence 对应大的 m a x V ( D , G ) maxV(D,G) maxV(D,G),反之对应小的。
在这里插入图片描述
所以做法是如下图,将目标做了一个转化。
在这里插入图片描述
这里不是一定要用js divergence,可以用不同的divergence,不同的divergence有对应不同的方法去设计目标函数。
在这里插入图片描述

Tips for GAN

WGAN

GAN是以不好训练而闻名,所以训练GAN需要一些小技巧。首先提出一个问题,JS divergence 可能并不是非常适合。可以看出,原始的data和生成的data的分布其实并不重合。如果sampling 的不够多那么判别器可以画一条线分开,所以两个分布不重合,但是JS divergence 如果不重合就一直是log2。
在这里插入图片描述
在这里插入图片描述
上面这种图就暴露出来了问题,当两个分布不重合时,计算距离在变小但是JS divergence并不变。所以可能需要另外一种衡量方法,比如Wasserstein distance:一个分布变到另一个分布需要走多少路程。
在这里插入图片描述
但是可以从下面的这个图片看出来,不同的moving plans,计算出来的值并不相同。作者这里介绍的是,选出距离最小的作为Wasserstein distance。但是这是一个优化问题,不过先把这个问题放一放,我们继续往后看。
在这里插入图片描述
这样就可以正确的衡量了,这种方法就是WGan。
在这里插入图片描述
但是如何计算Wasserstein distance,是一个问题,这里直接说结论,如下图,然后D必须要平滑,但如何做到这个1-Lipschitz那?
在这里插入图片描述
方法如下:
原始的方法,就是限制weight,这样能让方程更加平滑。
在这里插入图片描述
也可以第二个方法,用Spectral Normalization Gan结果会比较好,就算有SNGAN,GAN也不是很好训练。
在这里插入图片描述因为两个模型是互动的,一旦一个出现问题,那么train 可能就停下来了,两个模型一定要棋逢对手,这是一个前瞻的技术,有待解决。train GAN不是一个容易的事情,但是研究的人很多。
用GAN生成文字是最困难的
在这里插入图片描述
这里训练是用梯度下降来训练,但是不能算微分,因为这个改变了一些值,输出可能不会改变,因为取了一个max。所以可以用强化学习来做,但是强化学习很难训练,GAN也很难训练,所以用GAN产生文字很难。
在这里插入图片描述
不够谷歌发的一篇论文效果还可以,ScrachGAN。
在这里插入图片描述

如何评价 GAN

很长时间GAN是用人眼来衡量的,但是人眼去判断并不一定非常可观。所以如何评价GAN的好坏,也是一个有待研究的课题。
可以跑一个分类器,对于单张图片,如果分类器的分布越密集,那么说明效果非常好。
在这里插入图片描述
将产生的东西放到一个分类,如果分布比较集中,那么效果就不错,但是这种方法不一定有用,可能会出现model collapse,可能他产生的图片一直是某几张,Diversity比较小。今天还没有很好的办法如何避免mode collapse,但是这个问题是可以看出来的。
在这里插入图片描述
但是这个问题是可以看出来的,mode Dropping产生的资料也够,但是分布没有资料的大,这样很难发现,而且mode Dropping现在并没有解决。
在这里插入图片描述
如何衡量生成器的Diversity,可以用一个分类器,对生成的图像分类,把所有的分类统计一下,如果分布均匀就说明Diversity可以。Quality 看的是一张图片,但是diversity看的是整个图片。
在这里插入图片描述
一般使用Inception Score,用Inception去衡量。可以去最后一层,取出向量看距离,sample很多,然后看看数据的分布。
在这里插入图片描述
FID算是一个比较常用的评价指标,从下图看,看起来所有的GAN都差不多。但是这个是实验的时候,用的是同一个网络架构,但是可能不同的gan适配不同的网络架构。
在这里插入图片描述
有时候GAN很好,但是不一定很好,所以Gan的评估很困难。
在这里插入图片描述

Conditional Generation

之前讲的都是随机的分布,这里可以给一个X。输出文字,然后根据z的不同,生成的图片也不同。
在这里插入图片描述
之前的判别器,不管用了。
在这里插入图片描述
可以修改一下判别器,输入两个。这个需要成对的资料,但是这样是不够的,还要加,文字和图片不配对。
在这里插入图片描述
Conditional GAN,也可以看一个文字产生图片,也可以是看一个图片,产生图片。
在这里插入图片描述
GAN虽然更真实,但是想象力更加丰富,所以一般是GAN+supervised。
在这里插入图片描述

Cycle GAN

普通的网络比较难处理没有配对的资料,但是GAN可以。
在这里插入图片描述
在这里插入图片描述
原始的GAN
在这里插入图片描述
可以看到原始的GAN,并不是很管用,因为输出和输入没有关系,可以用Cycle GAN。增加一个新的目标,这样就限制了第一个G的输出。
在这里插入图片描述
把他弄成双向的,这个就是cycle GAN。
在这里插入图片描述
Cycle GAN也可以文字风格转换,不仅仅是图像风格转换。