对抗生成网络GAN(优化目标篇)
快要面试,故对GAN进行稍许复习
目的
对抗式生成网络GAN提出的目的是估计样本的密度函数pr(x;θ)p_r(x;\theta)pr(x;θ),且并不显式的估计密度函数,而是希望得到一个能生成出符合该分布样本的模型。
方法
通过假设在低维空间上有一个简单的分布zzz,一般假设为多为高斯N(0,I)\mathcal N(\textbf 0,\textbf I)N(0,I),通过建立映射$G:Z→XG: \mathcal Z \rightarrow \mathcal XG:Z→X,这个GGG一般利用一个神经网络实现,称为生成器(Generator).对抗生成网络的另一个巧妙之处在于使用另一个神经网络DDD作为判别器(discriminator),用于判断GGG所生成的样本的真假。
- 生成器的目标是尽量生成较为真实的虚假样本,从而使判别器判断该样本为真实样本
- 判别器的目标是准确的判断某一样本为真实样本还是由生成器生成的虚假样本,输出其为真实样本的概率
故而判别器的目标为:
maxDEx∼pdata[logD(x)]+Ez∼pz[log(1−D(G(z)))]
\max\limits_{D} \mathbb E _{x\sim p_{data}}[logD(x)]+\mathbb E_{z\sim p_z}[log(1-D(G(z)))]
DmaxEx∼pdata[logD(x)]+Ez∼pz[log(1−D(G(z)))]
第一部分意为使得生成器判别真实样本为真实的概率较大,第二部分意为使得生成器判别虚假样本的为真实的概率较小,此为直观理解。也有通过交叉熵导出的方式,详见邱锡成的《神经网络与深度学习》
而生成器目标为:
minGEz∼pz[log(1−D(G(z)))]
\min\limits_G \mathbb E_{z\sim p_z}[\log(1-D(G(z)))]
GminEz∼pz[log(1−D(G(z)))]
因此,交替优化判别器目标和生成器目标,从而优化生成器和判别器。
如果将生成器目标和判别器目标写为一体,则为:
minGmaxDEx∼pdata[logD(x)]+Ez∼pz[log(1−D(G(z)))]
\min \limits_G \max \limits_D\mathbb E_{x \sim p_{data}}[logD(x)]+\mathbb E_{z\sim p_z}[log(1-D(G(z)))]
GminDmaxEx∼pdata[logD(x)]+Ez∼pz[log(1−D(G(z)))]
注意优化DDD时,GGG的参数应当保持不变。
补充:交叉熵
交叉熵有多重导出方法,这里利用最大似然估计。对于一个伯努利分布,有密度函数为:
P(x∣θ)=θx(1−θ)1−x
P(x|\theta)=\theta^x(1-\theta)^{1-x}
P(x∣θ)=θx(1−θ)1−x
其中,θ\thetaθ代表了xxx为真的概率。倘若此时有一组样本x1,x2,⋯ ,xnx_1, x_2, \cdots, x_nx1,x2,⋯,xn, 对伯努利分布做最大似然估计,则有:
θ=argmaxθlog∏i=0Nθxi(1−θ)1−xi=argmaxθ∑i=0Nxilogθ+(1−xi)log(1−θ)
\theta= \mathop{\arg\max}\limits_{\theta}\log\prod_{i=0}^N\theta^{x_i}(1-\theta)^{1-x_i}\\
= \mathop{\arg\max}\limits_{\theta}\sum_{i=0}^N x_i \log\theta+(1-x_i)\log(1-\theta)
θ=θargmaxlogi=0∏Nθxi(1−θ)1−xi=θargmaxi=0∑Nxilogθ+(1−xi)log(1−θ)
对于上式,如果增加一个1N\frac {1}{N}N1并不影像最大化的过程,于是可以变为:
θ=argmaxθE[xilogθ+(1−xi)log(1−θ)]=argmaxθE[xilogθ]+E[(1−xi)log(1−θ))]
\theta = \mathop{\arg\max}\limits_\theta \mathbb E[x_i\log\theta+(1-x_i)\log(1-\theta)]\\
=\mathop{\arg\max}\limits_\theta \mathbb E[x_i\log\theta]+\mathbb E[(1-x_i)\log(1-\theta))]
θ=θargmaxE[xilogθ+(1−xi)log(1−θ)]=θargmaxE[xilogθ]+E[(1−xi)log(1−θ))]
此时,如果令模型预测θ\thetaθ,则,D(x)=θD(x) = \thetaD(x)=θ,从而可以使得公式变为:
D=maxDE[xilogD(xi)]+E[(1−xi)log(1−D(xi)))]
D = \mathop{\max}\limits_{D} \mathbb E[x_i\log D(x_i)]+\mathbb E[(1-x_i)\log(1-D(x_i)))]
D=DmaxE[xilogD(xi)]+E[(1−xi)log(1−D(xi)))]
若加个负号,从而变为最小化,就是交叉熵损失函数的形式.