GAN(GenerativeAdversarial Nets)生成对抗式网络
G(Generator):模拟数据分布,目的是最大化D犯错的概率
D(Discriminator):估计一个样本来自训练集的概率,目的是最小化D犯错的概率
最后达到1/2的平衡状态。G和D由多层感知机定义,系统使用反向传播(backpropagation)训练。训练或产生样本的时候不需要马尔科夫链或者展开的近似推理网络,G和D的关系类似于制造假币商和警察。
G需要从数据x上学习分布pg,为此我们定义一个噪声向量z的先验概率pz(z),然后用G(z;θg)表示到数据空间的映射,其中 G 是一个具有参数θg的多层感知机的可微函数。
多层感知机D(x;θd)输出一个单独的标量,D(x)表示x来自训练集的概率。我们训练D来最大化正确识别数据集和来自G的样本的概率,同时训练G来最小化log(1-D(G(z)))
也就是说,D和G之间是一个minimax游戏,价值函数如下:
如图,蓝点是D的分布,绿线是G的分布,黑点是实际样本的分布,z从x轴均匀采样,向上的箭头表示映射x=G(z)如何对变换样本施加非均匀分布pg。G在高密度的地方收缩,在低密度的地方舒展。(a)最初G模仿实际样本,D是个部分准确的分类器。(b)D被训练用来识别G和实际样本,最终收敛为pdata(x)/(pdata(x)+pg(x))。(c)更新G,使G更容易被D识别为实际样本。(d)经过多步训练,G和D会达到一个平衡点,在该点双方都不能再改变了,因为pg=pdata。D不能识别G和实际样本,也就是D(x)=0.5。
算法等理论结果
下面的证明都似懂非懂,不过贴出来,说不定哪天看懂了呢。。
命题1 对于固定的G,最优D是:
证:给定任何G,D要最大化V(G,D)
对于任何(a,b),函数alog(y)+blog(1-y)的最大值是a/(a+b)。
价值函数表示如下:
定理1 当且仅的pg=pdata,C(G)达到全局最小值-log4
证:对于pg=pdata,D*(G)=0.5,由命题1可得,C(G)=log(0.5)+log(0.5)=-log4。
我们得到:
KL是Kullback-Leibler收敛,常用来衡量两个概率分布的距离。
C(G)又用以下形式表示:
其中:
命题2 如果G和D有足够的容量,那么在Algorithm1的每一步,给定G,D能够达到它的最优值,pg更新,以提高
然后pg收敛到pdata。
证:
实验
数据库:MNIST,Toronto Face,CIFAR-10
G:RELU激活函数和sigmoid激活函数
D:maxout激活函数
优点和缺点
优点:不需要马尔科夫链。
缺点:pg(x)没有清晰的表示,D在训练过程中并没有和G同步得很好(G不能被训练太多次而没有更新D,这样是为了避免Helvetica scenario,在这种场景下,G让太多z崩溃到相同值x,以拥有足够的多样性来模拟pdata),很像波兹曼机必须在学习步骤之间保持最新的负链。
未来工作
1. 通过添加c作为G和D的输入,得到条件生成模型p(x|c)。
2. 给定x,通过训练,学习近似推理,预测z。这和wake-sleep算法训练的推理网络相似,但是有一个优点:推理网络用于在G结束训练之后的固定的G。
3. 为所有条件建立模型,其中S是x的索引的子集,通过训练共享参数的条件模型建立模型。还可以使用生成网络实现决定性MP-DBM的随机扩展。
4. 半监督学习:当有限的标记数据可用时,从D或者推理网络的特征可以提高分类器的性能。
5. 效率提高:通过划分协调G和D的方法或者在训练期间确定更好的样本z的分布,可以加快训练速度。