原始的 GAN 的生成器和判别器网络中使用的均是全连接层,生成器网络的最后的输出层大小与真实图像尺寸相同,判别器网络最后一层只输出一个值,即图片为真实图片的概率。

生成器与判别器的目标可以用以下公式表示:

其中D(·)表示判别器认为数据为真的概率,z是随机数,用来作为生成器的输入来生成伪造的样本G(z)。


判别器的目标是输入为真实照片时,让D(·)接近 1,即让V(D,G)的第一项接近 0,而输入为伪造样本G(z)时让D(G(z))接近于0,也就是希望V(D,G)的第二项接近 0。

DCGAN 将卷积与 GAN 结合在一起,并同时在生成器和判别器运用了深度卷积神经网络,极大地提升了原始 GAN 训练时的稳定性以及生成结果的质量。

改动主要包括如下几个方面:

1.取消所有池化层,生成器中使用反卷积进行上采样,判别器用加入 stride的卷积代替池化,防止梯度稀疏;
2.去掉全连接层改用全卷积网络;
3.在生成器和判别器上都使用 Batch Norm 来解决初始化差的问题,帮助梯度传播到每一层,防止生成器把所有的样本都收敛到同一点。直接将 BN 应用到所有层会导致样本震荡和模型不稳定,因此在生成器的输出层和判别器的输入层不使用 Batch Norm,可以防止这种现象;
4.使用 Adam 优化器。

生成器结构

生成器采用了转置卷积,将 100 * 1的随机生成的数据扩大到 64 * 64 * 3。其结构如下图所示。其中卷积层使用 ReLU,最后一层使用Tanh 作为激活函数。

DCGAN生成器结构

判别器结构

判别器主题使用了4层卷积, 结构如下图所示。其中判别器网络使用 LeakyRelu 作为激活函数。

DCGAN判别器结构

损失函数

GAN 网络的优化目标公式可以将其看作交叉熵损失函数,DCGAN 判别器损失函数分为两部分:一部分为判定真实图片的损失值,正确情况是将其判别为真;另一部分为判定生成图片的损失值,正确情况是将其判别为假。分别计算两个交叉熵并加和,得到总损失值。

生成器的目标是生成图片被判别器判定为真,损失值体现的是判别器将生成图片判定为假的情况,因此每张生成图的标签为1,判别器判别为真时预测标签为1,判别为假时预测标签为0。

One Comment

  1. HELLO WORLD!

Leave a Comment

您的邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据