在训练完成后操作预训练GAN的潜在空间 $z$ 是一种实现生成式对抗网络(GAN)生成控制的方法。这种方法与条件GAN有所不同,条件GAN在训练时直接将控制机制嵌入生成器和判别器中。这项技术基于这样的观察:GAN,尤其是在多样化数据集上训练的GAN,通常会学习到一个潜在空间,其中距离和方向对应生成输出 $G(z)$ 中的语义相似性和变换。通过细致地调整这个空间,可以在不重新训练模型或在生成过程中不需显式条件输入的情况下,影响生成样本的属性。潜在空间的语义结构核心思想是,高维潜在空间 $Z$(通常由从标准高斯分布等简单分布中采样的向量 $z$ 填充)通常会形成一个有意义的内部结构。邻近的点 $z_1$ 和 $z_2$ 倾向于生成视觉上相似的输出 $G(z_1)$ 和 $G(z_2)$。更有趣的是,这个空间中的特定方向可以对应输出中有意义的语义变化。例如,沿着特定向量方向 $v$ 移动潜在向量 $z$,可能会稳定地为生成的面部添加太阳镜、改变发色或调整感知到的年龄。线性插值潜在空间操作最简单的形式是在两个潜在向量 $z_1$ 和 $z_2$ 之间进行线性插值。通过沿着连接它们的线段采样点,我们通常可以在相应的输出 $G(z_1)$ 和 $G(z_2)$ 之间生成平滑的过渡。插值后的潜在向量 $z_{interp}$ 计算如下:$$ z_{interp} = (1 - \alpha)z_1 + \alpha z_2 $$其中 $\alpha$ 的范围从0到1。为不同的 $\alpha$ 值生成样本 $G(z_{interp})$ 可以显示模型如何表示起点和终点之间的变化。这在具有良好潜在空间的GAN中表现得特别好,例如StyleGAN中的中间 $W$ 空间,它被设计得比初始 $Z$ 空间更解耦。digraph G { rankdir=LR; node [shape=circle, style=filled, fillcolor="#a5d8ff", label=""]; edge [color="#495057"]; subgraph cluster_Z { label = "潜在空间 (Z)"; bgcolor="#e9ecef"; z1 [label="z1"]; z2 [label="z2"]; z_interp [label="z_interp", fillcolor="#74c0fc"]; z1 -> z_interp [label=" (1-α)"]; z_interp -> z2 [label=" α"]; } subgraph cluster_G { label = "生成器 (G)"; bgcolor="#e9ecef"; G [shape=box, label="G", style=rounded, fillcolor="#ced4da"]; } subgraph cluster_X { label = "输出空间 (X)"; bgcolor="#e9ecef"; x1 [shape=square, label="G(z1)", style=filled, fillcolor="#b2f2bb"]; x2 [shape=square, label="G(z2)", style=filled, fillcolor="#b2f2bb"]; x_interp [shape=square, label="G(z_interp)", style=filled, fillcolor="#8ce99a"]; } z1 -> G [style=invis]; z_interp -> G [style=invis]; z2 -> G [style=invis]; {rank=same; z1; G; x1;} {rank=same; z_interp; G; x_interp;} {rank=same; z2; G; x2;} G -> x1 [lhead=cluster_X, constraint=false]; G -> x_interp [constraint=false]; G -> x2 [constraint=false]; x1 -> x_interp [label=" 平滑过渡 ", color="#adb5bd", style=dashed, arrowhead=none]; x_interp -> x2 [color="#adb5bd", style=dashed, arrowhead=none]; }显示潜在向量 $z_1$ 和 $z_2$ 之间线性插值,通过生成器 $G$ 在生成输出空间中实现平滑过渡的图示。识别属性向量为实现更精确的控制,我们需要识别潜在空间中与所需语义属性(例如,“微笑”、“年龄”、“发色”)相对应的特定方向(向量)。有几种方法可以找到这些属性向量:监督方法: 如果您有一个真实图像带有属性标签的数据集,您可以:在真实数据上训练一个辅助属性分类器(或使用预训练的)。生成大量样本 $G(z)$,并使用分类器对其进行标注。根据目标属性的存在与否将潜在向量 $z$ 分为若干组(例如,$Z_{positive}$ 和 $Z_{negative}$)。计算每组的平均向量:$\mu_{positive} = \text{mean}(Z_{positive})$ 和 $\mu_{negative} = \text{mean}(Z_{negative})$。差值向量 $v = \mu_{positive} - \mu_{negative}$ 通常代表与该属性关联的方向。将此向量(按因子 $\alpha$ 缩放)添加到潜在编码 $z$ 中,倾向于使输出 $G(z + \alpha v)$ 表现出该属性。无监督方法 (PCA): 主成分分析 (PCA) 可以应用于大量潜在向量 $z$(或更有效地说,应用于像 StyleGAN 的 $W$ 向量这样的中间表示)。主成分代表潜在空间中最大方差的方向。通常,这些高方差方向与GAN学到的显著语义属性一致。沿着这些主成分方向操作潜在向量可以提供一种无监督的属性控制形式。InterfaceGAN 及相关方法: 更精细的技术直接分析生成器学习到的函数。例如,InterfaceGAN 在潜在空间中找到线性超平面,这些超平面根据二元属性分离样本。此类超平面的法向量充当属性方向 $v$。与简单的平均技术相比,这些方法通常能产生更准确和解耦的控制。应用属性向量一旦识别出属性向量 $v$,修改生成的样本 $G(z)$ 涉及沿此方向移动其对应的潜在向量 $z$:$$ z_{modified} = z + \alpha v $$此处,$\alpha$ 是一个标量,用于控制修改的强度和方向。正的 $\alpha$ 增加了属性的出现,而负的 $\alpha$ 减少了它(或引入了相反的属性,例如皱眉而不是微笑)。修改后的输出是 $G(z_{modified})$。挑战与考量潜在空间操作虽然强大,但也面临着挑战:纠缠: 最主要的挑战是纠缠。对应于一个属性的潜在方向通常会同时影响其他属性。例如,一个“增加年龄”的向量可能也会无意中改变发色或添加眼镜。寻找真正解耦的方向是一个活跃的研究方向,通常需要专门的架构(如 StyleGAN)或在训练期间采用特定的解耦技术(如 InfoGAN,尽管操作通常是后验应用的)。非线性: 潜在空间向量与语义属性之间的关系并非总是完全线性。采取大步长 ($\alpha v$) 可能会将 $z$ 推向潜在空间中生成不真实或低质量输出的区域。添加 $v$ 的效果也可能因起始点 $z$ 而异。模型依赖性: 潜在空间操作的有效性和可解释性在很大程度上取决于特定的GAN架构及其训练所用的数据集。一些模型自然地学习到比其他模型更结构化和更易于操作的潜在空间。像 StyleGAN 的 $W$ 或 $W+$ 空间通常比初始噪声空间 $Z$ 更适合操作。发现: 寻找有意义的属性向量,尤其是在没有监督的情况下,可能很困难,并且可能需要大量的实验和可视化。这种技术提供了一种引人入胜的方式来与生成模型进行交互和控制,从而了解模型所学内容,并通过以语义上有意义的方式修改生成输出来实现创意应用。它通过提供一种不同的控制方式来补充条件方法,这种方式通常在主要训练过程之后应用。