Embeddings

假设您正在开发一款食物推荐应用,其中 用户输入他们喜爱的餐点,应用就会推荐类似的餐点 来展示自己喜欢的内容您想要开发机器学习 (ML) 模型 预测食物相似性,让您的应用 推荐(“由于您喜欢薄煎饼,因此我们推荐可丽饼”)。

为了训练模型,您精心挑选了一个数据集,其中包含 5,000 个热门 餐食,包括罗宋汤热狗salad披萨、 和沙威玛

图 1. 这套插图包含五种食物。顺时针从
       左上方:罗宋汤、热狗、沙拉、披萨、沙威玛。
图 1. 食物数据集中包含的膳食项采样。

您要创建一个 meal 地图项,其中包含 独热编码 每个膳食项目的表示法。

图 2. 上图:罗宋汤的独热编码的可视化。
       矢量 [1, 0, 0, 0, ..., 0] 显示在六个方框上方,
       每个都与左对齐
       与其中一个矢量数对应。方框(从左到右)
       包含以下图片:罗宋汤、热狗、沙拉、披萨、[空]、
       沙威玛。中间图:热狗的独热编码的可视化。
       矢量 [0, 1, 0, 0, ..., 0] 显示在六个方框的上方,每个
       从左到右对齐。这些盒子有
       从左到右的图片与罗宋图上的图片相同
       。下图:沙威玛的独热编码的可视化效果。通过
       矢量 [0, 0, 0, 0, ..., 1] 显示在六个方框上方,每个方框对齐
       从左到右绘制一个矢量数字。这些盒子有
       从左到右的图片与罗宋汤和热狗的图片相同
       和可视化。
图 2. 罗宋汤、热狗和沙威玛的独热编码。 每个独热编码向量的长度为 5,000(每个向量一个条目) 菜单项)。图中的省略号表示 这 4995 个条目未显示。

稀疏数据表示法的误区

查看这些独热编码时,您会注意到 数据的表示形式。

  • 权重数量。输入矢量大意味着有大量 权重 用于神经网络。 在独热编码中使用 M 个条目, 节点,则模型必须训练 该层的 MxN 权重。权重过大会引发进一步的问题:
    • 数据点数量。模型中的权重越多,您获得的数据就越多, 进行有效训练。
    • 计算量。权重越多,所需的计算就越多 来训练和使用模型。您很容易就会超出 硬件。
    • 内存量。模型中的权重越多, 训练和处理它的加速器上都需要有负载。扩大规模 是非常困难的
    • 难以提供支持 设备端机器学习 (ODML) 如果您希望在本地设备上运行机器学习模型(而不是 您需要专注于缩小模型,并且需要 以减少权重的数量。
  • 向量之间缺少有意义的关系。输入的 对于食物的独热编码并没有提供任何有关 食品的相似度。从数学角度来说,索引 1(“热狗”)是指 比索引 2(“沙拉”)更接近索引 4999(“沙威玛”), 狗狗比沙拉更类似于沙威玛(均含肉和面包)。

在本单元中,您将学习如何创建低维嵌入 可以解决这两个问题。