Embeddings

假设您正在开发一款餐点推荐应用,用户输入自己喜欢的餐点,应用会建议他们可能喜欢的类似餐点。您想开发一个可以预测食物相似度的机器学习 (ML) 模型,以便您的应用可以提供高质量的推荐(“因为您喜欢煎饼,所以我们推荐可丽饼”)。

为了训练模型,您需要整理一个包含 5,000 种热门餐点的数据集,包括罗宋汤热狗沙拉披萨沙瓦玛

图 1. 一组五种食品的插图。从左上角开始顺时针方向依次为:罗宋汤、热狗、沙拉、披萨、沙瓦玛。
图 1. 食品数据集中包含的餐点示例。

您可以创建一个 meal 特征,其中包含数据集中每种餐点的独热编码表示法。编码是指选择数据的初始数值表示法以训练模型的过程。

图 2. 顶部:罗宋汤的独热编码图表。
       向量 [1, 0, 0, 0, ..., 0] 显示在六个方框上方,每个方框从左到右对齐一个向量数字。方框从左到右包含以下图片:罗宋汤、热狗、沙拉、披萨、[空]、沙瓦玛。中间:热狗的独热编码图表。
       向量 [0, 1, 0, 0, ..., 0] 显示在六个方框上方,每个方框从左到右对齐一个向量数字。这些方框中显示的图片从左到右与上面的罗宋汤图表相同。底部:沙威玛的独热编码图表。向量 [0, 0, 0, 0, ..., 1] 显示在六个方框上方,每个方框从左到右对齐一个向量数字。这些方框中显示的图片从左到右与上面的罗宋汤和热狗图表相同。
图 2. 罗宋汤、热狗和沙瓦玛的独热编码。 每个独热编码向量的长度为 5,000(数据集中的每个餐点都有一个条目)。图中的省略号表示未显示的 4,995 个条目。

稀疏数据表示法的陷阱

查看这些独热编码时,您会发现这种数据表示法存在一些问题。

  • 权重数量。较大的输入向量意味着神经网络需要大量的权重。在独热编码中,如果有 M 个条目,并且在网络输入层后的第一层中有 N 个节点,那么模型必须为该层训练 MxN 个权重。
  • 数据点数。模型中的权重越多,高效训练所需的数据就越多。
  • 计算量。权重越多,训练和使用模型所需的计算就越多。这很容易就会超出硬件的能力范围。
  • 内存占用量。模型中的权重越多,用于训练和应用模型的加速器就需要越多的内存。要高效地扩大规模非常困难。
  • 难以支持设备端机器学习 (ODML)如果您希望在本地设备上运行机器学习模型(而不是在云端提供模型),则需要专注于缩小模型,并希望减少权重数量。

在本模块中,您将学习如何创建嵌入(稀疏数据的低维表示),以解决这些问题。