引言

当你打开Netflix、抖音或淘宝时,那些精准推送的内容背后,是一套优雅的数学体系在默默运转。推荐系统是机器学习最成功的应用之一,而其核心——矩阵分解与协同过滤——蕴含着深刻的线性代数与最优化理论。本文将抛开工程实现,聚焦于数学原理本身,带你领略推荐算法背后的数学之美。

1. 问题的数学建模

推荐系统的核心问题是:给定一个用户-物品评分矩阵,预测那些尚未评分的矩阵元素。设用户集合 \(U = \{u_1, u_2, \ldots, u_m\}\),物品集合 \(I = \{i_1, i_2, \ldots, i_n\}\),我们得到一个 \(m \times n\) 的评分矩阵 \(R\)。

矩阵 \(R\) 是极度稀疏的——大多数用户只对极少数物品评过分。我们的目标是学习一个预测函数 \(\hat{r}_{ui}\),使得:

\[\hat{r}_{ui} pprox r_{ui}, \quad orall (u,i) \in ext{已观测条目}\]

这就是一个经典的矩阵补全(Matrix Completion)问题。

2. 协同过滤的直觉与数学本质

2.1 用户协同过滤

"与你品味相似的人喜欢的东西,你很可能也喜欢。"用户协同过滤的核心是计算用户之间的相似度。最常用的余弦相似度公式:

\[ ext{sim}(u, v) = rac{\sum_{i \in I_{uv}} r_{ui} \cdot r_{vi}}{\sqrt{\sum_{i \in I_{uv}} r_{ui}^2} \cdot \sqrt{\sum_{i \in I_{uv}} r_{vi}^2}}\]

其中 \(I_{uv}\) 是两个用户共同评分的物品集合。预测评分则通过相似用户的加权平均得到:

\[\hat{r}_{ui} = ar{r}_u + rac{\sum_{v \in N(u)} ext{sim}(u,v) \cdot (r_{vi} - ar{r}_v)}{\sum_{v \in N(u)} | ext{sim}(u,v)|}\]

2.2 物品协同过滤

反过来,若两个物品被同一群人相似地评分,则它们本质上"相似"。这在用户数远大于物品数时更加稳定,Amazon早期系统即基于此原理。

3. 矩阵分解:从高维到低维的优雅降维

协同过滤虽直观,但面临数据稀疏和冷启动的严峻挑战。矩阵分解提供了更优雅的数学框架。

3.1 核心假设

假设每个用户和每个物品都可以用一个 \(k\) 维的隐向量(latent factor)来描述。用户的偏好是一个向量,物品的特征也是一个向量,「用户是否喜欢该物品」由两者的内积决定:

\[\hat{r}_{ui} = \mathbf{p}_u^T \mathbf{q}_i = \sum_{f=1}^{k} p_{uf} \cdot q_{if}\]

其中 \(\mathbf{p}_u \in \mathbb{R}^k\) 是用户的隐因子向量,\(\mathbf{q}_i \in \mathbb{R}^k\) 是物品的隐因子向量,\(k \ll \min(m,n)\)。

3.2 矩阵形式

将所有用户的隐向量组成矩阵 \(P \in \mathbb{R}^{m imes k}\),所有物品的隐向量组成矩阵 \(Q \in \mathbb{R}^{n imes k}\),则整个评分矩阵的预测为:

\[\hat{R} = P \cdot Q^T\]

这就是矩阵分解名称的由来:将一个庞大的 \(m imes n\) 矩阵近似分解为两个小矩阵的乘积。

3.3 为什么低维近似有效?

数学上,评分矩阵的内在维度远小于其外显维度。用户的偏好主要由少数几个因素驱动(如电影的类型、年代、导演风格等),物品的属性也可以在这套隐语义空间中刻画。这正是奇异值分解(SVD)理论保证的——Eckart-Young定理告诉我们,秩为 \(k\) 的最佳逼近由前 \(k\) 个奇异值和对应奇异向量给出。

4. 最优化:如何学习隐向量

4.1 损失函数

定义目标函数为已观测评分的均方误差,加上正则化项防止过拟合:

\[\mathcal{L} = \sum_{(u,i) \in \mathcal{K}} (r_{ui} - \mathbf{p}_u^T \mathbf{q}_i)^2 + \lambda (\|\mathbf{p}_u\|^2 + \|\mathbf{q}_i\|^2)\]

其中 \(\mathcal{K}\) 是已观测评分的集合,\(\lambda\) 是正则化系数。这种L2正则化也被称为Tikhonov正则化或岭回归。

4.2 随机梯度下降(SGD)

Simon Funk在2006年Netflix竞赛中提出的SGD方法简洁而高效。对每一条观测评分 \((u,i,r_{ui})\),计算误差:

\[e_{ui} = r_{ui} - \mathbf{p}_u^T \mathbf{q}_i\]

然后按梯度方向更新参数:

\[\mathbf{p}_u \leftarrow \mathbf{p}_u + \gamma \cdot (e_{ui} \cdot \mathbf{q}_i - \lambda \cdot \mathbf{p}_u)\] \[\mathbf{q}_i \leftarrow \mathbf{q}_i + \gamma \cdot (e_{ui} \cdot \mathbf{p}_u - \lambda \cdot \mathbf{q}_i)\]

其中 \(\gamma\) 是学习率。这个更新规则极其简单,却能收敛到很好的局部最优解。

4.3 ALS(交替最小二乘)

当数据有隐式反馈行为(如点击、浏览而非显式评分)时,ALS方法更加高效。其核心思想是交替固定一个矩阵,优化另一个,每次子问题都是ridge regression,有闭式解:

\[\mathbf{p}_u = (Q^T Q + \lambda I)^{-1} Q^T \mathbf{r}_u\]

ALS天然适合并行计算,是Spark MLlib中推荐算法的默认实现。

5. 从数学到实践:关键的工程洞察

5.1 Bias的作用

纯内积假设忽略了系统性的偏差。某些用户天生评分偏高,某些物品天生受欢迎。加入偏差项后模型变为:

\[\hat{r}_{ui} = \mu + b_u + b_i + \mathbf{p}_u^T \mathbf{q}_i\]

其中 \(\mu\) 是全局平均分,\(b_u\) 是用户偏差,\(b_i\) 是物品偏差。这个简单的修改在实际效果上提升巨大。

5.2 SVD++:融合隐式反馈

即使用户没有对某物品评分,他的浏览记录、点击行为也包含信息。SVD++在用户表示中融合了隐式反馈:

\[\hat{r}_{ui} = \mu + b_u + b_i + \mathbf{q}_i^T \left( \mathbf{p}_u + rac{1}{\sqrt{|N(u)|}} \sum_{j \in N(u)} \mathbf{y}_j ight)\]

其中 \(N(u)\) 是用户有过隐式行为的物品集合,\(\mathbf{y}_j\) 是物品的隐式反馈向量。这个模型在Netflix竞赛中取得显著提升。

6. 更广阔的数学视角

推荐系统的数学内涵远不止于此。图神经网络将用户-物品交互建模为二部图,用谱图理论分析信息传播;流形学习假设用户偏好嵌入在某个低维流形上;贝叶斯个性化排序(BPR)则从概率角度重新定义了优化目标。

从矩阵分解到深度学习推荐,变的是模型复杂度,不变的是核心数学思想:通过低秩结构和高维空间的几何性质,从稀疏数据中恢复完整的偏好模式。这既是线性代数的优雅应用,也是机器学习哲学的生动体现。

7. 总结

推荐系统的数学之旅,是一场从高维稀疏矩阵到低维稠密空间的优雅映射。矩阵分解让我们看到了线性代数中秩和奇异值的实际意义,最优化理论赋予我们从噪声数据中提取信号的方法论,而偏差-方差权衡则提醒我们:模型的复杂度和泛化能力之间需要精密的平衡。

下一次当你看到一条精准的推荐时,不妨想想那背后隐向量在高维空间中静静点积的数学之美。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
网站二维码

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部