1、什么是潜在空间?
If I have to describe latent space in one sentence, it simply means a representation of compressed data.
如果我必须用一句话来描述潜在空间,它只是意味着压缩数据的表示。
想象一个像上面所示的手写数字(0-9)的大型数据库。相同数字的手写图像(即3的图像)与其他不同数字的图像(即3s vs. 7s)相比,彼此之间最相似。但我们能训练一个算法来识别这些相似性吗?如何训练?
如果你训练了一个模型来对数字进行分类,那么你也训练了这个模型来学习图像之间的“结构相似性”。事实上,这就是模型如何首先能够对数字进行分类——通过学习每个数字的特征。
如果这个过程看起来对你来说是“隐藏”的,那是因为它是。Latent,顾名思义就是“隐藏的”。
“潜在空间”的概念很重要,因为它的用途是“深度学习”的核心——学习数据的特征并简化数据表示以寻找模式。
感兴趣吗?让我们一点一点地分解潜在空间:
① 为什么我们在机器学习(ML)中压缩数据?
数据压缩(Data compression)被定义为使用比原始表示更少的比特对信息进行编码的过程。这就像获取一个19D数据点(需要19个值来定义唯一的点)并将所有信息压缩到一个9D数据点中。
通常情况下,数据在机器学习中被压缩,以学习有关数据点的重要信息。让我举个例子来解释。
假设我们想训练一个模型来使用全卷积神经网络(FCN)对图像进行分类(即输出给定数字图像的数字)。当模型“学习”时,它只是学习每一层的特征(边、角度等),并将特征组合归因于特定的输出。
但每次模型通过一个数据点进行学习时,图像的维数首先会降低,然后才会最终增加(见下面的编码器和瓶颈)。当维数降低时,我们认为这是一种有损压缩。
因为模型需要重建压缩数据(参见解码器),它必须学会存储所有相关信息并忽略噪声。这就是压缩的价值——它允许我们去掉任何无关的信息,只关注最重要的特性。
这种“压缩状态”是我们数据的潜在空间表示。
② 空间(space)是什么意思?
你可能想知道为什么我们称它为潜在空间。毕竟,压缩的数据,乍一看,可能不会引起任何形式的“空间”。
但这里有个相似之处。
在这个相当简单的例子中,假设我们的原始数据集是尺寸为5×5×1的图像。我们将我们的潜在空间维度设置为3×1,这意味着我们压缩的数据点是一个具有3维的向量。
现在,每个压缩数据点仅由3个数字唯一定义。这意味着我们可以在三维平面上绘制这些数据(一个数字是x,另一个是y,另一个是z)。
这就是我们所指的“空间”。
Whenever we graph points or think of points in latent space, we can imagine them as coordinates in space in which points that are “similar” are closer together on the graph.
每当我们绘制点或考虑潜在空间中的点时,我们可以将它们想象为空间中的坐标,其中“相似”的点在图上靠的更近。
一个自然出现的问题是,我们如何想象4D点或n维点的空间,甚至是非向量的空间(因为潜在空间表示不需要2或3维向量,而且通常不需要,因为太多的信息回丢失)。
令人不满意的答案是,我们不能。我们是三维生物,无法理解n维空间(例如n>3)。然而,有一些工具,如t-SNE,可以将我们的高维潜在空间表征转化为我们可以可视化的表征(2D或3D)。(参见下面可视化潜在空间部分。)
但是你可能会想,什么是“相似”的图像,为什么降低数据的维数会使相似的图像在空间上“更接近”?
③ 相似(similar)是什么意思?
如果我们看三张图片,两张椅子和一张桌子,我们会很容易地说出这两张椅子的图像是最相似的,而桌子和椅子的图像是最不同的。
但是,是什么让这两张椅子的图像“更相似”呢?椅子具有可区分的特征(即靠背,没有抽屉,腿之间的连接)。这些都可以被我们的模型通过学习边、角度等模式来“理解”。
如前所述,这些特征被封装在数据的潜在空间表示中。
因此,随着维数的降低,与每张图像不同的“无关”信息(例如椅子的颜色)从我们的潜在空间表示中“删除”,因为每张图像只有最重要的特征存储在潜在空间表示中。
因此,当我们降低维度时,两把椅子的表现变得不那么明显,而更相似。如果我们想象它们在太空中,它们会“更接近”。
请注意,我在整篇文章中提到的“接近度”(“closeness”)度量是一个模棱两可的术语,而不是确定的欧几里得距离,因为空间中的距离有多种定义。
2、为什么潜在空间很重要?
潜在空间的概念绝对是有趣的。但它是如何使用的呢?我们什么时候用它?最重要的是,为什么?
我们会发现,潜在空间“隐藏”在许多我们最喜欢的图像处理网络、生成模型等中。
虽然潜在空间对大多数人来说是隐藏的,但在某些任务中,了解潜在空间不仅是有帮助的,而且是必要的。
① 表示学习(Representation Learning)
数据的潜在空间表示包含了表示原始数据点所需的所有重要信息。
这种表示(representation)必须表示原始数据的特征(features)。
换句话说,模型学习数据特征并简化其表示以使其更易于分析。
这是表示学习概念的核心,它被定义为一组技术,允许系统从原始数据中发现特征检测或分类所需的表征(representations)。
在这个用例中,我们的潜在空间表示用于将更复杂形式的原始数据(如图像、视频)转换为更简单的表示,从而“更便于处理”和分析。
下面列出了表示学习的具体实例——Manifolds。
潜在空间是流形学习(manifold learning)中的一个重要概念,是表示学习的一个分支。
数据科学中的流形(manifolds)可以理解为在某种程度上“相似”的数据组或子集。
这些在高维空间中通常难以察觉或模糊的相似性,一旦我们的数据在潜在空间中被表示出来,就可以被发现。
以下面的“swiss roll”为例。
在3D中,我们知道存在相似数据点的组,但是用高维数据来描绘这样的组要困难得多。
通过将数据的维度降低到2D,在这种情况下可以被认为是“潜在空间”表示,我们能够更容易地区分数据集中的流形(相似数据组)。
要了解更多关于流形和流形学习的知识,我推荐以下文章:
- Manifolds in Data Science — A Brief Overview:https://towardsdatascience.com/manifolds-in-data-science-a-brief-overview-2e9dde9437e5
- 2.2. Manifold learning:https://scikit-learn.org/stable/modules/manifold.html?source=post_page-----de5a7c687d8d--------------------------------
② 自动编码器和生成模型(Autoencoders and Generative Models)
一种常见的深度学习模型是自动编码器,它可以操纵潜在空间中数据的“接近度”(“closeness”)——一种作为恒等函数(identity function)的神经网络。换句话说,自动编码器学会输出输入的任何内容。
现在,如果你是这个领域的新手,你可能会想,为什么我们需要一个这样的模型呢?如果它输出的只是它自己,那么它似乎毫无用处……
虽然这个推理是有效的,但我们不太关心模型的输出。我们更关心模型在这个过程中学到了什么。
当我们强迫一个模型成为恒等函数时,我们是在强迫它将所有数据的相关特征存储在压缩表示中,以便在压缩形式中有足够的信息,这样模型就可以“准确”地重建它。听起来是不是很熟悉?应该是这样,因为这个压缩表示是我们的潜在空间表示(上图中的红色块)。
我们已经看到了如何在潜在空间中更容易发现模式,因为相似的数据点往往会聚集在一起,但我们还没有看到如何从这个潜在空间中采样点来生成“新”数据。
在上面的例子中,我们可以通过对潜在空间进行插值来生成不同的面部结构,并使用我们的模型解码器将潜在空间表示重建为与原始输入具有相同尺寸的2D图像。
什么是潜在空间插值?
假设我已经将前一节的椅子图像压缩为以下2D向量,[0.4, 0.5]和[0.45, 0.45]。假设桌子被压缩到[0.6,0.75]。如果我要对潜在空间进行插值,我会对“椅子”簇和“桌子”簇之间的潜在空间中的点进行采样。
我们可以将这些采样的2D向量输入到模型的解码器中。瞧!我们得到的“新”图像看起来像是椅子和桌子之间的变形。“新”加了引号,因为这些生成的图像在技术上并不独立于原始数据样本。
下面是潜在空间中两种椅子之间线性插值的例子。
图像生成仍然是一个活跃的研究领域,而潜在空间是一个必须理解的基本概念。请参阅以下文章,了解生成模型的更多用例,以及使用GAN(生成对抗网络)的潜在空间差值的实际示例,GAN是另一个使用潜在空间表示的生成模型。
- 18 Impressive Applications of Generative Adversarial Networks(GANs):https://machinelearningmastery.com/impressive-applications-of-generative-adversarial-networks/?source=post_page-----de5a7c687d8d--------------------------------
- How to Explore the GAN Latent Space When Generating Faces:https://machinelearningmastery.com/how-to-interpolate-and-perform-vector-arithmetic-with-faces-using-a-generative-adversarial-network/?source=post_page-----de5a7c687d8d--------------------------------
3、潜在空间可视化
有关潜在空间可视化的更多信息,我推荐Hackernoon的文章,该文章提供了一个使用t-SNE算法在2D空间中可视化数字图像之间相似性的实际示例。
- Latent space visualization — Deep Learning bits #2:https://hackernoon.com/latent-space-visualization-deep-learning-bits-2-bd09a46920df?source=post_page-----de5a7c687d8d--------------------------------
4、主要收获
潜在空间只是压缩数据的一种表示,其中相似的数据点在空间中距离更近。
潜在空间对于学习数据特征和寻找用于分析的更简单的数据表示非常有用。
我们可以通过分析潜在空间中的数据来理解数据点之间的模式或结构相似性,无论是通过流形还是聚类等。
我们可以在潜在空间中插入数据,并使用我们模型的解码器来“生成”数据样本。
我们可以使用t-SNE和LLE等算法来可视化潜在空间,这些算法将潜在空间转换为2D或3D。
在了解潜在空间的过程中,我被这个“隐藏”但又必不可少的概念所吸引。我希望这篇文章能够揭开潜在空间表示的神秘面纱,并提供我作为一个新手所渴望的对深度学习的“更深层次的理解”。
5、参考资料
- Understanding Latent Space in Machine Learning:https://towardsdatascience.com/understanding-latent-space-in-machine-learning-de5a7c687d8d
- 理解机器学习中的潜在空间:https://zhuanlan.zhihu.com/p/369946876
- Manifolds in Data Science — A Brief Overview:https://towardsdatascience.com/manifolds-in-data-science-a-brief-overview-2e9dde9437e5
- 2.2. Manifold learning:https://scikit-learn.org/stable/modules/manifold.html?source=post_page-----de5a7c687d8d--------------------------------
- 18 Impressive Applications of Generative Adversarial Networks(GANs):https://machinelearningmastery.com/impressive-applications-of-generative-adversarial-networks/?source=post_page-----de5a7c687d8d--------------------------------
- How to Explore the GAN Latent Space When Generating Faces:https://machinelearningmastery.com/how-to-interpolate-and-perform-vector-arithmetic-with-faces-using-a-generative-adversarial-network/?source=post_page-----de5a7c687d8d--------------------------------
- Latent space visualization — Deep Learning bits #2:https://hackernoon.com/latent-space-visualization-deep-learning-bits-2-bd09a46920df?source=post_page-----de5a7c687d8d--------------------------------