微步长卷积运算图示,蓝色是输入,绿色是输出。
插一段边注:进行上采样的卷积层有很多名字: 全卷积( fullconvolution), 网内上采样(in-networkupsampling), 微步长卷积(fractionally-stridedconvolution),反向卷积(backwardsconvolution),反卷积(deconvolution),上卷积(upconvolution),或者转置卷积(transposedconvolution)。异常不推荐应用术语“反卷积”,因为这个术语已经有其他含义了:在某种数学运算,以及计算机视觉的其它应用中,这个术语有完全不合的含义。
应用 DCGAN 构造生成器的一种办法。图像来自DCGAN论文
DCGAN 论文也提出了其他的在练习 DCGANs 时的技能和调剂,比如批量正则化(batchnormalization)以及 leaky RELUs。
练习判别器的目标是:
3.那么我们如何补全图像?
3.应用G(z)生成伪图像
让我们先停下来观赏一下 G(z) 多么强大年夜吧!DCGAN 论文给出了DCGAN在卧室数据集练习出来的样子。然后 G(z) 可以给出下面的伪图像,生成器认为的卧室是什么样子的。下面的图片都不在原始数据集里哦!
别的,你也可以在输入空间z进行代数运算。下面是一个生成人脸的收集
基于DCGAN的人脸代数运算 DCGAN论文
4.[ML-Heavy] 练习DCGAN
如今我们已经定义了G(z),并见识了它多么强大年夜。那么我们怎么练习它呢?我们有很多未知的变量(参数),须要找到它们。此时,我们就要用到对抗收集了。
起首我们要定义一些符号。数据的概率分布(未知的)记作pdatapdata。那么G(z),(个中z∼pzz∼pz )可以懂得为年腋荷琐概率分布中的采样。让我们把这个概率分布记作pgpg。
判别器收集D(x)输入图像x,返回图像x是大年夜pdatapdata的分布中采样的概率。理论上,当输入图像是大年夜pdatapdata中采样获得时,判别器输出一个接近1的值,当输入图像是伪图像,比如pgpg采样获得的图像时,判别器输出一个接近0的值。在DCGANs中,D(x)是一个传统的卷积神经收集。
判别器卷积神经收集,图片来自 图像恢复论文
1、对于真实数据分布x∼pdatax∼pdata的每一张图片,最大年夜化D(x)。
2、对于不是真实数据分布x≁pdatax≁pdata的每一张图片,最小化D(x)。
生成器G(z)的练习目标是生成可以困惑D的样本。输出是一张图像,可以作为判别器的输入。是以,生成器欲望最大年夜化D(G(z)),也就是最小化(1-D(G(z))),因为D是一个概率,取值袈溱0和1之间。
论文中提出,对抗收集是经由过程下面的最小最大年夜策略实现的。第一项中的数学期望遍历了真实数据分布,第二项的数学期望遍历了pzpz中的样本,也就是遍历了G(z)∼pgG(z)∼pg。
- minGmaxDEx∼pdatalog(D(x)+Ez∼pz[log(1−D(G(z)))]minGmaxDEx∼pdatalog(D(x)+Ez∼pz[log(1−D(G(z)))]
经由过程这个表达式关于D和G的参数的梯度,可以练习它们。我们知道若何快速计算这个表达式的每一个部分。数学期望可以经由过程大年夜小为m的小批数据来估计,内侧的最大年夜化可以经由过程k步梯度来估计。已经证实,k=1是比较合适练习的值。
我们用θdθd来表示判别器的参数,用θgθg来表示生成器的参数。关于用θdθd和θgθg的损掉的梯度可以经由过程反向传播来计算,因为D和G都是由成熟的神经收集模块构成的。下面是GAN论文中的练习策略。理论上,练习停止后,pg==pdatapg==pdata。所以G(z)可以生成服大年夜pdatapdata分布的样本。
2维图像的PDF和采样。 PDF 用等高线图表示,样本点画在膳绫擎。
GAN 论文中的练习算法。
5.现有的GAN和DCGAN实现
- 在 Github 上,你可以看到很多极棒的 GAN 和 DCGAN 实现。
- goodfeli/adversarial: GAN论文作者写的 Theano GAN 实现。
- tqchen/mxnet-gan: 非官方 MXNet GAN 实现。
- Newmu/dcgan_code: DCGAN论文作者写的 Theano GAN 实现。
- soumith/dcgan.torch: DCGAN论文作者之一 (Soumith Chintala) 的 Torch DCGAN 实现。
- carpedm20/DCGAN-tensorflow: 非官方 TensorFlow DCGAN 实现。
- openai/improved-gan: OpenAI 第一篇论文背后的代码。在 carpedm20/DCGAN-tensorflow 基本长进行了大年夜量的修改。
- mattya/chainer-DCGAN: 非官方 Chainer DCGAN 实现。
- jacobgil/keras-dcgan: 非官方 (未完成) KerasDCGAN 实现。
然后我们找到最合适填充归去的伪图片。