翻译整理一下UC Berkeley非监督学习的课程。这篇翻译第五六讲Implicit Models – GANs。分三篇:上,中,下。
这个课程总共十二讲,官方链接:
https://sites.google.com/view/berkeley-cs294-158-sp20/home
目前已整理过:
Lecture 1:UC Berkeley非监督学习–介绍
Lecture 2:UC Berkeley非监督学习–自回归模型
Lecture 3:UC Berkeley非监督学习–流模型(Flow Models)
Lecture 4:UC Berkeley非监督学习–Latent Variable Models – VAE(潜变量模型–VAE)
Lecture 7:自监督学习(Self Supervised Learning)
这篇讲Implicit Models,很多是GANs,内容有点丰富,占了两个Lectures,因此这次会分上中下三篇。整理完这两个,剩下的8,9,10,11,12接下来可能不会整理,也可能会慢慢整理。
这是发明GAN的人。这样看效果图,GAN确实很强啊。大家可以在B站或者油管搜BigGAN的视频,看看变换潜变量可以达到的不同效果。
2018年,一个人从github上下载了些代码,用GAN训练了模型并生成了上面这幅图,卖了$432500,,所以,看完这篇吧,让我们离财富自由更近一点。
图像生成的目标:
-
可以理解图片中的内容
- 可以完成从一幅图到另外一幅图的丝滑转换。
- 可以生成和样本相似却又不同的图。
- 可以通过调整潜变量生成有不同特征的图(样本图中没有的特征)。
Implicit Models要做的也是,先生成一个潜变量z,再通过模型把潜变量转换成图片。但他训练模型的方式和VAE以及Flow Models是不一样的,它通过评估生成的图片的品质来优化模型。
Implicit Models的基本逻辑:
翻译一下是:
- 需要样本图片pdata
- 需要可以生成图片的q,然后生成一堆图片pmodel
- 需要一个可以比较pmodel和pdata的差异的模型D
- 获得更好的Φ的方式是努力去缩小pmodel和pdata的差异
GAN的第一篇文章发表于2014年:
来看损失函数:
G是生成器(z->x),D是分辨器(分辨输入是G生成的,还是训练样本中的)。D越是确信输入是训练集中的样本,则输出的值越大。D和G存在一个博弈关系,G的目标就是尽量让D(G(z))的输出趋近于1,而D的目标是尽量让D(x)的输出趋近于1,D(G(z))的输出趋于0。
大家可以去下面的网址去观察一下gan训练的可视化效果,还挺有意思的:
https://poloclub.github.io/ganlab/
上面这张图是2014年GAN可以做到的效果,右边黄框里的是样本图片,其他是生成的图片,可以发现,当时GAN就可以很好的生成和样本图片近似的图片,但是还不完美,还有很多似是而非的图片产生。
接下来看如何评估GANs模型,到现在生成模型的评估依然是一个问题,而GANs不像之前的生成模型,我们可以用极大似然值来评估,另外,生成图片的优劣其实是一种主观判断。
评估GANs模型: 1. Parzen-Window density estimator / Kernel Density Estimator (KDE)
这是2006年被提出来的一个概念,网上解释很多,这里就不细说了,详细可以看参考[1]。上面公式中K是窗函数,判断x和xi的距离是不是在一定区间内,K也可以是高斯函数等。KDE要输出密度值,越多样本在x周边,给出的密度值越大。
当h设置不同的值时,出来的效果也很不同,用这个方法得选一下窗口值的大小。
2014年的GAN有用这个方法来评估模型,但事实上这个评估方式更适合低维度的数据,不太适合高维度的数据。
上图实验数据,用于6*6,36维的数据评估,可以发现这个评估方法的效果不是很好,而且和k-means这些方法的比较,也可以发现,也许这个方法只能很好的评估聚类效果,而不是生成效果。
2. Inception Score
看一下Inception Score的基本想法和方法:
-
绕过高维密度估计
- 一个好的生成网络可以生成多种多样不同语义图片
- 给定生成图片,图片中的事物可以被明确地分辨出来,p(y|x)应该是低熵的
- 通过调整潜变量,可以生成含有不同事物的图片,p(y)应该是高熵的。
基于以上考虑,Inception Score公式如下:
值越高越好。
由上面的实验结果可以发现,Inception Score确实可以很好的区分真实图片和生成图片,评估生成图片的质量。但这个方法也有缺点,比如说,背景信息,边边角角的生成质量被忽略了,另外就是如果在生成数据的时候,针对Inception Model可以识别的类,一个类生成一个,那么最后就可以获得很好的Inception Score。
3. Fréchet Inception Distance
Fréchet Inception Distance (FID)的基本想法和方法:
-
Inception Score不够优秀,包括无法评估生成图片的细节优劣,另外如果你生成有方,模型可识别的类型每样生成一个,只要生成的质量不是太差,都能获得很高的Inception Score
- FID可以更多的分辨细节上的优劣。
- 实现方法就是把生成的图片转换成特征向量,feature embedding,即不是用判断物种类别的结果,而是用判断类别前生成的特征向量来判断生成样本的好坏。同样是用生成样本和训练样本去做比较,比较特征向量的均值和协方差。
- 值越低越好
IND是越低越好,FID是越高越好,通过上面几幅图比较,明显FID更优秀。
现在我们来总结一下GAN的基本特征:
-
可以快速生成,随机生成一个潜变量,然后通过训练好的生成网络,即可产生图片
- 没有推理网络,只有一个生成网络,和一个判断图片是不是生成的网络,不需要像VAE一样再有一个把图片转换成潜变量的网络(GAN变种可以有)
- 目标函数直接明了。
一些原理:
接下来看一些GAN背后的原理。
1. Bayes-Optimal Discriminator
如果已知训练数据的样本分布和生成数据的样本分布,最佳分辨器是什么?
由此可知,当训练样本分布和生成样本分布都已知的情况下,最佳分辨器是可以直接求出来的。
如果用最佳分辨器来训练生成网络呢?
由于分辨器已经用了最佳,V肯定是越小越好,按上面的公式,V可以分解为一个常量项和两个KL项,两个KL项大于等于0,则V可能的最小值就是-log(4),而优化生成模型的时候,其实我们只需要优化两个KL项,即JSD,使其最小化即可。
2. Jensen-Shannon Divergence (JSD)
我们来看一下JSD和其他方法的比较,如上图所示,原始数据的分布如左边第一幅图,我们现在要用一个高斯函数来拟合这个分布,KLD,MMD,JSD的拟合结果分别用圆线展示出来了,会发现,KLD想尽量囊括所有数据的特征,MMD会倾向于最强的分布,但是又会被小的分布影响到。而JSD则是比MMD更倾向于最强分布,忽略了小的分布。
上图展示了分别用Maximum likelihood和Reverse KL拟合的结果,可以发现前者为折中拟合,后者是二选一拟合。而JSD其实介于这两个方法之间,但是更接近Reverse KL。
左边是Maximum likelihood,中间是Reverse KL,右边是JSD,可以发现,JSD其实是介于前两者之间的一个方法。
那么究竟哪种拟合效果更好,更值得追求呢?目前来看,如果是想保留更多的信息,比如压缩图片,那么第一种可能更好,如果是图像生成,需要尽可能清晰地获取特征,那么可能Reverse KL,JSD会更好。更好的方法当然是尽可能避免用一个高斯函数去拟合复杂的数据分布。但是高纬度的数据复杂度是极高的,我们不太可能用我们的肉眼,包括一些数据分析工具来知道,我们应该用什么样复杂度的模型去拟合,因此,在选择优化模型的方法时,还是得多注意一点,尽量避免Mode collapse,或者效能上的损失。
3. Mode Collapse
比如上图这种情况,数据分布如最右边的小图所示,仍然是用高斯分布去拟合,会发现,得到的结果会随着训练进程一直在变。
3. Avoiding Saturation
来看,可不可以先训练D呢?以及,如果我们一开始只优化D,会出现什么问题。
答案是可以先训练D,而且可以训练出来不错的D。但是如果把D先优化好,再来优化G,G会没办法优化。
当D可以很好地识别训练图和生成图后,D是一个很好的二分类分类器,假设D那个时候是一个sigmoid函数。那么它求导以后如右下角所示,当x是假图的时候梯度趋近0。因此G不会被优化。
但这个问题有办法可以解决:
优化G的时候加个负号,最小化变最大化。
D优化后,当输入x是生成图时,梯度趋近于-1。问题解决。
[1] kiyoxi,Parzen window 密度估计——一种非参数概率密度函数估计方法,知乎,2022
Comments