假设您正在开发一款食物推荐应用,其中 用户输入他们喜爱的餐点,应用就会推荐类似的餐点 来展示自己喜欢的内容您想要开发机器学习 (ML) 模型 预测食物相似性,让您的应用 推荐(“由于您喜欢薄煎饼,因此我们推荐可丽饼”)。
为了训练模型,您精心挑选了一个数据集,其中包含 5,000 个热门 餐食,包括罗宋汤, 热狗、 salad、 披萨、 和沙威玛。
![图 1. 这套插图包含五种食物。顺时针从
左上方:罗宋汤、热狗、沙拉、披萨、沙威玛。](https://developers.google.cn/static/machine-learning/crash-course/embeddings/images/food_images.png?authuser=3&hl=sl)
您要创建一个 meal
地图项,其中包含
独热编码
每个膳食项目的表示法。
![图 2. 上图:罗宋汤的独热编码的可视化。
矢量 [1, 0, 0, 0, ..., 0] 显示在六个方框上方,
每个都与左对齐
与其中一个矢量数对应。方框(从左到右)
包含以下图片:罗宋汤、热狗、沙拉、披萨、[空]、
沙威玛。中间图:热狗的独热编码的可视化。
矢量 [0, 1, 0, 0, ..., 0] 显示在六个方框的上方,每个
从左到右对齐。这些盒子有
从左到右的图片与罗宋图上的图片相同
。下图:沙威玛的独热编码的可视化效果。通过
矢量 [0, 0, 0, 0, ..., 1] 显示在六个方框上方,每个方框对齐
从左到右绘制一个矢量数字。这些盒子有
从左到右的图片与罗宋汤和热狗的图片相同
和可视化。](https://developers.google.cn/static/machine-learning/crash-course/embeddings/images/food_images_one_hot_encodings.png?authuser=3&hl=sl)
稀疏数据表示法的误区
查看这些独热编码时,您会注意到 数据的表示形式。
- 权重数量。输入矢量大意味着有大量
权重
用于神经网络。
在独热编码中使用 M 个条目,
节点,则模型必须训练
该层的 MxN 权重。权重过大会引发进一步的问题:
- 数据点数量。模型中的权重越多,您获得的数据就越多, 进行有效训练。
- 计算量。权重越多,所需的计算就越多 来训练和使用模型。您很容易就会超出 硬件。
- 内存量。模型中的权重越多, 训练和处理它的加速器上都需要有负载。扩大规模 是非常困难的
- 难以提供支持 设备端机器学习 (ODML)。 如果您希望在本地设备上运行机器学习模型(而不是 您需要专注于缩小模型,并且需要 以减少权重的数量。
- 向量之间缺少有意义的关系。输入的 对于食物的独热编码并没有提供任何有关 食品的相似度。从数学角度来说,索引 1(“热狗”)是指 比索引 2(“沙拉”)更接近索引 4999(“沙威玛”), 狗狗比沙拉更类似于沙威玛(均含肉和面包)。
在本单元中,您将学习如何创建低维嵌入 可以解决这两个问题。