GAN到底有多“热”?
据统计,GAN的相关论文正在以指数趋势增长,如上图所示。
But,
GAN论文这么多,而且都是英文的,怎么可能读得完!
为此,“AI微刊”团队将推出“GAN ZOO”系列文章,精选典型GAN模型(没有水论文),对其进行精简的解析,让你“三分钟”读完一篇论文。
适合初学小白,也适合大牛持续追踪热度。
再不GAN,我们就老了!
——AI 微刊《GAN ZOO》
本文是“GAN ZOO”系列第一篇,将为您:
1.1.1 原始GAN的思想:
GAN基于博弈论中零和博弈的思想,通过生成网络G(Generator)和判别网络D(Discriminator)相互博弈,进而使G学习到样本的数据分布:
训练过程中,G生成尽可能“接近真实”的样本来欺骗D,而D尽量辨别给出的样本是真样本x还是假样本G(z),双方动态“博弈”,最终达到纳什均衡点。
1.1.2 原始GAN的模型
GAN损失函数:
GAN算法流程:
PS:原始GAN详细解析参考AI微刊另一篇文章“GAN入门”
MNIST数据集与TFD数据集生成实验,其中前5列是生成样本,最后一列是倒数第二列在真实样本集中最相近的样本,可见生成的样本与真实样本之间是有不同的。
原始GAN存在以下四个方面的缺陷是学者们改进的方向:
1.3.1 梯度下降法训练不稳定:
GAN基于梯度下降法进行训练,训练不稳定,G与D难以达到纳什均衡。
纳什均衡:所谓纳什均衡,指的是参与博弈的双方处于这样一种策略组合,在该策略组合上,任何参与人单独改变策略都不会得到好处;对于GAN,就是G和D达到鞍点,而非最小值点。
梯度下降法的强项是搜索全局最小点,因此在训练GAN的时候难以收敛到鞍点,导致要么G到达鞍点,D就远离鞍点;或者D到达鞍点,G远离鞍点,难以实现纳什均衡。
1.3.2 梯度消失问题
梯度消失问题主要是因为Loss函数存在缺陷,导致D趋近最优时,G的梯度消失。
G将低维噪声z映射到真实样本x所在的高维空间,因此生成样本G(z)实际上是高维空间的低维样本(相当于三维空间中的一个面),与高维的x的重叠部分较少。而当D趋近于最优时,区分G(z)与x能力变强,使得两者重叠部分进一步减少。最终导致GAN的Loss函数中的JS散度趋近于一个常数,导数梯度趋近于0,不能有效训练G。
梯度消失问题已经被Wassertein GAN模型解决,该模型将在下一篇文章中详述。
1.3.3 模式崩溃问题
模式崩溃(Model Collapse)就是对于不同的噪声输入,G生成相似的样本。比如MNIST库中数字“7”有多种写法,如果G出现完全模式崩溃(所有生成样本基本相同),可能所有生成的“7”都是一种写法;如果G出现部分模式崩溃(所有生成样本局部相同),可能所有生成的“7”都有一个共同特征,比如都有一个小尾巴。
模式崩溃问题部分源于Loss函数的惩罚偏好:Loss函数中的KL散度非对称,对GAN的冒险行为(即增大G(z)分布多样性)惩罚较大,对GAN的保守行为(即减小G(z)分布多样性)惩罚较小,使得GAN偏向于生成“安全”的重复样本。
同样,模式崩溃问题已经被Wassertein GAN模型初步解决,将在下一篇文章中详述。
1.3.4 不适合处理离散数据
文本数据是离散的,通常需要将单个词映射为高维向量,最终预测输出为一个高维one-hot向量。假设softmax的输出是(0.25,0.3,0.2)那么变换为one-hot向量是(0,1,0),但如果softmax输出是(0.05,0.25,0.05),其one-hot向量仍然是(0, 1, 0),所以G输出了不同的结果但是D给出了同样的判别结果,不能将梯度更新信息有效地传递到G中去,所以D最终输出的判别没有意义。
不适合离散数据的另一个原因也是梯度消失问题的原因,虽然Wassertein GAN已经初步解决该问题,但是其文本生成能力依然有限。GAN在文本生成方面的模型有Seq-GAN等,将在后续文章中解读。
[1] “GAN原理,优缺点、应用总结”,CSDN
https://blog.csdn.net/qq_25737169/article/details/78857724;
[2] “令人拍案叫绝的 Wasserstein GAN,彻底解决GAN训练不稳定问题”,搜狐
https://www.sohu.com/a/125598465_473283;
原始GAN是无监督模型,生成过程不可控,不能生成特定类别、属性的样本。
2.2.1 CGAN的思想
CGAN改进的基本思想就是为GAN引入条件约束,在G与D中引入额外信息y作为条件变量,指导数据生成过程。y可以是类别标签、或者用于图像修复的部分数据、或者语义标签等。
2.2.2 CGAN的思想
(1)CGAN的损失函数:
给定某个样本x,将该样本的标签y(one-hot的10维向量)分别拼接在真实样本x后构成[x, y],拼接在随机噪声z后构成[z, y],GAN完成训练之后,生成样本G(z|y)与真实样本x分布一致,并且可以通过修改y控制G(z|y)的类别。
原始GAN实验是利用100维的噪声,通过G(一个MLP)生成784维的MNIST样本;CGAN则将10维的one-hot类别标签拼接在噪声和真实样本后,进行训练。
如下为指定生成的MNIST的“7”与“3”:
以上实验数据由“AI微刊”团队实验部提供。
[1] “GAN论文阅读——CGAN”,CSDN
https://blog.csdn.net/stalbo/article/details/79359380;
[2] “生成对抗网络(CGAN)(37)---《深度学习》”,CSDN
https://blog.csdn.net/u014038273/article/details/79254714;
原始GAN生成的数据高度耦合,数据的每一个维度不代表具体的特征,导致原始GAN不能对生成样本G(z)的某些特征进行控制。
3.2.1 InfoGAN的思想
InfoGAN引入数据解耦表示(disentangled representation)。数据解耦前相互纠缠,解耦后具有可解释性。比如,人脸图像可解耦为眼睛、鼻子、抬头、侧脸等信息。
3.2.2 InfoGAN的模型
(1)原理推导
InfoGAN将输入噪声分为两部分:随机噪声z与隐编码(Latent Code) c,z用于生成样本,c用于表示部分解耦的特征。
要让隐编码c表示生成样本G(z,c)某一方面的特征,就需要让两者具有尽可能多的共同信息。因此作者引入互信息I(c;G(z,c)),并在训练G的过程中使互信息最大化。
因此,提出了以下的损失函数:
互信息为:
注解:互信息I(X;Y),定量表示在X中有多少关于Y的信息。I(X;Y) =H(X)−H(X|Y) 可以理解为,当Y被观测到之后,X的不确定性的变化量。如果X与Y相互独立,则I(X;Y)=0,也就是观测到X后对观测Y没有任何帮助。
但是计算互信息I(c;G(z,c))需要使用到的P(c|x)难以计算,为此作者提出用辅助分布Q(c|x)来逼近P(c|x)。用L(G,Q) 来拟合I(c;G(z,c))的下界,并且L(G,Q)可以通过蒙特卡洛估计得到。
最终损失函数为:
其中,L(G,Q)为:
在实际操作中,作者将L(G,Q)参数化为一个神经网络,并且与D共享部分参数,以减小计算量。
(2)模型结构
实际上G与Q之间的过程可以理解为G将[z, c]编码为生成样本G(z, c),然后Q再将其解码为Q(c|x)的过程。
InfoGAN和CGAN的目的基本相同,但是CGAN是有监督的,而InfoGAN是无监督的。
使用MNIST库做生成实验,设计了三个隐编码,c1室10维one-hot向量编码,每一维填1概率为0.1;c2,c3是连续编码,是-2到2的均匀分布。实验发现,c1可以控制类别,c2控制角度,c3控制粗细。但是c1,c2,c3三个编码为什么会实现这些功能还不太清楚。
[1] “InfoGAN介绍”,CSDN
https://blog.csdn.net/u011699990/article/details/71599067;
[2] “InfoGAN:一种无监督生成方法”,腾讯云
https://cloud.tencent.com/developer/news/333199;
PS: 关注本公众号“AI微刊”,后台发送“GAN ZOO” (大小写随意),即可获得本文相关的GAN论文包以及本文的源代码资源包。
微信号: AI微刊