Softmax 训练

上一页面介绍了如何将 softmax 层整合到深度层中, 用于推荐系统的神经网络。本页面详细介绍了 训练数据。

训练数据

softmax 训练数据由查询特征 \(x\) 和 用户互动过的项目的矢量(表示为 概率分布 \(p\))。这些标记在 如下图所示。模型的变量是 不同的层。它们在以下规则中标记为橙色 小图标。模型通常使用 随机梯度下降法。

突出显示 softmax 深度神经网络训练的图片

负采样

由于损失函数会比较两个概率向量, \(p, \hat p(x) \in \mathbb R^n\) (标准答案和 分别计算模型的输出), 损失梯度(针对单个查询 \(x\))可以 如果语料库规模过大, \(n\) 则开销会非常大。

您可以将系统设置为仅计算正项的梯度 (标准答案矢量中活跃项)。但是,如果 因此模型可能会出现折叠问题, 如下所述。

折叠
对半折叠平面的图片,其中显示了 3 组不同的方形(代表查询内容)和圆圈(代表内容)。每个组都有不同的颜色,并且查询只会与同一组中的项互动。 在下图中,假设每种颜色代表不同的 查询和项类别。每个查询(以方形表示) 多数情况下会与相应颜色的列表项(以圆形表示)交互。 例如,将每个类别视为 YouTube 中的不同语言。 一般用户大多会与使用某一特定语言的视频进行互动。

模型可能会学习如何放置给定的查询/项嵌入, (正确捕捉其中的相似性) 不同颜色的嵌入,但不同颜色的嵌入最终可能会位于同一区域 嵌入空间的概率。这种现象 因为折叠,可能会导致不可靠的推荐:在查询时, 模型可能会错误地预测出某个项目的高分: 另一个群组。

反面示例是指带有“无关”标签的商品。 在训练期间展示模型的负例,可以告诉模型 不同群体的嵌入应该彼此拉开。

与其使用所有项来计算梯度( 或者只使用正项(这会使模型容易出现 折叠),则可以使用负采样。更确切地说,您需要计算 近似梯度,其中包含以下项:

  • 所有肯定项(在目标标签中显示的项)
  • 否定项示例(\(j\) 类别: \({1, …, n}\))

负例抽样有不同的策略:

  • 您可以统一采样。
  • 您可以为第 j 个项的概率更高, 得分 \(\psi(x) . V_j\)。直观地说,这些只是 对梯度影响最大的项);这些示例通常是 称为硬负例。
。 <ph type="x-smartling-placeholder">

关于矩阵分解与 softmax

DNN 模型解决了矩阵分解的许多限制, 训练和查询开销会变高。下表总结了 两个模型之间的重要区别。

矩阵分解 Softmax DNN
查询功能 添加起来不容易。 可包含在内。
冷启动 不易应对词汇量不足 查询或项。您可以使用一些启发词语(例如, 新查询、类似查询的平均嵌入次数)。 轻松处理新查询。
折叠 可轻松缩减折叠边 调整 WALS 中未观察到的权重。 容易折叠。需要使用 例如负采样或重力。
训练可伸缩性 可轻松扩容到超大型 语料库(可能是数亿个或更多项),但前提是 输出矩阵很稀疏。 较难扩展为非常大 语料库。可以使用一些技术,例如哈希 负采样等
提供可伸缩性 嵌入 U、V 是静态的, 并且可以预先计算和存储一组候选字词。 项嵌入 V 是静态的 并且可以存储

查询嵌入通常 需要在查询时计算,使得模型的开销 投放。

总结:

  • 对于大型语料库,矩阵分解通常是更好的选择。 更易于扩缩、查询费用更低,并且不易折叠。
  • DNN 模型可以更好地捕获个性化偏好, 训练难度更高,查询费用也更高。最好使用 DNN 模型 因为 DNN 模型可以使用 更多功能,更好地把握相关性。此外, DNN 模型可折叠,因为您最关心的是 对一组预先过滤出的候选词进行排名。