深度神经网络模型

上一部分介绍了如何使用矩阵分解来学习嵌入。矩阵分解的一些限制包括:

  • 使用侧边特征(即,超出查询 ID/项 ID 的任何特征)的难度。因此,只有使用训练集中存在的用户或内容才能查询该模型。
  • 建议的相关性。正如您在第一个 Colab 中看到的那样,我们倾向于向所有人推荐热门商品,尤其是在使用点积作为相似度指标时。最好捕获特定用户的兴趣。

深度神经网络 (DNN) 模型可以解决矩阵分解的这些限制。DNN 可以轻松整合查询特征和特征(由于网络的输入层非常灵活),这有助于捕获用户的特定兴趣并提高建议的相关性。

用于建议的 Softmax DNN

一种可能的 DNN 模型是 softmax,它会将此问题视为多类别预测问题,其中:

  • 输入的是用户查询。
  • 输出是一个概率向量,大小等于语料库中的内容数,表示与每一项进行交互的概率;例如,点击或观看 YouTube 视频的概率。

输入

DNN 的输入可能包括:

  • 密集功能(例如,自上次观看以来的观看时长)
  • 稀疏特征(例如,观看记录和国家/地区)

与矩阵分解方法不同,您可以添加副特征,例如年龄或国家/地区。我们将用 x 表示输入矢量。

图片突出显示 Softmax 深度神经网络中的输入层
图 1. 输入层 x。

模型架构

模型架构决定了模型的复杂性和表现力。通过添加隐藏层和非线性激活函数(例如 ReLU),模型可以捕获数据中更复杂的关系。但是,增加参数数量通常也会使模型更难训练,费用也会更高。我们将使用 \(\psi (x) \in \mathbb R^d\)表示上一个隐藏层的输出。

突出显示 Softmax 深度神经网络中隐藏层的图片
图 2. 隐藏层的输出, \(\psi (x)\)。

Softmax 输出:预测概率分布

该模型通过 softmax 层将最后一层的输出 \(\psi (x)\)映射到概率分布 \(\hat p = h(\psi(x) V^T)\),其中:

  • \(h : \mathbb R^n \to \mathbb R^n\) 是 softmax 函数,由以下函数给出: \(h(y)_i=\frac{e^{y_i}}{\sum_j e^{y_j}}\)
  • \(V \in \mathbb R^{n \times d}\) 是 softmax 层的权重矩阵。

Softmax 层会将得分向量 \(y \in \mathbb R^n\)(有时称为对数)映射到概率分布。

显示 Softmax 深度神经网络中的预测概率分布的图片
图 3. 预测的概率分布: \(\hat p = h(\psi(x) V^T)\)。

损失函数

最后,定义损失函数来比较以下内容:

  • \(\hat p\),Softmax 层的输出(概率分布)
  • \(p\),表示与用户互动过的实际项目(例如,用户点击或观看过的 YouTube 视频)。这可以表示为归一化的多重热分布(概率向量)。

例如,在比较两个概率分布时,您可以使用交叉熵损失。

显示 Softmax 深度神经网络中的损失函数的图片
图 4. 损失函数。

Softmax 嵌入

项的概率 \(j\) 由\(\hat p_j = \frac{\exp(\langle \psi(x), V_j\rangle)}{Z}\)给出,其中 \(Z\) 是一个不依赖于 \(j\)的归一化常量。

换言之, \(\log(\hat p_j) = \langle \psi(x), V_j\rangle - log(Z)\)因此,项的对数 \(j\) 数为(乘积常量)两个 \(d\)维向量的点积,可视为查询和项嵌入:

  • \(\psi(x) \in \mathbb R^d\) 是最后一个隐藏层的输出。我们称之为查询的嵌入 \(x\)。
  • \(V_j \in \mathbb R^d\) 是连接最后一个隐藏层与输出 j 的权重向量。我们将其称为项的嵌入 \(j\)。
显示 Softmax 深度神经网络中的嵌入的图片
图 5. 嵌入作品 \(j\)、 \(V_j \in \mathbb R^d\)

DNN 和矩阵分解

在 softmax 模型和矩阵分解模型中,系统均\(V_j\) 会为每个项学习一个嵌入向量 \(j\)。我们在矩阵分解中称为项嵌入矩阵 \(V \in \mathbb R^{n \times d}\) ,现在是 Softmax 层的权重矩阵。

但查询嵌入不同。系统会学习从查询特征 \(x\) 到嵌入 \(\psi(x) \in \mathbb R^d\)的映射,而不是 \(U_i\) 为每个查询学习一个嵌入 \(i\)。因此,您可以将此 DNN 模型视为对矩阵分解的泛化,其中您将查询端替换为非线性函数 \(\psi(\cdot)\)。

您能使用商品功能吗?

您能在产品方面应用同样的理念吗?也就是说,模型能否学习将项特征映射到嵌入的非线性函数,而不是学习每一项的嵌入?是。为此,请使用由两个神经网络组成的双塔神经网络:

  • 一个神经网络将查询特征\(x_{\text{query}}\) 映射到查询嵌入\(\psi(x_{\text{query}}) \in \mathbb R^d\)
  • 一个神经网络将项特征\(x_{\text{item}}\) 映射到项嵌入\(\phi(x_{\text{item}}) \in \mathbb R^d\)

模型的输出可以定义为\(\langle \psi(x_{\text{query}}), \phi(x_{\text{item}}) \rangle\)的点积。请注意,它不再是 softmax 模型。新模型会为每个配对预测一个值 \((x_{\text{query}}, x_{\text{item}})\),而不是每个查询的概率向量 \(x_{\text{query}}\)。