1. 极大似然估计

GAN用到了极大似然估计(MLE),因此我们对MLE作简单介绍。

MLE的目标是从样本数据中估计出真实的数据分布情况,所用的方法是最大化样本数据在估计出的模型上的出现概率,也即选定使得样本数据出现的概率最大的模型,作为真实的数据分布。

将真实模型用参数θ\theta表示,则在模型θ\theta下,样本数据的出现概率(likelihood)是(1)i=1mpmodel(xi;θ)\prod_{i=1}^mp_{model}(x_i; \theta) \tag{1}

其中xix_i表示样本中的第ii个数据。

最大化(1)式的概率,求得满足条件的θ\theta
θ=argmaxθi=1mpmodel(xi;θ)=argmaxθi=1mlogpmodel(xi;θ)\begin{aligned} \theta^* & = \arg\max_\theta\prod_{i=1}^mp_{model}(x_i; \theta) \\ &= \arg\max_\theta\sum_{i=1}^m\log p_{model}(x_i; \theta) \\ \end{aligned}

还可以使用KL散度来代表MLE方法:
θ=argminθDKL(pdata(x)pmodel(x;θ)=argminθ{i=1mpdata(xi)logpdata(xi)i=1mpdata(xi)logpmodel(xi;θ)}=argminθi=1mpdata(xi)logpmodel(xi;θ)=argmaxθi=1mpdata(xi)logpmodel(xi;θ)\begin{aligned} \theta^*&=\arg\min_\theta D_{KL}(p_{data}(x) || p_{model}(x;\theta)\\ & = \arg\min_\theta\left\{ \sum_{i=1}^mp_{data}(x_i)\log p_{data}(x_i) - \sum_{i=1}^mp_{data}(x_i)\log p_{model}(x_i;\theta) \right\}\\ & = -\arg\min_\theta\sum_{i=1}^mp_{data}(x_i)\log p_{model}(x_i;\theta) \\ & = \arg\max_\theta\sum_{i=1}^mp_{data}(x_i)\log p_{model}(x_i;\theta) \end{aligned}

在实际上,我们无法得到数据的真实分布pdatap_{data},但是可以从mm个数据的样本中近似得到一个估计p^data\hat{p}_{data}

为了便于理解KL散度,我们在下面对其进行简要介绍。

2. 相对熵,KL散度

两个概率分布PPQQ的KL散度定义如下:
DKL(PQ)=iP(i)logP(i)Q(i)D_{KL}(P||Q)=\sum_iP(i)\log{\frac{P(i)}{Q(i)}}

性质
DKL(PQ)0D_{KL}(P||Q)\ge0

当且仅当P=QP=Q时,等号成立。(证明过程借用吉布斯不等式ipilogpiipilogqi\sum_ip_i\log p_i\ge\sum_ip_i\log q_i,证明吉布斯不等式会用到关系logxx1\log x \le x - 1

KL散度反映了两个分布PPQQ的相似情况,KL散度越小,两个分布越相似。

KL散度是不对称的:
DKL(PQ)DKL(QP)D_{KL}(P||Q) \quad\neq D_{KL}(Q||P)

3. KL散度与交叉熵的关系

神经网络中常常使用交叉熵作为损失函数:
L=iyiloghiL = -\sum_i y_i\log h_i

其中yiy_i是实际的标签值,hih_i是网络的输出值。

我们将yyhh的KL散度展开,得到:
DKL(yh)=iyilogyihi=iyilogyiiyiloghi=iyilogyi+L=Constant+L\begin{aligned} D_{KL}(y||h) & = \sum_iy_i\log{\frac{y_i}{h_i}}\\ & = \sum_iy_i\log y_i - \sum_iy_i\log h_i\\ & = \sum_iy_i\log y_i + L\\ &= Constant + L \end{aligned}

因此,最小化KL散度,等价于最小化损失函数LL。也即交叉熵损失函数反应的是网络输出结果和样本实际标签结果的KL散度的大小,交叉熵越小,KL散度也越小,网络的输出结果越接近实际值

4. JS散度

对于两个分布PPQQ,JS散度是:
DJS(PQ)=12DKL(PP+Q2)+12DKL(QP+Q2)D_{JS}(P||Q) = \frac{1}{2}D_{KL}(P||\frac{P+Q}{2}) + \frac{1}{2}D_{KL}(Q||\frac{P+Q}{2})

JS散度是对称的,并且有界[0,log2][0, \log2]

5. GAN 框架

生成器,生成与训练集数据相同分布的样本;判别器,检查生成器生成的样本是真的还是假的。
The generator is trained to fool the discriminator.
GAN生成对抗网络:数学原理

判别器的损失函数

判别器的损失函数为:
(2)J(D)(θ(D),θ(G))=12ExpdatalogD(x)12Ezpmodellog(1D(G(z)))J^{(D)}(\theta^{(D)}, \theta^{(G)})= -\frac{1}{2}\mathbb{E}_{x\sim p_{data}}\log D(x) - \frac{1}{2}\mathbb{E}_{z\sim p_{model}}\log (1-D(G(z)))\tag{2}

上式其实就是一个交叉熵损失函数。GAN的判别器在训练的过程中,数据集包含两个部分,一部分是训练集的样本xx,对应的标签y=1y=1,一部分是生成器生成的数据G(z)G(z),对应的标签y=0y=0,因此判别器的训练集可以看做X={x,G(z)},Y={1,0}X=\{x, G(z)\}, Y=\{1, 0\}

训练集样本是XX,标签是YY,网络输出是HH,则交叉熵损失函数为:
(3)J=1mi=1m{YilogHi(1Yi)log(1Hi)}J = \frac{1}{m} \sum_{i=1}^m\{-Y_i\log H_i - (1-Y_i)\log(1-H_i)\}\tag{3}

与式(2)作比较,前一项的logH\log H等价于式(2)中的logD(x)\log D(x),后一项的log(1Hi)\log(1-H_i)等价于式(2)中的log(1D(G(z)))\log(1-D(G(z)))。将xx看做包含了真实样本和生成器生成的数据G(z)G(z)的新的训练集,则判别器的损失函数可以重新写作:
(4)J(D)(θ(D),θ(G))=12ExpdatalogD(x)12Expmodellog(1D(x))=12ipdata(xi)logD(xi)12ipmodel(xi)log(1D(xi))\begin{aligned} J^{(D)}(\theta^{(D)}, \theta^{(G)}) &= -\frac{1}{2}\mathbb{E}_{x\sim p_{data}}\log D(x) - \frac{1}{2}\mathbb{E}_{x\sim p_{model}}\log (1-D(x))\\ &= -\frac{1}{2} \sum_ip_{data}(x_i)\log D(x_i) -\frac{1}{2}\sum_i p_{model}(x_i) \log (1-D(x_i)) \end{aligned}\tag{4}

对上式关于D(x)D(x)求导,并令导数为0,得到:
D(x)=pdata(x)pdata(x)+pmodel(x)D^*(x) = \frac{p_{data}(x)}{p_{data}(x)+p_{model}(x)}

生成器的损失函数

J(G)=J(D)J^{(G)}=-J^{(D)},则
J(G)(θ(D),θ(G))=12ExpdatalogD(x)+12Ezpmodellog(1D(G(z)))=Constant+12Ezpmodellog(1D(G(z)))\begin{aligned} J^{(G)}(\theta^{(D)}, \theta^{(G)}) &= \frac{1}{2}\mathbb{E}_{x\sim p_{data}}\log D(x) + \frac{1}{2}\mathbb{E}_{z\sim p_{model}}\log (1-D(G(z)))\\ & = Constant + \frac{1}{2}\mathbb{E}_{z\sim p_{model}}\log (1-D(G(z))) \end{aligned}

生成器没有直接接受任何的训练集数据,训练集数据的信息是通过判别器学习后传递过来的。

相关文章: