假设您正在开发一款餐点推荐应用,用户输入自己喜欢的餐点,应用会建议他们可能喜欢的类似餐点。您想开发一个可以预测食物相似度的机器学习 (ML) 模型,以便您的应用可以提供高质量的推荐(“因为您喜欢煎饼,所以我们推荐可丽饼”)。
为了训练模型,您需要整理一个包含 5,000 种热门餐点的数据集,包括罗宋汤、热狗、沙拉、披萨和沙瓦玛。
您可以创建一个 meal 特征,其中包含数据集中每种餐点的独热编码表示法。编码是指选择数据的初始数值表示法以训练模型的过程。
稀疏数据表示法的陷阱
查看这些独热编码时,您会发现这种数据表示法存在一些问题。
- 权重数量。较大的输入向量意味着神经网络需要大量的权重。在独热编码中,如果有 M 个条目,并且在网络输入层后的第一层中有 N 个节点,那么模型必须为该层训练 MxN 个权重。
- 数据点数。模型中的权重越多,高效训练所需的数据就越多。
- 计算量。权重越多,训练和使用模型所需的计算就越多。这很容易就会超出硬件的能力范围。
- 内存占用量。模型中的权重越多,用于训练和应用模型的加速器就需要越多的内存。要高效地扩大规模非常困难。
- 难以支持设备端机器学习 (ODML)。如果您希望在本地设备上运行机器学习模型(而不是在云端提供模型),则需要专注于缩小模型,并希望减少权重数量。
在本模块中,您将学习如何创建嵌入(稀疏数据的低维表示),以解决这些问题。