1. 极大似然估计
GAN用到了极大似然估计(MLE),因此我们对MLE作简单介绍。
MLE的目标是从样本数据中估计出真实的数据分布情况,所用的方法是最大化样本数据在估计出的模型上的出现概率,也即选定使得样本数据出现的概率最大的模型,作为真实的数据分布。
将真实模型用参数θ表示,则在模型θ下,样本数据的出现概率(likelihood)是i=1∏mpmodel(xi;θ)(1)
其中xi表示样本中的第i个数据。
最大化(1)式的概率,求得满足条件的θ:
θ∗=argθmaxi=1∏mpmodel(xi;θ)=argθmaxi=1∑mlogpmodel(xi;θ)
还可以使用KL散度来代表MLE方法:
θ∗=argθminDKL(pdata(x)∣∣pmodel(x;θ)=argθmin{i=1∑mpdata(xi)logpdata(xi)−i=1∑mpdata(xi)logpmodel(xi;θ)}=−argθmini=1∑mpdata(xi)logpmodel(xi;θ)=argθmaxi=1∑mpdata(xi)logpmodel(xi;θ)
在实际上,我们无法得到数据的真实分布pdata,但是可以从m个数据的样本中近似得到一个估计p^data。
为了便于理解KL散度,我们在下面对其进行简要介绍。
2. 相对熵,KL散度
两个概率分布P和Q的KL散度定义如下:
DKL(P∣∣Q)=i∑P(i)logQ(i)P(i)
性质:
DKL(P∣∣Q)≥0
当且仅当P=Q时,等号成立。(证明过程借用吉布斯不等式:∑ipilogpi≥∑ipilogqi,证明吉布斯不等式会用到关系logx≤x−1)
KL散度反映了两个分布P和Q的相似情况,KL散度越小,两个分布越相似。
KL散度是不对称的:
DKL(P∣∣Q)̸=DKL(Q∣∣P)
3. KL散度与交叉熵的关系
神经网络中常常使用交叉熵作为损失函数:
L=−i∑yiloghi
其中yi是实际的标签值,hi是网络的输出值。
我们将y和h的KL散度展开,得到:
DKL(y∣∣h)=i∑yiloghiyi=i∑yilogyi−i∑yiloghi=i∑yilogyi+L=Constant+L
因此,最小化KL散度,等价于最小化损失函数L。也即交叉熵损失函数反应的是网络输出结果和样本实际标签结果的KL散度的大小,交叉熵越小,KL散度也越小,网络的输出结果越接近实际值。
4. JS散度
对于两个分布P和Q,JS散度是:
DJS(P∣∣Q)=21DKL(P∣∣2P+Q)+21DKL(Q∣∣2P+Q)
JS散度是对称的,并且有界[0,log2]。
5. GAN 框架
生成器,生成与训练集数据相同分布的样本;判别器,检查生成器生成的样本是真的还是假的。
The generator is trained to fool the discriminator.
判别器的损失函数
判别器的损失函数为:
J(D)(θ(D),θ(G))=−21Ex∼pdatalogD(x)−21Ez∼pmodellog(1−D(G(z)))(2)
上式其实就是一个交叉熵损失函数。GAN的判别器在训练的过程中,数据集包含两个部分,一部分是训练集的样本x,对应的标签y=1,一部分是生成器生成的数据G(z),对应的标签y=0,因此判别器的训练集可以看做X={x,G(z)},Y={1,0}。
训练集样本是X,标签是Y,网络输出是H,则交叉熵损失函数为:
J=m1i=1∑m{−YilogHi−(1−Yi)log(1−Hi)}(3)
与式(2)作比较,前一项的logH等价于式(2)中的logD(x),后一项的log(1−Hi)等价于式(2)中的log(1−D(G(z)))。将x看做包含了真实样本和生成器生成的数据G(z)的新的训练集,则判别器的损失函数可以重新写作:
J(D)(θ(D),θ(G))=−21Ex∼pdatalogD(x)−21Ex∼pmodellog(1−D(x))=−21i∑pdata(xi)logD(xi)−21i∑pmodel(xi)log(1−D(xi))(4)
对上式关于D(x)求导,并令导数为0,得到:
D∗(x)=pdata(x)+pmodel(x)pdata(x)
生成器的损失函数
令J(G)=−J(D),则
J(G)(θ(D),θ(G))=21Ex∼pdatalogD(x)+21Ez∼pmodellog(1−D(G(z)))=Constant+21Ez∼pmodellog(1−D(G(z)))
生成器没有直接接受任何的训练集数据,训练集数据的信息是通过判别器学习后传递过来的。