参考:
1. 生成(Generator)
模型通过学习一些数据,然后生成类似的数据。
比如让模型学习很多动物图片,最终计算机就可以自行生成动物图片了
训练完成后,即使没有NN Encoder,输入一段Code,也可以使用NN Decoder生成相关图片
但是,现有的评价方式,比如计算生成图片与标准图片逐像素的平方距离,无法有效地判断
2. GAN (Generative Adversarial Networks)
GAN是如何工作的呢?
首先,有一个很菜的生成网络Gv1,可以生成质量很差的图片, 一个很菜的分类网络Dv1,可以对图片进行很差的分类。
然后,对Gv1进行训练,使它成为一般般的生成器Gv2。能让Dv1分辨不出来。然后训练Dv1,使它能够识别出Gv2生成的假图片。
以此类推,最终Dv,Gv都会成为非常厉害的生成器和分类器。
3. 损失函数
首先我们知道真实图片集的分布 Pdata(x),x 是一个真实图片,可以想象成一个向量,这个向量集合的分布就是 Pdata。我们需要生成一些也在这个分布内的图片,如果直接就是这个分布的话,怕是做不到的。
我们现在有的 generator 生成的分布可以假设为 PG(x;θ),这是一个由 θ 控制的分布,θ 是这个分布的参数(如果是高斯混合模型,那么 θ 就是每个高斯分布的平均值和方差)
假设我们在真实分布中取出一些数据,{x1, x2, … , xm},我们想要计算一个似然 PG(xi; θ)。
对于这些数据,在生成模型中的似然就是:
如何最大化这个似然,是GAN做的事情
为了学习产生器在数据集x上的分布pg,我们在输入的噪声变量pz(z)上定义一个先验,在表示一个到数据空间的映射G(a;θg),G是一个用参数为θt的多层感知机表示的可微函数。我们同时定义一个另一个多层感知机D(x; θd)输出一个标量。表示x来自数据集而非产生器G。我们训练D以最大化正确分辨输入数据来自G还是真实数据,同时最小化log(1 − D(G(z))):
用自己的话来说,GAN的损失函数分为两个部分。第一个部分,对绅士图片的分类,这个部分的D(x)越大越好,而第二个部分是对网络产生的假图片进行损失函数计算,这一部分的D(G(z))越小越好。