GAN和DCGAN

Generative Adversarial Networks

生成式对抗网络

GAN和DCGAN_第1张图片

GAN的体系结构如图所示。在GAN架构中有两个部分:1生成器(generator)网络能够生成看起来像真实的数据。;2鉴别器(discrimiator)网络试图区分虚假数据和真实数据。这两个网络都在互相竞争。生成器网络试图欺骗鉴别器网络。这时,鉴别器网络就会适应新的假数据。这些信息反过来又用于改进生成器。

鉴别器是一个二分类器,用来分别输入的X是来源于真实数据和来源与鉴别器的假数据。假设鉴别器输入x时输出标量值o\in \mathbb{R},通过sigmoid层获得预测概率D(x)=1/(1+e^{-o})。假定标签y为1表示真实数据,0表示假数据。最小化交叉熵损失(cross-entropy loss)来训练鉴别器。

\min_{G}{\left \{ -y\log D(x)-(1-y)log(1-D(x)) \right \}}

生成器的输入采用随机生成数,比如z\sim N(0,1),输入z为潜在变量(latent variable),生成x^{'}=G(z)。生成器的目标是使得鉴别器把x^{'}=G(z)误认为真实数据,即D(G(z))\approx 1。对于给定鉴别器D,更新生成器G参数最小化y=0时的交叉熵损失(cross-entropy loss):

\max_{G}{\left \{ -(1-y)\log(1-D(G(z))) \right \}}=\max_{G}{\left \{ -\log(1-D(G(z))) \right \}}

当鉴别器可以识别出生成数据时,D(x^{'})\approx 0的损失接近0,导致梯度太小(梯度消失),无法有效训练生成器,因此采用最小化以下损失:

\min_{G}{\left \{ -y\log(D(G(z))) \right \}}=\min_{G}{\left \{ -\log(D(G(z))) \right \}}

训练目标使得输入x^{'}=G(z)鉴别器输出y=1

综上所述,D和G正在玩一个具有综合目标函数的“极小极大”游戏:

\min_{D}\max_{G}{\left \{ -E_{x\sim Data}\log D(x)-E_{z\sim Noise}\log(1-D(G(z)) ) \right \}}

 

DCGAN

DCGAN 的判别器和生成器都使用了卷积神经网络(CNN)来替代GAN 中的多层感知机,同时为了使整个网络可微,拿掉了CNN 中的池化层,另外将全连接层以全局池化层替代以减轻计算量。

2. 去卷积(反卷积,Deconvolution)
从上图中可以看到,生成器G 将一个100 维的噪音向量扩展成64 * 64 * 3 的矩阵输出,整个过程采用的是微步卷积的方式。作者在文中将其称为fractionally-strided convolutions,并特意强调不是deconvolutions。

上采样和去卷积是同一个概念,它的目的是将经过池化层以后缩小的矩阵扩大到一定的大小,比如说从3 * 3 扩大到5 * 5,如下图所示:

 

而去卷积(链接:反卷积)又包含转置卷积和微步卷积,两者的区别在于padding 的方式不同:

另外还有一个概念叫空洞卷积(Dilated Convolution)。在pixel-wise 目标检测任务上有一个常见的场景就是需要通过去卷积来会恢复经过池化层以后的矩阵大小,先池化再去卷积的过程实际上损失了很多信息,而这个过程的真实目的实际上就是为了通过缩小矩阵size 的方式来增大感受野,那能不能跳过先缩小在增大的过程直接进行感受野放大呢?这个就是所谓的空洞卷积,更详细的内容可以参考这个链接:空洞卷积

参考资料:

https://blog.csdn.net/qq_33594380/article/details/84135797

 

 

 

 

 

 

 

你可能感兴趣的:(深度学习)