Softmax 训练

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

训练数据

Softmax 训练数据包括查询特征 \(x\) 以及用户与之互动的项的向量(表示为概率分布 \(p\))。在下图中,这些项标记为蓝色。模型的变量是不同层的权重。在下图中,这些项标记为橙色。该模型通常使用随机梯度下降法的任何变体进行训练。

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

负采样

由于损失函数会比较两个概率向量\(p, \hat p(x) \in \mathbb R^n\) (分别为真实值和模型的输出),因此如果语料库规模太大,计算损失梯度(针对单个查询 \(x\))的成本可能会过高。

您可以将系统设置为仅针对正项(在标准答案向量中处于活动状态的项)计算梯度。但是,如果系统仅使用正对进行训练,则模型可能会遭受折叠问题,如下所述。

折叠
平面被折叠成两半的平面图片,显示了 3 个不同的正方形方块,分别代表不同的查询和多个圆形,分别代表多个查询和多个圆形。每个组都有不同的颜色,而且查询只会与同一组中的内容进行交互。 在下图中,假设每种颜色代表一种不同的查询和内容类别。每个查询(表示为方形)通常只会与相同颜色的内容(表示为圆形)互动。例如,假设 YouTube 中的每个类别都是不同的语言。 一般用户通常会与使用某一种语言的视频进行互动。

模型可能会学习如何指定给定颜色的查询/项嵌入之间的相对位置(正确捕获该颜色中的相似度),但来自不同颜色的嵌入可能会偶然出现在嵌入空间的同一区域中。这种现象(称为折叠)会导致虚假建议:在查询时,模型可能会错误地预测其他组中项的高分。

反例是指与给定查询标记为“无关”的内容。在训练期间显示模型负例会教导模型,不同组的嵌入应该彼此远离。

您可以使用负采样来代替使用所有项计算梯度(可能成本太高)或仅使用正项(使模型容易折叠)。更确切地说,您使用以下各项计算近似梯度:

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

对否定关键字抽样有不同的策略:

  • 您可以均匀采样。
  • 您可以为得分更高的 j 项提供更高的概率 \(\psi(x) . V_j\)。直观地说,这些是对梯度影响最大的示例;这些示例通常称为硬负例。

关于矩阵分解与 Softmax

DNN 模型解决了矩阵分解的许多限制,但训练和查询费用通常较高。下表总结了这两种模型之间的一些重要差异。

矩阵因式分解 Softmax DNN
查询功能 不容易添加。 可包含。
冷启动 不容易处理词汇发起的查询或内容。可以使用一些启发法(例如,对于新查询,相似查询的平均嵌入)。 轻松处理新查询。
折叠 通过调整 WALS 中未观测到的权重,可以轻松降低折叠率。 容易折叠。需要使用负采样或重力等技术。
训练可伸缩性 可轻松扩容到超大型语料库(可能是数亿个或更多项),但前提是输入矩阵稀疏。 更难扩缩到非常大的语料库。可以使用一些技术,例如哈希处理、负采样等。
服务可伸缩性 嵌入 U、V 是静态的,可以预先计算和存储一组候选字词。 项嵌入 V 是静态的,可以存储。

查询嵌入通常需要在查询时计算,使得模型的服务成本较高。

步骤简述:

  • 通常,对于大型分类,矩阵分解是更好的选择。更容易扩缩、查询费用更低且不容易折叠。
  • DNN 模型可以更好地捕获个性化偏好,但更难训练,并且查询成本更高。DNN 模型优于矩阵分解进行评分,因为 DNN 模型可以使用更多特征来更好地捕获相关性。此外,DNN 模型通常也可以折叠,因为您主要关心的是假定一组相关的预过滤候选排名。