赞
踩
把上述的 G和D 换成了两个卷积神经网络(CNN)。但不是直接换就可以了,DCGAN 对卷积神经网络的结构做了一些改变,以提高样本的质量和收敛的速度
生成器的输入是一个 100 维的噪声,中间会通过 4 层卷积层,每通过一个卷积层通道数减半,长宽扩大一倍 ,最终产生一个 64643 大小的图片输出。值得说明的是,在很多引用 DCGAN 的 paper 中,误以为这 4 个卷积层是 deconv(反卷积)层,但其实在DCGAN 的介绍中这 4 个卷积层是 fractionally strided convolution(微步幅度卷积),二者的差别如下图所示:
上图左边是反卷积,用 33 的卷积核把 22 的矩阵反卷积成 44 的矩阵;而右边是微步幅度卷积,用 33 的卷积核把 33 的矩阵卷积成 55 的矩阵,二者的差别在于,反卷积是在整个输入矩阵周围添 0,而微步幅度卷积会把输入矩阵拆开,在每一个像素点的周围添 0。 接下来我们再看一下 DCGAN 中 D 网络的结构,由于原论文中没有给出相关图,我找了一篇近似论文中的图说明:
D 可以看成是 G 结构反过来的样子,那具体结构也没什么好说的了,简言之不断地做卷积,最终得到一个 0,1 之间的结果。
GANs 的主要问题之一是收敛性不稳定,尽管 DCGAN 做了结构细化,训练过程仍可能难以收敛。我们先来分析一下为什么会出现收敛性不稳定。 GANs 的优化就是寻找两玩家非合作博弈的纳什均衡点。这里的两玩家指的就是生成器和判别器。
为了不让生成器尽可能地去蒙骗鉴别器,ImprovedDCGAN 希望以特征作为匹配标准,而不是图片作为匹配标准,于是提出了一种新的生成器的目标函数,即:
∥
E
x
∼
p
data
f
(
x
)
−
E
z
∼
p
z
(
z
)
f
(
G
(
z
)
)
∥
2
2
\left\|\mathbb{E}_{\boldsymbol{x} \sim p_{\text {data }}} \mathbf{f}(\boldsymbol{x})-\mathbb{E}_{\boldsymbol{z} \sim p_{\boldsymbol{z}}(\boldsymbol{z})} \mathbf{f}(G(\boldsymbol{z}))\right\|_{2}^{2}
∥∥Ex∼pdata f(x)−Ez∼pz(z)f(G(z))∥∥22
其中 f(x)是指的生成器把判别器的中间层输出 f(x)作为目标(一般中间层都是 D 最后几层,f(x)实际上是 feature map),这样可以让生成的中间层输出和真实数据的中间层输出尽可能相同。这种做法虽然不能保证到达均衡点,但是收敛的稳定性应该是有所提高。
收敛到同一个点,并没有什么机制可以让生成器生成不一样的内容。
用 minibatch 判别器。也就是说每次不是判别单张图片,而是判别一批图片。
将一个中间层 f(x)乘以一个 tensor,得到一个新的矩阵 M,计算 M 每一行之间的 L1 距离 o,以此为 f(x)下一层的输入
o
(
x
i
)
b
=
∑
j
=
1
n
c
b
(
x
i
,
x
j
)
∈
R
o
(
x
i
)
=
[
o
(
x
i
)
1
,
o
(
x
i
)
2
,
…
,
o
(
x
i
)
B
]
∈
R
B
o
(
X
)
∈
R
n
×
B
假设 x 是从生成器生成的,并且收敛到同一点,那么对应的 f(x)必然很相似,由 f(x)生成的 M也必然非常相似。而这些 M 每一行的 L1 距离c(xi,xj)也就会非常接近 0,这也导致 o(X)几乎是 0 向量。相对的,如果 x 是真实数据,那么 o(X)一般不会太接近 0 向量,这样判别器就可以更简单的区分生成数据或真实数据(在生成器收敛到一点的情况下)。
在更新参数值时,把它们过去的值也纳入考虑:
∥
θ
−
1
t
∑
i
=
1
t
θ
[
i
]
∥
2
\left\|\theta-\frac{1}{t} \sum_{i=1}^{t} \theta[i]\right\|^{2}
∥∥∥∥∥θ−t1i=1∑tθ[i]∥∥∥∥∥2
batch normalize 在神经网络领域有广泛应用,但是也有一些问题,比如特定样例 x 在神经网络上的输出会受到 minibatch 上其他的样本影响。文中提出了一种 virtual batch normalization(VBN),会在训练前提取一个 batch,以后就根据这个 batch 做 normalize,不过由于这样的计算成本很高,所以它仅仅被用在生成器当中。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。