AiTechYun
编辑:chux
Glow,一种使用可逆1×1卷积的可逆生成模型。它扩展了以前的可逆生成模型,简化了架构。模型可以生成逼真的高分辨率图像,支持高效采样,并发现可用于操纵数据属性的功能。我们正在发布模型代码和在线可视化工具,以便人们可以探索并构建这些结果。另外,网站上也可以进行交互性操作。
研究人员Prafulla Dhariwal和Durk Kingma的图像属性操作。该模型在训练时没有给出属性标签,但它学习了一个潜在空间,其中某些方向对应于胡须密度,年龄,头发颜色等属性的变化。
生成建模就是观察数据,如一组面部图片,然后学习如何生成这些数据的模型。学习近似数据生成过程需要学习数据中存在的所有结构,并且成功的模型应该能够合成看起来类似于数据的输出。准确的生成模型具有广泛的应用,包括语音合成,文本分析和综合,半监督学习和基于模型的控制。我们提出的技术也可以应用于这些问题。
Glow是一种可逆的生成模型,也称为基于流的生成模型,是NICE和RealNVP技术的扩展。与GAN和VAE相比,基于流的生成模型迄今为止在研究界很少受到关注。
基于流的生成模型的一些优点包括:
我们的技术与RealNVP相比,我们在标准基准测试中取得了显着的改进,RealNVP是以前基于流量的生成模型的最佳公布结果。
RealNVP模型与我们的Glow模型在各种数据集的测试集上,评估bits per dimension定量性能。
在对30,000个高分辨率面部的数据集进行训练后,我们模型中的样本。
Glow模型可以生成逼真的高分辨率图像,并且很高效。我们的模型需要大约130ms才能在NVIDIA 1080 Ti GPU上生成256 x 256样本。与之前的工作一样,我们发现从降低温度模型中取样通常会产生更高质量的样品。上述样品就是通过将潜伏的标准偏差缩放0.7的温度获得的。
我们还可以在任意人脸之间进行插值,使用编码器对两个图像进行编码并从中间点进行采样。请注意,输入是任意人脸,而不是模型中的样本,因此模型支持整个目标分布。
Prafulla的脸与名人的脸进行插值。
我们可以在没有标签的情况下训练基于流的模型,然后将学习的潜在表示用于下游任务,例如操纵输入的属性。这些语义属性可以是面部中的头发颜色,图像的样式,音乐声音的音调或文本句子的情感。由于基于流的模型具有完美的编码器,因此可以对输入进行编码并计算具有或不具有属性的输入的平均潜在向量。然后可以使用两者之间的矢量方向来操纵朝向该属性的任意输入。
上述过程需要相对少量的标记数据,并且可以在模型训练完成后完成(训练时不需要标签)。以前使用GAN的工作需要单独训练编码器。用 VAE的方法只能保证解码器和编码兼容数据分布。其他方法涉及直接学习表示变换的函数,如Cycle-GAN,但是它们需要对每次变换进行重新训练。
# Train flow model on large, unlabelled dataset X
m = train(X_unlabelled)
# Split labelled dataset based on attribute, say blonde hair
X_positive, X_negative = split(X_labelled)
# Obtain average encodings of positive and negative inputs
z_positive = average([m.encode(x) for x in X_positive])
z_negative = average([m.encode(x) for x in X_negative])
# Get manipulation vector by taking difference
z_manipulate = z_positive - z_negative
# Manipulate new x_input along z_manipulate, by a scalar alpha \in [-1,1]
z_input = m.encode(x_input)
x_manipulated = m.decode(z_input + alpha * z_manipulate)
简单的代码片段,用于使用基于流的模型来操作属性。
我们的主要贡献是增加了可逆的1×1卷积,以及删除其他组件,从而简化了整体架构。
RealNVP架构由两种类型的层组成:具有棋盘屏蔽的层和具有通道屏蔽的层。我们使用棋盘屏蔽删除图层,简化了体系结构。具有通道屏蔽功能的层执行相当于以下步骤的重复:
通过链接这些层,A更新B,然后B更新A,然后A再更新B……这种双向信息流显然非常严格。我们发现通过将步骤(1)的反向排列改变为(固定的)混洗排列来改善模型性能。
更进一步,我们也可以学习最优排列。学习置换矩阵是一种离散优化,不能修改为梯度上升。但由于置换操作只是使用方阵进行线性变换的一种特殊情况,我们可以使用卷积神经网络,因为置换通道相当于具有相同数量输入和输出通道的1×1卷积运算。因此,我们用学习的1×1卷积运算替换固定排列。1×1卷积的权重被初始化为随机旋转矩阵。如下图所示,此操作可带来显着的建模改进。我们还表明,通过权重的LU分解可以有效地完成优化目标函数所涉及的计算。
我们的主要贡献是可逆的1×1卷积,可以带来显着的建模改进。
此外,我们删除批量标准化并将其替换为激活标准化层。该层简单地移动和缩放激活,具有依赖于数据的初始化,该初始化在给定初始小批量数据的情况下规范化激活。这允许将小批量大小缩小到1(对于大图像)并扩大模型的大小。
我们的架构结合各种优化,例如梯度检查点,使我们能够比平常更大规模地训练基于流的生成模型。我们使用Horovod在多台机器的集群上轻松训练我们的模型; 我们演示中使用的模型在5台机器上进行了训练,每台8个GPU。使用此设置,可以训练具有超过一亿个参数的模型。
我们的工作表明,可以训练基于流量的模型来生成逼真的高分辨率图像,并学习可以轻松用于下游任务(如数据操作)的潜在表征。
未来工作的几个方向:
论文:d4mucfpksywv.cloudfront.net/research-covers/glow/paper/glow.pdf 代码:github.com/openai/glow