对GAN的理解还停留在一些警察抓小偷之类的层次,当自己想去独立写一个的时候发现自己对这块了解地非常肤浅。本文综合网上各种参考资料和论文,记录在本博客中,以促进自己的理解,不过自己想要想真正理解里面的内容,还是得对数学有系统的学习,不然只是生硬地知道这个公式这个定理,而不能形象理解,过三五个礼拜就忘了。还未写完
1 基础概念
1.1 Cross Entropy
熵最好理解为不确定性的量度而不是确定性的量度,因为越随机的信源的熵越大。这里的想法是,比较不可能发生的事情,当它发生了,会提供更多的信息
离散下,熵的公式可以表示成
H(X)=−i∑p(xi)logb p(xi)(1.1)
在这里b是对数所使用的底,通常是2,e或者10。当b时2的时候,熵的单位是bit, e的时候是nat,而当b=10,熵的单位是Hart。
交叉熵的定义如下
H(p,q)=−x∑p(x)log q(x)(1.2)
其中x是他们的支撑集(支撑集(support)其实就是函数的非零部分子集,比如ReLU函数的支撑集就是$(0,\infty) $一个概率分布的支撑集就是所有概率密度非零部分的集合)。在信息论中,基于相同事件测度的两个概率分布p和q的交叉熵是指,当基于一个”非自然“(相对于”真实“分布p而言)的概率分布q进行编码时,在事件集合中唯一标识一个事件所需的平均比特数。如果两个概率分布一致,所需的比特数为0
对于一个有m个样本的二分类任务,交叉熵损失可以定义成,
Loss(θ)=−i=1∑myilog(pθ(xi))+(1−yi)log((1−pθ(xi)))(1.3)
其中y是样本的标签,p是模型的预测值,$\theta $是模型的参数
对交叉熵损失函数求导得到
θ∂L=m1i=1∑m(pθ−yi)xi(1.4)
可以看到当模型预测跟样本标签一致时,梯度为0,其他时候都会有值
为什么在分类任务中使用交叉熵损失,这是因为交叉熵跟接下来要介绍的评价两个分布一致性的KL散度有着紧密联系
1.2 KL 散度
KL散度一般用来评价两个分布的距离,定义成
DKL(p∣∣q)=i∑p(xi)logq(xi)p(xi)=i∑p(xi)log p(xi)−p(xi)log q(xi)(1.5)
最为人熟知的特性是不对称性,即DKL(p∣∣q)=DKL(q∣∣p)
观察上面的公式可以看出即两个分部,左边部分是p的熵,右边是p和q的交叉熵。而在机器学习里,p如果用来代表训练集的分布,那么它的熵是固定的,因此在这个场景下,最小化KL距离等价于最小化交叉熵,而交叉熵的计算比KL简便,因此采用交叉熵的方式来训练。
我们下面展示一个具体的例子,令
p∼N(0,1),q∼N(μ,2)
我们以离散形式只取定义域为区间[-10,10],并将他们的和放大成1以符合概率分布的要求
现在来感受下当移动μ时KL(p||q)和KL(q||p)的距离

1.3 JSD 散度(Jensen-Shanno)
上面提到了KL散度是是不对称的,为了达到对称性,JSD散度被提出,它的定义是
JS(p∣∣q)=21KL(p∣∣2p+q)+21KL(q∣∣2p+q)(1.6)
需要在这里强调的是,如果p和q的支撑集不重叠,那么他们的KL散度值没有意义,而JS散度值是个常量

这里只显示一条线的原因是因为两条线重叠了,JSD距离跟KL不同,它是对称的。对于两个分布,它的取值范围在[0,1]之间
1.4 Wasserstein 距离
又叫Earth-Mover(推土机距离),相对于KL和JSD,它在p和q没有支撑集的时候也有意义,它特 是一种用于描述两个多维分布之间相似度的度量。所谓推土机距离,就和 “推土机” 稍微有点联系。如果将分布看做空间中泥土的分布,那么这两个分布间的距离就是将这些泥土从一个分布改变到另一个分布所需要消耗的最小能量。这里的能量是泥土重量 (权值) 和移动距离的乘积
W(p,q)=infγ∼π(p,q)E(x,y)∼γ(∥x−y∥)(1.7)
严格一点定义,π(p,q)是p和q分布组合起来所有可能的联合分布的集合。inf是下确解(可以临时理解成min),直观上可以把E(x,y)∼γ(∥x−y∥)理解为在γ这个路径规划下把土堆p挪到土堆q所需要的消耗。而Wasserstein距离就是在最优路径规划下的最小消耗, 以下图片摘自李宏毅老师的课件


1.5 F-Divergence
Df(p∣∣q)=∑q(x)f(q(x)p(x))
其中f是凸函数,f(1)=0,两个条件可以保证f-divergence最低是0.
当p=q的时候,很好证明f-divergence是0
Df(p∣∣q)=∑q(x)f(q(x)p(x))≥f(∑q(x)q(x)p(x))=f(1)=f(0)
当f=xlogx时是KL divergence
1.6 Fenchel Conjugate
对于任何一个凸函数,都有一个fenchel共轭函数,它也是一个凸函数
f∗(t)=x∈dom(f)max{xt−f(x)}
(f∗)∗=f
以下图片摘自李宏毅老师的课件

1.6 K-lipschitz 连续性
一个实值函数是k-lipschitz ,只需要存在一个正整数K使得
∣f(x1)−f(x2)∣≤K∣x1−x2∣
1.7 VAE
如果让我去做一个生成人脸的网络,我的思路的步骤是这样的
- 类似分割的方式,输入是一张图片,输出也是一张图片,用L2的loss训练
它的问题是输入的图片是什么?
- 既然输入不能是图片,那我就输入一个随机噪声
它的问题是对于一个随机的噪声我怎么确定它的输出是什么?
- 那我就采用自编码器的输入,将一个真实的人脸图片先提取latent code,然后利用latent code再去生成那张人脸
它的问题是当我想生成一张不真实存在的人脸照片时,我的latent code怎么生成?
- 那我们就对latent code做些约束好了,比如让它服从高斯分布好了,可以用KL距离去监督
其实刚刚的思路其实接近一个Variational Auto-Encoder(VAE)的过程,区别在于第三步。 VAE并不直接用latent code去生成,而是在latent code上再次用高斯采样,个人肤浅的理解是减少过拟合。当然真实的VAE有完备的理论证明。
其实 VAE提出的时间比GAN稍微早出来一些,但为什么VAE没有像GAN一样这么流行。根据俞杨老师的说明,VAE去判断生成结果质量的时候还是用point-wise比如l2的loss,一个典型的特征就是pointwise loss常常会脱离数据流形面,因此看起来生成的图片会模糊。 流形(manifold)是高维空间中曲线、曲面概念的拓广,我们可以在低维上直观理解这个概念,比如我们说三维空间中的一个曲面是一个二维流形,因为它的本质维度(intrinsic dimension)只有2,一个点在这个二维流形上移动只有两个方向的自由度。同理,三维空间或者二维空间中的一条曲线都是一个一维流形。)
2 Divergence 框架
2.1 min-max GAN( saturating loss)
那GAN怎么去评价生成质量的好坏,主要核心思路是引入了一个区别器来进行博弈。区别器能区分出真图片和假图片,而GAN的生成器要能让区别器分辨不出来。但是博弈不是怎么好控制的,如果一方过强,比如区分器过强,那就跟让普通民众跟泰森打架一样,对两者都不好,民众有很大的挫败感,而泰森有可能丧失斗志而不再提升。最好的博弈应该类似于梅西和C罗,两人不相上下,在相互的竞争中各自成长。当然这种平衡在GAN的训练中很难把握,导致了GAN难已训练的问题。
数学一点的讲法是,我们有个生成器G,然后还有一个区别器D,假设G的输入是z。那么D的任务是区分从真实采样的数据x和生成器输出的G(z), 而相反G的任务就是让D分辨不出来两者的区别,综合一下就是
minGmaxDV(D,G)=Ex∼pdata(x)[logD(x)]+Ez∼pz[log(1−D(G(z))](2.1)
观察公式加法的左右两个部分,其实就是交叉熵的损失。
整个训练的流程如下

一个小细节就是这里会多次训练D以满足公式中max操作,但是实际中很多时候只用1次,在后面的论文中会有分析
2.2 non-saturating loss
论文观察到上面的loss会有梯度消失的问题,还提出了将生成器的目标修改成maximize log(D(G)),也就是
minimize−log(D(G))
2.3 loss跟KL JSD散度的关系
进一步地,我们希望揭示不同的loss跟距离的关系,可以让我们在更高层面理解这个问题。
我们先看一下在一个确定的生成器G情况下,最优的判别器是个什么样子,对于特定的一个样本x,根据公式2.1, 它对loss的贡献是
pdata(x)logD(x)+pg(x)log(1−D(x))
对D进行求导并令其等于0可得
D(x)pdata(x)+1−D(x)−pg(x)=0
经过化简可得
D(x)=pdata(x)+pg(x)pdata(x)
最后的公式很好理解,主要是看样本来自真实数据还是生成数据之间的类似比例的值
我们将这个最优的区分器分别代入到saturating loss和 non-saturation loss
对于saturating loss, 依照公式2.1,为了引入距离,我们还是把跟G无关的前半部分保留
Ex∼pdata(x)[logD(x)]+Ex∼pg[log(1−D(x)]
代入最优区别器,为了书写方便,用pd替换pdata
∑pdlogpd+pgpd+∑pglogpd+pgpg
简单转换成
∑pdlog(pd+pg)/2pd/2+∑pglog(pd+pg)/2pg/2
进一步转换
∑pdlog(pd+pg)/2pd+∑pglog(pd+pg)/2pg−log2∑(pd+pg)
由于pd和pg是概率分布,因此和为1
∑pdlog(pd+pg)/2pd+∑pglog(pd+pg)/2pg−log4
根据JS距离的公式,我们将上述公式转换成
−log4+2⋅JSD(pd,pg)
也就是说利用saturating loss训练且区别器最优的情况下,生成器的优化目标其实是JSD 散度
同理对于non-saturating loss 可以证明下列公式成立
−Ex∼pg[log(D(x)]=KL(pg∣∣pd)−2JS(pd∣∣pg)+2log2+Ex∼pd[log(D(x)]
也就是说利用non-saturating loss训练且区别器最优的情况下,生成器的优化目标其实是KL散度-JSD 散度。(个人对这种方式是不太认可的,因为KL和JSD之间是有关系的。比如 -2*JS也能展开成JS-3JS,不能说这个训练目标不一致,一个拉近,一个拉远,是不是可能可以转换成其他更统一的一种散度方式。)
2.4 loss跟f-divergence的关系(f-gan)
从Fenchel 共轭可以知道
f∗(t)=x∈dom(f)max{xt−f(x)}
做一下替换
f(x)=t∈dom(f∗)max{xt−f∗(t)}
而f-divergence的表达式是
Df(p∣∣q)=∑q(x)f(q(x)p(x))=∑q(x)(t∈dom(f∗)max{q(x)p(x)t−f∗(t)})
由于一般情况下t的值,比较难解析,因此我们用一个神经网络D去拟合,输入是 x, 输出是t。
由于上面的是取max操作,所以不管我们的D怎么去拟合
Df(p∣∣q)≥∑q(x)(q(x)p(x)D(x)−f∗(D(x))=∑p(x)D(x)−q(x)f∗(D(x))
如果我们的D足够强,约等于应该变成等于
Df(p∣∣q)≈Dmax∑p(x)D(x)−q(x)f∗(D(x))
Df(pd∣∣pg)=DmaxEx∼pd(x)[D(x)]+Ex∼pg[−f∗(D(x))]

Thus, training G to minimizeLG can be roughly interpreted as minimizing the approximated divergence (although this is not technically true),see “Gans beyond divergence minimization”
另外该论文证明了训练D的时候可以用m=1
2.5 saturating loss的问题
saturating loss的本质原因在于我们在优化JSD loss. JSD loss在两个分布支撑集不重叠的时候是个恒定值,会带来梯度消失的问题。
个人不严谨的理解,一般区别器后面会加个sigmoid函数(用σ来表示)来把区别器的值域约束到(0,1),我们把sigmoid从D中抽出来
log(1−σ(D(G(z))))
我们知道sigmoid函数的导数是σ(1−σ),因此对其进行链式求导可得
∂G∂L=1−σ(D(G))σ(D(G))(1−σ(D(G))D′(G)=σ(D(G))D′(G)
当区分器太强时,对于G生成的样本,我们知道σ(D(G))趋向于0,因此损失对G的梯度将也会是0,也就是原文说的饱和的意思。
更严谨的证明来自于princinple这篇论文,



2.6 non-saturating loss的问题
由于saturation loss的梯度消失问题,作者将generator的loss变成了也就是minimize −log((D(G)))
如果带上sigmoid,利用上面同样的思路,我们可以得到它的梯度为
(1−σ(D(G)))D′(G)
可以知道当区分器非常强的时候,对于G生成的样本还是有梯度的。
严谨一点,按照principle的论文,根据2.4节的分析,在最优区别器下,优化non-saturation loss等价于优化KL-2JSD.
−Ex∼pg[log(D(x)]=KL(pg∣∣pd)−2JS(pd∣∣pg)+2log2+Ex∼pd[log(D(x)]
它的第一个问题是由于两个距离的符号相反,因此优化目标有些矛盾(个人对这一观点持怀疑态度)
它的第二个问题是loss里面带有KL距离,而KL距离是不对称的
DKL(pg∣∣pd)=∑pg(x)logpd(x)pg(x)
当pg(x)→0,而pd(x)→1,,根据洛必达法则,loss趋向0, 反之loss趋向无穷
因此网络会倾向于loss比较低的做法,就是pg(x)→0,也就是说在大多数真实样本所在的空间pd(x)→1,生成器的样本都不在这上面,因此genrator生成的样本会局限在很小的空间,造成为人熟知的mode collapse。
它的第三个问题是梯度不稳定的问题,个人不是特别理解,只能照搬论文了

上面的J应该是x对θ的偏导
3 IPM(integral probability metric) 框架
3.1 Wassertein GAN
上面已经提到了JSD散度在pd和pg的支撑集没有交集的时候会是一个常数的问题,从而导致梯度消失的问题。跟JSD散度相反,wasserstein距离在pd和pg支撑集没有交集的时候还是可以很好地评估两者的距离,因此如果我们能优化wasserstein距离就更好,当然wassertein距离是比较难求解的。不过根据Kantorovich-Rubinstein duality,wasserstein距离可以转化成
W(pd,pg)=∣∣D∣∣L≤1supEx∼pd[D(x)]−Ex∼pg[D(x)]
只要D能满足1-Lipschitz连续性
但是1-Lipschitz连续性很难保证,因此在Wasserstein GAN里通过weight clip的方式来保证K-Lipschitz连续性
另外由于D外面没有了log,所有D的输出是任何分布都有意义,因此D的后面不需要加sigmoid
最后作者实验发现用ADAM优化器比较难训练,因此改用了RMSProp训练

3.2 Wasserstein GAN GP
Wasserstein GAN需要调weight clip的大小,不是特别方便。
这篇论文证明了以下结论

对于这个损失,以拉格朗日乘法的方式加入损失

3.3 Spectral Normalization
相对于GP,spectral-norm更简洁地解决Lipshcitz的问题,实际应用感觉用的更多,着重理解下这个,这个得先从线性代数讲起
线性代数中有特征根和特征向量,意思是这样的,对于一个方阵A,特征根和对应的特征向量满足
Ax=λx
二维情况下,如果A满秩,那么会有两个不相关的特征单位向量v1和v2,对应的特征根假设为λ1和λ2,
那么
A[v1v2]=[v1v2][λ1λ2]
然后在等式的右边乘以矩阵的逆
A[v1v2][v1v2]−1=[v1v2][λ1λ2][v1v2]−1
A=[v1v2][λ1λ2][v1v2]−1
特征值分解就是
A=VΣV−1
如果A是对称的,特征跟是正交的,转置等于逆,可以写成
A=VΣVT
那么对于一个新的向量y, 如果要求Ax,我们可以先把x分解成v1和v2的表达,比如
x=a1v1+a2v2
继续推导
Ax=A(a1v1+a2v2)=a1λ1v1+a2λ2v2
主要的结论是这样
∥x∥∥Ax∥=∥a1v1+a2v2∥∥a1λ1v1+a2λ2v2∥≤max(λ1,λ2)
如果不是方阵,需要用到奇异值分解
A=UΣVT
其中AAT=UΛ1UT,ATA=VΛ2VT,可以证明Λ1和Λ2的非零特征根一样,Σ中的值是他们的根号,称之为奇异值
∥x∥∥Ax∥≤σ(A)
其中σ(A)表示A的最大特征值(奇异值),也称之为A的谱函数
奇异值分解需要继续补充
对于一个神经网络而言,一般有卷积和**函数组成,**函数以Relu为例,不管在小于0还是大于0的时候都是满足1-Lipshcitz条件的,而卷积不一定,假设其权重是W,输入是x,那么这个卷积层的运算是
y=Wx
由Lipshcitz的公式和W的线性可得
∥ϵ∥∥W(x+ϵ)−W(x)∥=∥ϵ∥∥Wϵ∥≤σ(W)
因此如果将W缩放σ(W)
y=σ(W)Wx
将符合1-Lipshcitz连续性
有论文发现对生成器做spetral normalizaiton也有好处
3.4 与IPM之间的关系
IPM(integral probability metric)也是一种对于两个概率分布之间的距离的度量。在IPM技术中,首先定义了满足可测度和实值有界的某一类函数的集合F,然后寻找一个最优的D(x)∈F使得两个分布之间的差异最大,该最大的差异值即为两个分布之间的距离:
IF(pd,pg)=supD∈F∣Ex∼pd[D(x)]−Ex∼pg[D(x)] ∣
如果F是个对称函数空间,我们就可以把上面写成
IF(pd,pg)=supD∈F{Ex∼pd[D(x)]−Ex∼pg[D(x)]}
如果大括号内的小于0,我们总可以用-d去替换而得到一个大于0的值,另外需要说明,IPM定义的距离度量虽然满足对称性、非负性、三角不等式,但是当该距离为0时,并不能严格证明两个分布相等,故为一种伪度量.
不严谨地,我们可以这样理解IPM架构。评价两个人的关系不是用的他们在最好状况下的关系,而是在最差状况下的关系,而D就是要找到这两人什么时候是最差状况,因为每两个人它的冲突点不一样,他们是在金钱上容易反目成仇还是在价值观容易形同陌路。如果他们能通过某些努力(G)能让最差状况的关系都能提高,那说明他们的关系不会差。
可以看到Wasserstein gan属于IPM框架下。
3.5 McGan: Mean and Covariance Feature Matching GAN
McGan将D的定义成了,
F=f(x)=<v,D(x)>,∥v∥p≤1
<>是内积。其实这是一个对偶范数的定义,对偶范数是这样的
∥x∥q=maxv,∥v∥p≤1<v,x>
其中p1+q1=1
所以
IF=supf∈F<v,Ex∼pd[D(x)]−Ex∼pg[D(x)]> =max∥μ(D(x)x∼pd)−μ(D(x)x∼pg)∥q
可以发现这个就是要给feature mathing loss,只不过是均值的,D需要需增大这个loss,而generator需要去减少这个loss, 另外由于函数需要有界,所以需要也需要对D做clip, 当然可以做其他矩的损失,可以看到跟wassertein很像,加了一个模

3.6 [2017-NIPS]MMD GAN: Towards Deeper Understanding of Moment Matching Network
MMD(Maximum Mean Discrepancy)之前在做domain adaptation的时候常被采用的一个loss 看名字有些像McGan,一般在用的时候会用一些kernel技巧做些映射(未完成)
MMD(p,q)=∥μ(p)−μ(q)∥H
4 其他未看或未总结论文
[2020-arxiv]Tamming gan with lookahead
这篇论文的做法很简单,但是背后的理论个人还没有理解
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WvMiYvAz-1593936397768)(/Users/wenhuach/Library/Application Support/typora-user-images/image-20200701154639375.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IPYqzlLs-1593936397769)(/Users/wenhuach/Library/Application Support/typora-user-images/image-20200701154440837.png)]
[2020-ICLR]A closer look at the optimization landscapes of generative adversarial networks
[2019-ICLR]Large scale GAN training for high fidelity natural image synthesis
[2018-arxiv] The relativistic discriminator: a key element missing from standard GAN
[2018-ICML]Which Training Methods for GANs do actually Converge
[2018-ICML]The mechanics of n-player differentiable games.
[2017-NIPS]GANs Trained by a Two Time-Scale Update Rule Converge to a Local Nash Equilibrium.
[2017] Kodali N , Abernethy J , Hays J , et al. On Convergence and Stability of GANs[J].
[2017-ICLR]Metz L , Poole B , Pfau D , et al. Unrolled Generative Adversarial Networks
[2017-ICLR]Energy-based Generative Adversarial Network
[2017-NIPS]Gradient descent GAN optimization is locally stable
[2017-NIPS]The Numerics of GANs
参考
本文参考了很多网上资料,尤其是
12篇GAN的优化文章大盘点,浓浓的数学味儿 by 小米粥
令人拍案叫绝的Wasserstein GAN by 郑华滨