李宏毅生成对抗网络2021学习笔记

GAN

    • 什么是generator?
    • GAN的理论介绍
    • GAN的训练技巧
    • GAN的评价
    • Conditional generation

什么是generator?

有一个从一个简单分布(这种分布的表达式我们可以写出来)这个网络以这个分布中采样得到的向量作为输入,输出另一个复杂的分布。能够做到这种事情的网络就是生成式网络。
李宏毅生成对抗网络2021学习笔记_第1张图片
为什么要是一个“分布”?
视频预测:
李宏毅生成对抗网络2021学习笔记_第2张图片
如果不是分布的话,可能在遇到某一情况下时,向左转和右转的情况同时存在资料库中,精灵就会分裂成两个。

李宏毅生成对抗网络2021学习笔记_第3张图片
如果我们在输入中加入一个分布中的采样,他的输出也就是有概率的一个分布。
李宏毅生成对抗网络2021学习笔记_第4张图片
当下最有名的生成器:generative adversarial network (GAN)
unconditional GAN:输入只有采样的分布,没有x
李宏毅生成对抗网络2021学习笔记_第5张图片
在GAN中,除了Generator还要训练一个Discriminator,它输入Gen生成的分布,给这个结果打分(输出一个标量)
李宏毅生成对抗网络2021学习笔记_第6张图片
要指出的是GAN的generator和discriminator都是自己设计的,可以是CNN也可以是transformer。

算法步骤:
李宏毅生成对抗网络2021学习笔记_第7张图片
李宏毅生成对抗网络2021学习笔记_第8张图片

GAN的理论介绍

李宏毅生成对抗网络2021学习笔记_第9张图片
pg是生成的分布,pdata是真实的分布,目标:Pg和Pdata越接近越好。
我们衡量两个分布之间的差别,用到Div函数,我们要做的就是找一组generator的参数,使得两个分布相近。
李宏毅生成对抗网络2021学习笔记_第10张图片
问题:实际操作中Div函数很难计算,因为实际上要知道pg和pdata的表达形式几乎是不可能的。但是GAN在训练的时候,只需要能够从两个分布中采样出数据来就可以计算散度。
李宏毅生成对抗网络2021学习笔记_第11张图片
计算散度依靠的是discriminator
我们要训练D,使得真实分布中采样的数据得分高,虚假数据得分低。在训练D使得其目标函数最大化的时候,红框框部分可以通过推导证明和JS divergence是有关的。
所以D的目标函数,就可以反映出两个分布的散度。
李宏毅生成对抗网络2021学习笔记_第12张图片

所以我们就用红框框的式子代替G的目标函数
在这里插入图片描述
在这里插入图片描述
李宏毅生成对抗网络2021学习笔记_第13张图片
通过改变D的目标函数,可以用不同的Divergence来度量两个分布的散度。

李宏毅生成对抗网络2021学习笔记_第14张图片

GAN的训练技巧

优化JS divergence的问题:
在大部分情况下,Pg和Pdata重叠的部分很少
李宏毅生成对抗网络2021学习笔记_第15张图片
问题:只要两个分布没有重叠,JS divergence算出来的值永远是log2
李宏毅生成对抗网络2021学习笔记_第16张图片
尝试用其他的度量分布之间差异的方法:Wasserstein distance。想象P分布是一个土堆、要将P移动到Q的平均距离就是Wasserstein distance
李宏毅生成对抗网络2021学习笔记_第17张图片
这就出现另一个问题,要将分布p转换为分布q的样子,是有多种方案的。算的时候,穷举所有的Wasserstein distance,取最小的一个作为结果。
李宏毅生成对抗网络2021学习笔记_第18张图片
如果能够算出W,可以从discriminator的目标函数中看出来损失是越来越小的,因为生成分布pg和目标分布pdata之间的距离可以量化地显示出来了。
计算Wasserstein distance的方法:这里的x是network的输入换成y更贴切,E代表期望
李宏毅生成对抗网络2021学习笔记_第19张图片
可以保持D符合1-Lispschitz的方法:
李宏毅生成对抗网络2021学习笔记_第20张图片
理论和实操上的一个差异:
虽然理论中要优化Discriminator,但是在实际中D每次只更新一次,然后就又轮到了G更新参数,D的下一次更新继承了上一次更新的参数。也就是说并不是像理论上的D的loss function收敛之后再更新G的参数。

即便如此GAN还是比较难train的、因为D和G的进步要依赖对方,只要其中一个不再进步了,另一个也会随之停滞下来了。
李宏毅生成对抗网络2021学习笔记_第21张图片
要调超参数使得D的loss下降,但是只能调一次,如果中间训练的时候有某一次loss没有下降,就很危险了。
更多的训练技巧:
李宏毅生成对抗网络2021学习笔记_第22张图片
其他generator:
李宏毅生成对抗网络2021学习笔记_第23张图片

GAN的评价

在早期,是直接用人看的。但是显然这样有问题。
针对特定的任务,存在一些评估方法。可以训练一个图片分类器,将生成的图片作为输入,查看分类情况。
李宏毅生成对抗网络2021学习笔记_第24张图片
gen可能会产生多张重复图片
李宏毅生成对抗网络2021学习笔记_第25张图片

评判生成图片的多样性:
多样性低:
李宏毅生成对抗网络2021学习笔记_第26张图片
多样性高:
李宏毅生成对抗网络2021学习笔记_第27张图片
多样性和quality的同时考虑:inception score
当生成某个特定种类的时候,多样性肯定是很低的,inception score不适用。
FID:在softmax之前,将向量拿出来,所有生成的图片产生的softmax之前的向量在高维中代表一系列的点,假设真实的图片和产生的图片分布都是高斯分布,计算这两个高斯分布的Frechet distance
李宏毅生成对抗网络2021学习笔记_第28张图片
还有一种情况,GAN可能只是背下来了图片资料,而且是不好去比对发现的。
李宏毅生成对抗网络2021学习笔记_第29张图片

Conditional generation

除了z作为输入之外,我们还想输入一个x作为控制输出结果的变量。比如text-to-image就是一个cgan问题
李宏毅生成对抗网络2021学习笔记_第30张图片
在设计D的时候,打分除了关心图片是否真实,还要判断图片和x是否匹配

李宏毅生成对抗网络2021学习笔记_第31张图片

除了用文字作为condition,还可以用图片作为condition。
李宏毅生成对抗网络2021学习笔记_第32张图片
出现模糊的情况是因为会有多种可能,用GAN之后可能会出现额外的东西,效果最好的是GAN+supervised
李宏毅生成对抗网络2021学习笔记_第33张图片

你可能感兴趣的:(机器学习)