Generative Adversarial Net
摘要
作者提出了一种新的框架,通过对抗来评估生成模型,通过同时训练两个模型:用来模拟数据分布生成模型G,以及辨别模型D,用来评估采样来自训练数据而非生成模型G的概率。
G的训练过程是将D犯错的概率最大化,也就是让D分辨不出训练数据和生成数据的区别。
在任意函数G和D的的空间中存在一个独一无二的解,也就是G能够生成D无法分辨数据,以至于任意的数据被D认为是来自训练数据的概率的 1 2 \frac{1}{2} 21.
在G和D被定义为多层感知机的情况下,整个系统可以通过反向传播进行训练。
训练或生成样本期间都不需要任何马尔科夫链或者展开的近似推理网络。
1. 介绍
目前为止,对辨别器(分类器)的研究取得了巨大的成功。但是深度生成模型的发展却没那么好,由于很难近似在极大概率估计和相关策略所引起的许多棘手的概率计算。作者提出了一种新的生成模型评估过程来回避这些问题。
在提出的对抗网络框架中,一个辨别模型学着去分辨一个样本是来自于生成模型的分布还是训练数据的分布。
就好像一群造假币的罪犯试图造出能够以假乱真的假币,而警察需要辨别出收到的货币到底是真还是假。刚开始造出的假币质量非常差,警察一眼就能分辨出真假,后来经过一次次的技术升级,这群罪犯造出了能够以假乱真的假币。最后的结果是警察无法分辨收到的货币是真是假。
在上面的例子中,造假币的罪犯就是生成器G,警察就是辨别器D,而造出的假币就是生成器生成的数据,真币就是训练集中的数据,最终训练的结果就是辨别器D无法分辨输入的数据是生成器G所产生的数据还是训练集中的数据。
在本文中,作者让生成模型通过向多层感知机传入随机噪声来生成样本,而辨别模型同样也是一个多层感知机。作者将这种特殊情况定义为对抗网络,在这种情况下,可以通过反向传播和dropout算法,以及使用前向传播算法来从生成模型中采样来训练网络。
2. 对抗网络
生成对抗网络的示意图如下:
整个网络的的训练目标:
接下来我们将从交叉熵函数开始推导此公式:
首先我们知道对于二分类的交叉熵公式有:
L ( p ) = − ( y ⋅ log p + ( 1 − y ) log ( 1 − p ) ) L(p)= -(y·\log p+(1-y)\log (1-p)) L(p)=−(y⋅logp+(1−y)log(1−p))
其中 p p p是预测为样本模型为正例的概率, y y y是样本标签,正例取 1 1 1,反例取 0 0 0。
上面是普通的二分类任务的交叉熵函数,那么对于生成对抗网络,则有:
V ( D ) = − ( y log ( D ( x ) + ( 1 − y ) log ( 1 − D ( x ) ) ) V(D)=-(y\log(D(x)\space + (1-y)\log{(1-D(x))}) V(D)=−(ylog(D(x) +(1−y)log(1−D(x)))
其中 D ( x ) D(x) D(x)为将样本判断为来自数据集的概率,自然 1 − D ( x ) 1-D(x) 1−D(x)就是判断样本来自生成器的概率。
又因为来自生成器的样本 x ~ G ( z ) x~G(z) x~G(z),所以有:
V ( G , D ) = − ( y log ( D ( x ) + ( 1 − y ) log ( 1 − D ( G ( z ) ) ) V(G,D)=-(y\log(D(x)\space + (1-y)\log{(1-D(G(z))}) V(G,D)=−(ylog(D(x) +(1−y)log(1−D(G(z)))
推广到 N N N个样本,则有:
V ( G , D ) = − ( ∑ i = 1 N y i log ( D ( x i ) + ∑ i = 1 N ( 1 − y i ) log ( 1 − D ( G ( z i ) ) ) V(G,D)=-(\sum_{i=1}^N y_i\log(D(x_i)\space +\sum_{i=1}^N(1-y_i)\log{(1-D(G(z_i))}) V(G,D)=−(∑i=1Nyilog(D(xi) +∑i=1N(1−yi)log(1−D(G(zi)))
为了表达无限个样本的情况,以期望的形式写出:
V ( G , D ) = − ( E x ~ p d a t a y i log ( D ( x ) + E z ~ p z ( z ) ( 1 − y i ) log ( 1 − D ( G ( z ) ) ) V(G,D)=-(E_{x~p_{data}} y_i\log(D(x)\space +E_{z~p_z(z)}(1-y_i)\log{(1-D(G(z))}) V(G,D)=−(Ex~pdatayilog(D(x) +Ez~pz(z)(1−yi)log(1−D(G(z)))
最后另 y i = 1 2 y_i=\frac{1}{2} yi=21,有:
V ( G , D ) = − 1 2 ( E x ~ p d a t a log ( D ( x ) + E z ~ p z ( z ) log ( 1 − D ( G ( z ) ) ) V(G,D)=-\frac{1}{2}(E_{x~p_{data}} \log(D(x)\space +E_{z~p_z(z)}\log{(1-D(G(z))}) V(G,D)=−21(Ex~pdatalog(D(x) +Ez~pz(z)log(1−D(G(z)))
在训练过程中,我们应该首先训练辨别器,让辨别器具有足够好的分辨能力,所以我们应该保持 G G G不变的情况下,将此损失函数最小化:
m i n D V ( G , D ) = − 1 2 ( E x ~ p d a t a log ( D ( x ) + E z ~ p z ( z ) log ( 1 − D ( G ( z ) ) ) min_D\space V(G,D)=-\frac{1}{2}(E_{x~p_{data}} \log(D(x)\space +E_{z~p_z(z)}\log{(1-D(G(z))}) minD V(G,D)=−21(Ex~pdatalog(D(x) +Ez~pz(z)log(1−D(G(z)))
然后紧接着训练生成器,让生成器能够生成足够逼真的数据,让之前训练好的训练器也无法辨别出端倪,因此我们在保持D不变的情况下,让此损失函数最大化:
如果计 L = m i n D V ( G , D ) = − 1 2 ( E x ~ p d a t a log ( D ( x ) + E z ~ p z ( z ) log ( 1 − D ( G ( z ) ) ) L=min_D\space V(G,D)=-\frac{1}{2}(E_{x~p_{data}} \log(D(x)\space +E_{z~p_z(z)}\log{(1-D(G(z))}) L=minD V(G,D)=−21(Ex~pdatalog(D(x) +Ez~pz(z)log(1−D(G(z))),
那么我们的目标应该是:
m a x G m i n D V ( G , D ) = − 1 2 ( E x ~ p d a t a log ( D ( x ) + E z ~ p z ( z ) log ( 1 − D ( G ( z ) ) ) max_Gmin_D\space V(G,D)=-\frac{1}{2}(E_{x~p_{data}} \log(D(x)\space +E_{z~p_z(z)}\log{(1-D(G(z))}) maxGminD V(G,D)=−21(Ex~pdatalog(D(x) +Ez~pz(z)log(1−D(G(z)))
然后我们拿去整个式子中的因子 − 1 2 -\frac{1}{2} −21,则最大最小化取反,有:
m i n G m a x D V ( G , D ) = E x ~ p d a t a log ( D ( x ) + E z ~ p z ( z ) log ( 1 − D ( G ( z ) ) min_Gmax_D\space V(G,D)=E_{x~p_{data}} \log(D(x)\space +E_{z~p_z(z)}\log{(1-D(G(z))} minGmaxD V(G,D)=Ex~pdatalog(D(x) +Ez~pz(z)log(1−D(G(z))
推理完毕。