嵌入通过将高维稀疏数据转换为低维密集表示来减少内存使用。例如,在自然语言处理(NLP)中,单词通常表示为独热编码向量,其中每个单词对应于大型词汇表大小数组中的唯一位置(例如,10,000 维度)。存储这些稀疏向量需要大量内存,因为每个向量大部分都是零。嵌入层将这些高维向量映射到一个更小、固定大小的空间(例如,300 维度),其中每个维度都捕获单词的习得特征。这能将内存消耗减少几个数量级——无需为每个单词存储 10,000 个浮点数,您只需存储 300 个,将内存使用减少 30 倍以上。
嵌入还可以通过捕获语义关系来更有效地压缩信息。例如,在推荐系统中,用户和物品 ID 最初可能表示为独热编码 ID。一个拥有 100 万用户和 10 万物品的系统将需要每次交互一个 110 万维的向量,这是不切实际的。使用 50 维的嵌入将其减少到每个用户和物品 50 个值。此外,嵌入将相似的实体(例如,偏好相似的用户)在向量空间中分组得更近,从而允许模型以更少的参数更好地泛化。这消除了单独特征的冗余存储,并利用了共享模式,进一步优化了内存。
在实践中,嵌入被实现为查找表(矩阵),其中每一行对应一个实体(例如,一个单词或用户)。对于一个拥有 10,000 个单词词汇表和 300 维嵌入的模型,嵌入矩阵是 10,000 × 300,这远远小于 10,000 × 10,000 的独热矩阵。在训练期间,这些嵌入会更新以最小化损失,从而优化它们的信息密度。这种方法具有很好的可扩展性:词汇量翻倍,每个单词只增加 300 个新参数,而不是 10,000 个。通过专注于密集、习得的表示,嵌入在保留分类或聚类等任务的关键信息的同时,大幅削减了内存。