神经网络 Embedding 原理及作用详解
在学习各种算法模型,特别是深度学习模型时,嵌入(Embedding)的应用无处不在。机器学习模型只接受数值组作为输入,字符或者图片首先需要转化成数值组,才能进入模型。常用的转化方式有三种:One-hot 编码、整数编码、嵌入(Embedding)的方法。
- One-hot 编码是最常用的特征表示方法,优点是简单,但是随着特征空间的变大维度爆炸,而且无法学习到词语间的联系。
- 整数编码将词映射为整数,但编码数值本身无含义,具有误导性,模型会误以为数字大小代表语义顺序。
- 嵌入的方法通过学习构造一个低维、稠密的向量,可以更好地学习到字符的表示。常见的框架有 Word2Vec(基于浅窗口的方法)、FastText(基于浅窗口的方法)、GloVe(矩阵分解方法 + 窗口方法)等。在表示学习后,相似的词汇在向量空间中距离是接近的。
什么是嵌入?
嵌入是将某些数据对象表示为向量,其构造使得数据对象的某些属性被编码到其向量表示的几何属性中。
这非常抽象,但并不像听起来那么复杂。首先,我们需要介绍一点数学知识。向量是两个听起来不同但实际上相同的东西:
- 向量是多维空间中的一个点。
- 向量是标量值(即数字)的有序列表。
要了解其工作原理,请考虑包含两个数字的列表。例如 (6, 4) 和 (2, 8)。我们可以将它们视为 x-y 轴上的坐标,每个列表对应于二维空间中的一个点。
如果我们有三个数字,比如 (3, 2, 5) 和 (4, 5, 2),那么这对应于三维空间中的点。
重要的一点是,我们可以将其扩展到更多维度:四、五、一百、一千,甚至数百万或数十亿。绘制一个有一千个维度的空间是非常困难的,但从数学上讲,这真的很容易。
向量距离与相似度
点与点之间的距离只是毕达哥拉斯定理的应用。给定两个点 $a$ 和 $b$,它们之间的距离为:
$$ d(a, b) = \sqrt{\sum_{i=1}^{n} (a_i - b_i)^2} $$
对于 (6, 4) 和 (2, 8),这意味着:
$$ d((6, 4), (2, 8)) = \sqrt{(6-2)^2 + (4-8)^2} = \sqrt{16 + 16} = \sqrt{32} \approx 5.66 $$
对于三维,我们只是通过添加一个项来扩展公式。对于 $a=(3, 2, 5)$ 和 $b=(4, 5, 2)$:
$$ d(a, b) = \sqrt{(3-4)^2 + (2-5)^2 + (5-2)^2} = \sqrt{1 + 9 + 9} = \sqrt{19} \approx 4.36 $$
我们可以将这个公式扩展到任意数量的向量。除了距离之外,我们在高维向量空间中使用的另一种测量是两个向量之间角度的余弦。如果您不仅将每个向量视为一个点,而且将其视为原点的一条线,则可以计算两个向量之间的角度 $\theta$。
为了计算这一点,我们有另一个公式可以扩展到任意数量的维度。我们知道向量 $a$ 与 $b$ 之间的角度 $\theta$ 的余弦为:
$$ \cos(\theta) = \frac{a \cdot b}{|a| |b|} = \frac{\sum_{i=1}^{n} a_i b_i}{\sqrt{\sum_{i=1}^{n} a_i^2} \sqrt{\sum_{i=1}^{n} b_i^2}} $$
这比看起来要复杂,但并不多。$a \cdot b$ 称为两个向量的点积,很容易计算。至于 $|a|$ 和 $|b|$,这些是向量的长度,即从原点到该点的距离。
这个余弦对应于大约 39.3° 的角度,但在机器学习中,我们通常会在计算余弦后停止,因为如果两个向量中的所有数字都大于零,那么角度的余弦将在 0 和 1 之间。这看起来像很多数学,但如果你仔细看一下,你会发现它只是加法、减法、乘法、除法、一个指数和一个平方根。你实际上不必做任何这些数学运算,计算机保留的全部原因就是为了做这种事情。
这一点之所以如此重要,是因为我们在计算机上保存的任何数据也只是一个数字列表。如果我们选择以这种方式看待它,那么每个数据项——数字图片、文本、录音、3D 模型文件,以及任何你能想到的可以放入计算机文件中的东西——都是一个向量。
我们如何为事物分配嵌入向量?
嵌入的目的是将向量分配给数据对象,以便它们在高维空间中的位置对有关它们的有用信息进行编码。数据对象——文本或图像或我们正在处理的任何其他对象——如果我们选择以这种方式看待它们,它们就已经是向量了。这些向量的位置并不能告诉我们任何关于它们的有用信息。
请看以下四张图片:每张图片都是 450x450 像素的图像,使用标准 RGB 调色板着色。这意味着图片由 202,500 个像素组成,每个像素的红色、绿色、蓝色值都有一个介于 0 到 255 之间的数字。将其转换为具有 607,500 个维度的向量是微不足道的。
我们可以拍摄任何一对图像并计算它们之间的距离或测量它们的余弦,但苹果不太可能彼此特别接近或与橙子特别远。至少,如果我们使用数百张苹果和橙子的图片,而不仅仅是四张,那是不可能的。
更有可能的是,我们会得到这样的东西:苹果和橙子是半随机放置并混合在一起的。我们不能画 600,000 维的图画,所以这张图只用两个维度来证明这一点:我们应该期望苹果和橙子是半随机放置并混合在一起的。


