NIPS 2016 《Coupled Generative Adversarial Neworks》

这篇文章中,作者提出了另一个的GAN的变种CoGAN,它通过学习多个域(domain)上的联合分布来实现在无配对数据的情况下的风格转换。CoGAN顾名思义是使用了两个GAN。通过一种权值共享机制(weight-sharing constrain)来限制网络的容量,并且使模型倾向于学习不同域的联合分布,而不是各个域的边缘分布的乘积。通过多个实验证明,它可以成功的学习在没有任何配对数据下的域之间的联合分布,在域适应(domain adaption)和图像转换(image transformation)方面效果很好。
CoGAN的架构如下所示:

它使用了两个标准的GAN,每个GAN中只有一个生成器和一个判别器,生成器之间前几层实现权值共享,判别器的后几层之间实现权值共享。
下面看一下它的objective function是怎么设置的。
Generator
假设
x
1
x_{1}
x1和
x
2
x_{2}
x2是采样自两个不同域的边缘分布的样本,分别满足
x
1
∼
p
x
1
x_{1} \sim p_{x_{1}}
x1∼px1和
x
2
∼
p
x
2
x_{2} \sim p_{x_{2}}
x2∼px2,
g
1
g_{1}
g1和
g
2
g_{2}
g2分别代表上图所示的
G
A
N
1
GAN_{1}
GAN1和
G
A
N
2
GAN_{2}
GAN2,它们接收一个随机的噪声向量
z
z
z,然后将其映射到分别具有和
x
1
x_{1}
x1和
x
2
x_{2}
x2有相同支持的图像。
g
1
g_{1}
g1和
g
2
g_{2}
g2生成的样本记为
g
1
(
z
)
g_{1}(z)
g1(z)和
g
2
(
z
)
g_{2}(z)
g2(z) ,分别满足
g
1
(
z
)
∼
P
G
1
g_{1}(z) \sim P_{G_{1}}
g1(z)∼PG1
g
2
(
z
)
∼
P
G
2
g_{2}(z) \sim P_{G_{2}}
g2(z)∼PG2 ,那么将
g
1
g_{1}
g1和
g
2
g_{2}
g2通过多层感知器实现,生成的样本可以表示为:
g
1
(
z
)
=
g
1
(
m
1
)
(
g
1
(
m
1
−
1
)
(
…
g
1
(
2
)
(
g
1
(
1
)
(
z
)
)
)
)
,
g
2
(
z
)
=
g
2
(
m
2
)
(
g
2
(
m
2
−
1
)
(
…
g
2
(
2
)
(
g
2
(
1
)
(
z
)
)
)
)
g_{1}(\mathrm{z})=g_{1}^{\left(m_{1}\right)}\left(g_{1}^{\left(m_{1}-1\right)}\left(\ldots g_{1}^{(2)}\left(g_{1}^{(1)}(\mathrm{z})\right)\right)\right), \quad g_{2}(\mathrm{z})=g_{2}^{\left(m_{2}\right)}\left(g_{2}^{\left(m_{2}-1\right)}\left(\ldots g_{2}^{(2)}\left(g_{2}^{(1)}(\mathrm{z})\right)\right)\right)
g1(z)=g1(m1)(g1(m1−1)(…g1(2)(g1(1)(z)))),g2(z)=g2(m2)(g2(m2−1)(…g2(2)(g2(1)(z))))
对于生成器来说,它的第一层学习到的是输入图像的高级语义部分,而最后一层学习到的是图像的底层的一些细节部分;对于判别器来说,正好相反。
为了使得两个域中的图共享相同的高层语义特征,在 g 1 g_{1} g1和 g 2 g_{2} g2的前 K K K层实现权值共享限制,即 θ g 1 ( i ) = θ g 2 ( i ) , i = 1 , 2 , . . . , k \theta_{g_{1}^{(i)}}=\theta_{g_{2}^{(i)}},i=1,2,...,k θg1(i)=θg2(i),i=1,2,...,k,这个约束迫使 g 1 g_{1} g1和 g 2 g_{2} g2中以相同的方式解码高级语义,但最后一层没有任何约束,这使得它们又可以学习到各自输入的底层特征,来欺骗各自的判别器。
在实验中作者发现生成器的效果和权值共享的层数多少呈正相关关系。
Discriminator
假设
f
1
f_{1}
f1和
f
2
f_{2}
f2分别代表两个discriminator,同样使用多层感知器实现,表示为:
f
1
(
x
1
)
=
f
1
(
n
1
)
(
f
1
(
n
1
−
1
)
(
…
f
1
(
2
)
(
f
1
(
1
)
(
x
1
)
)
)
)
,
f
2
(
x
2
)
=
f
2
(
n
2
)
(
f
2
(
n
2
−
1
)
(
…
f
2
(
2
)
(
f
2
(
1
)
(
x
2
)
)
)
)
f_{1}\left(\mathrm{x}_{1}\right)=f_{1}^{\left(n_{1}\right)}\left(f_{1}^{\left(n_{1}-1\right)}\left(\ldots f_{1}^{(2)}\left(\mathrm{f}_{1}^{(1)}\left(\mathrm{x}_{1}\right)\right)\right)\right), f_{2}\left(\mathrm{x}_{2}\right)=f_{2}^{\left(n_{2}\right)}\left(f_{2}^{\left(n_{2}-1\right)}\left(\ldots f_{2}^{(2)}\left(f_{2}^{(1)}\left(\mathrm{x}_{2}\right)\right)\right)\right)
f1(x1)=f1(n1)(f1(n1−1)(…f1(2)(f1(1)(x1)))),f2(x2)=f2(n2)(f2(n2−1)(…f2(2)(f2(1)(x2))))
它将输入到它的样本映射到一个概率分数,从而判别该样本有多大可能性来自于真实的数据分布。在判别器中,第一层提取低级特征,而最后一层提取高级特征。而由于在生成器中的约束,输入的图像样本在两个不同的域中共享了高级语义特征,因此我们强制
f
1
f_{1}
f1和
f
2
f_{2}
f2的最后一层实现权值共享,即
θ
f
1
n
1
−
j
=
θ
f
2
n
2
−
j
,
j
=
0
,
1
,
.
.
.
,
l
−
1
\theta_{f_{1}^{n_{1}-j}} = \theta_{f_{2}^{n_{2}-j}} , j=0,1,...,l-1
θf1n1−j=θf2n2−j,j=0,1,...,l−1
在后面的实验中作者发现,判别器中权值共享的层数多少与效果无关,但是这里仍然使用它是为了减少网络中的参数。
从上面的分析中我们可以看出,CoGAN的 G G G不同于传统的CNN,它实现的是一种上采样的操作,从而来放大图像。如下所示, G G G的前几层解码的是高层语义信息,最后解码的是底层纹理信息; D D D与传统CNN则类似,低层解码底层纹理信息,高层解码高层语义信息。因此,通过共享 G G G的前几层的权值,可以保证生成的两个域的数据在高层语义特征上类似,而后几层不加约束, 保证了两个域间有各自的特征。
传统的CNN的下采样操作:

CoGAN中 G G G的上采样操作:

learning
因此CoGAN就表示成一个受限的博弈游戏过程,对应的objective function可以写为:
V
(
f
1
,
f
2
,
g
1
,
g
2
)
=
E
x
1
∼
p
X
1
[
−
log
f
1
(
x
1
)
]
+
E
Z
∼
p
Z
[
−
log
(
1
−
f
1
(
g
1
(
z
)
)
)
]
+
E
x
2
∼
p
X
2
[
−
log
f
2
(
x
2
)
]
+
E
z
∼
p
Z
[
−
log
(
1
−
f
2
(
g
2
(
z
)
)
)
]
\begin{aligned} V\left(f_{1}, f_{2}, g_{1}, g_{2}\right) &=E_{\mathbf{x}_{1} \sim p_{\mathbf{X}_{1}}}\left[-\log f_{1}\left(\mathbf{x}_{1}\right)\right]+E_{\mathbf{Z} \sim p_{\mathbf{Z}}}\left[-\log \left(1-f_{1}\left(g_{1}(\mathbf{z})\right)\right)\right] \\ &+E_{\mathbf{x}_{2} \sim p_{\mathbf{X}_{2}}}\left[-\log f_{2}\left(\mathbf{x}_{2}\right)\right]+E_{\mathbf{z} \sim p_{\mathbf{Z}}}\left[-\log \left(1-f_{2}\left(g_{2}(\mathbf{z})\right)\right)\right] \end{aligned}
V(f1,f2,g1,g2)=Ex1∼pX1[−logf1(x1)]+EZ∼pZ[−log(1−f1(g1(z)))]+Ex2∼pX2[−logf2(x2)]+Ez∼pZ[−log(1−f2(g2(z)))]
我们的目标是在给定约束条件下的最大最小优化问题:
V
(
f
1
,
f
2
,
g
1
,
g
2
)
=
E
x
1
∼
p
X
1
[
−
log
f
1
(
x
1
)
]
+
E
Z
∼
p
Z
[
−
log
(
1
−
f
1
(
g
1
(
z
)
)
)
]
+
E
x
2
∼
p
X
2
[
−
log
f
2
(
x
2
)
]
+
E
z
∼
p
Z
[
−
log
(
1
−
f
2
(
g
2
(
z
)
)
)
]
\begin{aligned} V\left(f_{1}, f_{2}, g_{1}, g_{2}\right) &=E_{\mathbf{x}_{1} \sim p_{\mathbf{X}_{1}}}\left[-\log f_{1}\left(\mathbf{x}_{1}\right)\right]+E_{\mathbf{Z} \sim p_{\mathbf{Z}}}\left[-\log \left(1-f_{1}\left(g_{1}(\mathbf{z})\right)\right)\right] \\ &+E_{\mathbf{x}_{2} \sim p_{\mathbf{X}_{2}}}\left[-\log f_{2}\left(\mathbf{x}_{2}\right)\right]+E_{\mathbf{z} \sim p_{\mathbf{Z}}}\left[-\log \left(1-f_{2}\left(g_{2}(\mathbf{z})\right)\right)\right] \end{aligned}
V(f1,f2,g1,g2)=Ex1∼pX1[−logf1(x1)]+EZ∼pZ[−log(1−f1(g1(z)))]+Ex2∼pX2[−logf2(x2)]+Ez∼pZ[−log(1−f2(g2(z)))]
这样两个生成器之间通过权值共享学习高级的语义特征,可以实现图像在不同域的转换;同时分别保留了自己的底层的特征细节,使它们可以经过学习生成更接近真实的样本来达到骗过判别器的效果。而对于判别器来说,它们只是在最后几层实现权值共享,也不影响对于输入图像底层细节特征的把握,因此也可以最大程度地判别输入的来源。
experiments
作者主要是和CGANs进行了效果的对比,显示了CoGAN的效果要优于它。下面给出一些实验结果的图:
使用CoGAN生成具有不同属性的人脸图像

使用CoGAN生成颜色和深度图像

更多的实验细节部分和相关的网络架构可见原论文的附录部分。