本文背景
深度学习通过学习各种数据的概率分布来生成高层次化的模型,在自然图像、语音处理、自然语言中方面都有应用。目前,深度学习中应用最成功的是判别模型,而深度生成模型由于在最大似然估计等一些棘手的概率计算,并未获得很大的成功。
提出方法
GAN模型的基本结构包括两个网络结构——生成模型Generator和判别模型Discriminator,G网络尽可能生成满足正样本分布的假样本,D网络则尽可能辨别出真假样本,同时对两个网络进行训练更新,使得两者在相互博弈的过程中性能都越来越好,理想情况下最终G网络的生成分布完全符合正样本的数据分布,D网络辨别的准确率维持在1/2
本文创新
-
将博弈论中零和博弈的思想应用到深度学习神经网络中
-
不再使用马尔可夫链,训练过程中不需要近似推理,减少了计算量
-
GAN中G的梯度更新信息来自判别器D,而不是来自数据样本
具体实现
生成器G和判别器D都是多层感知机。G从随机噪声中挑选数据z作为输入,输出为G(z),G的分布为p(g)。D的输出D(x)代表着判别器的输入x属于真实数据集而不是来自于生成器的概率。在训练的过程中,G的目的是让p(g)足够接近p(data),那么D就无法将来自于G的数据鉴别出来,即D(G(z))足够大;而D的目的是能够正确的将G(z)鉴别出来,即D(x)足够大且D(G(z))足够小,即D(x)+(1-D(G(z)))足够大,因此
模型的目标函数—
-
对于生成器G,目标函数为(梯度下降):
-
对于判别器D,目标函数为(梯度上升):
在模型中。生成器G和判别器D时串联的,为了保证它们能够被同时训练,设置了一个超参数k,k次优化判别器D后,优化一次生成器G,迭代轮训。这样当G变化缓慢时,D可以通过k次优化维持在最优解。
算法步骤
for 迭代次数
for k steps
1.从p(g)分布中选取m个噪声样本(z1,z2...zm)
2.从数据集p(data)中选取m个正样本(x1,x2...xm)
3.通过梯度上升来更新判别器
end
通过梯度下降更新生成器
对于固定的G,最优的判别器D为:
全局最优条件(即训练停止条件):
此时
实验验证
本文在MNIST、TFD、CIFAR-10上进行了实验验证,生成器网络G中混合使用了ReLU和sigmoid激活函数,判别器网络使用了maxout、dropout激活函数。在生成网络的底层使用噪声作为输入(理论上中间层也可以添加噪声和dropout),本文中训练时将k设为1。使用Gaussian Parzen window拟合生成网络生成的样本分布,并在测试集上估计对数似然性(即给予观察样本,判断模型正确的可能性),高斯分布的参数由验证集上交叉验证获得。在三个数据集上的实验效果与其他已有的生成模型的性能比较如下:
相对已知的生成模型效果好很多。
优点与缺点
优点:
-
计算上,不需要马尔可夫链和近似推理,避免了很大的计算量
-
GAN中G的梯度更新信息来自判别器D,而不是来自数据样本
-
可以表示非常尖锐的分布或者退步分布
缺点:
-
G不能频繁地更新,要保证与D同步
-
训练需要找到纳什均衡,这是一个比优化一个目标函数更难的问题