矩阵因式分解

矩阵分解是一种简单的嵌入模型。由于存在 反馈矩阵 A Rm×n,其中 m 为 即用户(或查询)的数量, n 是指商品的数量, 模型会学习:

  • 用户嵌入矩阵 URm×d, 其中,第 i 行是用户 i 的嵌入。
  • 项嵌入矩阵 VRn×d, 其中,行 j 是项 j 的嵌入。

使用重复电影示例的矩阵因式分解图示。

我们学习嵌入,使积 UVT 为 获得良好的近似反馈矩阵。请注意, (i,j) 的条目 U.VT 就是点积 Ui,Vj 用户嵌入的比例 i 和项 j,您希望它们接近于 Ai,j

选择目标函数

平方距离是一种直观的目标函数。为此, 最大限度地降低所有观测到的条目对的平方误差总和:

minURm×d, VRn×d(i,j)obs(AijUi,Vj)2.

在此目标函数中,您只需对观测到的对 (i, j) 求和, 即针对反馈矩阵中的非零值。不过,仅求和 对 1 的值进行求解并非好主意 - 所有变量的矩阵 使损失最小,并生成无法提供有效建议的模型 并且概括性很差。

三个矩阵的图示:仅观察到的矩阵分解、加权分解和奇异值分解。

也许您可以将未观测到的值视为 0,然后对所有 矩阵中的条目。这相当于最大限度地降低 平方 Frobenius A 与其近似值之间的距离: UVT

minURm×d, VRn×dAUVTF2.

您可以通过 矩阵的奇异值分解 (SVD)。不过, SVD 也不是一个很好的解决方案,因为在实际应用中, 矩阵 A 可能非常稀疏。例如,考虑一下 在 YouTube 上的视频观看次数与某个特定用户观看过的所有视频的对比情况。 解 UVT (对应于模型的近似值) 就可能接近于零,因此会导致 泛化性能。

相比之下,加权矩阵分解则将目标分解为 转换为以下两个总和:

  • 对观察到的条目进行求和。
  • 与未观察到的条目(被视为零)的总和。

minURm×d, VRn×d(i,j)obs(AijUi,Vj)2+w0(i,j)obs(Ui,Vj)2.

在这里, w0 是一个超参数,用于对这两个项进行加权 以确保目标不受这两种因素的支配。 调整此超参数非常重要。

(i,j)obswi,j(Ai,jUi,Vj)2+w0i,jobsUi,Vj2

其中, wi,j 是查询 i 和商品 j 的频率的函数。

最小化目标函数

用于最小化目标函数的常见算法包括:

  • 随机梯度下降法 (SGD) 是一种最小化损失函数的通用方法。

  • 加权交替最小二乘 (WALS) 专门用于 特定目标。

目标矩阵 U 和 V 是二次的。(请注意, 不过,该问题并非共同凸出。)WALS 通过初始化 随机生成嵌入,然后在以下两者之间交替进行:

  • 修正 U 和解决 V问题。
  • 修正 V 和解决 U问题。

每个阶段都可以精确解决(通过线性系统的解),并且 分发。这种方法必定会收敛,因为每个步骤 一定会降低损失。

SGD 与 WALS

SGD 和 WALS 各有利弊。 请查看以下信息,了解它们的对比情况:

SGD

非常灵活,可以使用其他损失函数 函数。

可以并行处理。

更慢 - 收敛速度快。

较难处理未观察到的条目(需要 使用负采样或重力)。

WALS

仅依赖损失平方。

可以并行处理。

收敛比 SGD 更快。

更轻松地处理未观察到的条目。