第4章 矩阵分解 (Matrix Factorization)
一、导读
4.1 本章学习目标
理解矩阵分解在推荐系统中的核心思想:通过低秩近似揭示用户和物品的潜在特征
掌握奇异值分解(SVD)的数学原理及其在推荐系统中的应用方式
深入理解 SVD++ 模型的设计思想和改进机制
掌握交替最小二乘法(ALS)的优化原理和实现方法
理解矩阵分解与协同过滤的关系:矩阵分解是协同过滤的模型化推广
了解概率矩阵分解(PMF)和贝叶斯矩阵分解的思想
掌握矩阵分解模型的正则化、偏差项处理和超参数调优方法
能够针对实际场景选择和实现合适的矩阵分解方案
4.2 为什么本章如此重要
矩阵分解(Matrix Factorization, MF)是推荐系统发展史上最重要的技术突破之一。2006 年 Netflix Prize 竞赛的启动,极大地推动了矩阵分解方法在推荐系统中的应用和发展。竞赛中表现最优的方案几乎都基于矩阵分解或其变体,这一事实充分证明了矩阵分解在推荐效果上的优越性。
矩阵分解的核心贡献在于将协同过滤从基于邻域的方法提升为基于模型的方法。传统的协同过滤(如 User-based CF 和 Item-based CF)直接使用用户-物品评分矩阵中的原始数据进行预测,而矩阵分解通过学习用户和物品的低维潜在特征表示来进行预测。这种模型化的方法具有更好的泛化能力,能够有效处理数据稀疏性问题。
从数学角度看,矩阵分解揭示了推荐问题的低秩结构。用户-物品评分矩阵虽然维度很高,但其内在的秩通常很低——这意味着用户和物品的偏好关系可以用少数几个潜在因子来解释。例如,在电影推荐中,这些潜在因子可能对应于"动作程度"、"艺术性"、"幽默感"等维度,尽管这些维度并非人为定义,而是由模型自动发现的。
矩阵分解还为后续的深度学习推荐模型奠定了理论基础。神经协同过滤(NCF)、两塔模型等深度学习方法在本质上仍然是在学习用户和物品的低维表示,只是使用了更强大的非线性函数来替代矩阵内积。因此,深入理解矩阵分解是掌握现代推荐模型的关键。
4.3 核心问题引导
矩阵分解如何将高维稀疏的评分矩阵转化为低维稠密的潜在特征表示?
SVD 在推荐系统中面临什么特殊挑战?如何改进传统 SVD 以适应推荐场景?
ALS 和 SGD 两种优化方法各有什么优缺点?
矩阵分解中的潜在因子维度如何选择?维度太高或太低分别会导致什么问题?
如何处理矩阵分解中的评分偏差(用户偏差、物品偏差、全局偏差)?
矩阵分解如何与侧信息(Side Information)结合?
矩阵分解在隐式反馈数据上的应用与显式反馈有何不同?
二、核心概念详解
概念一:矩阵分解的基本原理
矩阵分解的核心思想是将用户-物品评分矩阵 R(维度为 m×n,m 为用户数,n 为物品数)分解为两个低秩矩阵的乘积。具体地,R ≈ P × Q^T,其中 P 是 m×k 的用户特征矩阵,Q 是 n×k 的物品特征矩阵,k 是潜在因子的维度(k << min(m, n))。
每一行 P_u 表示用户 u 在 k 维潜在空间中的向量表示,每一行 Q_i 表示物品 i 在同一潜在空间中的向量表示。用户 u 对物品 i 的评分可以通过两个向量的内积来预测:r̂(u,i) = P_u · Q_i = Σ_{f=1}^{k} P_{uf} × Q_{if}。
这种低秩近似的直觉是:虽然用户-物品评分矩阵的维度很高,但用户的偏好实际上可以由少数几个潜在因子来解释。例如在电影推荐中,潜在因子可能对应"动作vs文艺"、"喜剧vs严肃"、"经典vs现代"等维度。每个用户在这些维度上有不同的偏好程度,每部电影在这些维度上有不同的特征值。
模型训练的目标是最小化预测评分与真实评分之间的误差。损失函数为:L = Σ_{(u,i)∈D} (r(u,i) - P_u · Q_i)² + λ(||P||²_F + ||Q||²_F),其中 D 是已知评分的集合,λ 是正则化系数,||·||_F 是 Frobenius 范数。正则化项用于防止过拟合。
概念二:SVD 与 SVD++ 模型
标准 SVD(Singular Value Decomposition)将矩阵分解为三个矩阵的乘积:R = U × Σ × V^T。然而,在推荐系统中,评分矩阵 R 通常是不完整的(存在大量缺失值),标准 SVD 无法直接应用。
Funk SVD(以 Simon Funk 命名,他在 Netflix Prize 中提出了这一方法)通过只在已知评分上计算损失来解决缺失值问题:L = Σ_{(u,i)∈D} (r(u,i) - P_u · Q_i)² + λ(||P_u||² + ||Q_i||²)。优化方法通常使用随机梯度下降(SGD),每次随机选择一个已知评分进行梯度更新。
SVD++ 是 Funk SVD 的重要扩展,由 Koren 在 2008 年提出。SVD++ 在用户潜在表示中引入了隐式反馈信息:P_u = b_u + μ + b_i + q_i^T × (p_u + |N(u)|^(-0.5) × Σ_{j∈N(u)} y_j),其中 μ 是全局平均评分,b_u 和 b_i 分别是用户和物品的偏差,N(u) 是用户 u 交互过的物品集合,y_j 是物品 j 的隐式反馈向量。
SVD++ 的核心创新在于:即使某些物品没有被用户显式评分,用户与这些物品的交互行为(如浏览、点击)仍然包含有价值的信息。通过引入隐式反馈项,SVD++ 能够更充分地利用数据中的信息,在 Netflix Prize 数据集上取得了显著提升。
概念三:交替最小二乘法(ALS)
交替最小二乘法(Alternating Least Squares, ALS)是矩阵分解的另一种重要优化方法,特别适用于大规模稀疏矩阵和隐式反馈场景。
ALS 的核心思想是:当固定用户矩阵 P 时,物品矩阵 Q 的优化问题变为标准的最小二乘问题,有解析解;反之亦然。因此,ALS 交替固定 P 优化 Q 和固定 Q 优化 P,直到收敛。
具体地,固定 P 时,对于每个物品 i,最优的 Q_i 可以通过求解线性方程组得到:Q_i = (P^T P + λI)^(-1) P^T r_i,其中 r_i 是物品 i 的评分向量。类似地,固定 Q 时,对于每个用户 u:P_u = (Q^T Q + λI)^(-1) Q^T r_u。
ALS 相比 SGD 有几个优势:第一,每次迭代有解析解,不需要调学习率。第二,P 和 Q 的优化可以分别并行化——所有用户的 P_u 更新相互独立,所有物品的 Q_i 更新也相互独立。第三,ALS 天然适合处理隐式反馈数据,可以通过修改损失函数中的置信度权重来实现。
ALS 的缺点是需要多轮迭代才能收敛,且每轮迭代需要扫描全部数据。在实践中,Spark MLlib 的推荐系统模块默认使用 ALS 算法。
概念四:偏差项与正则化
一个完善的矩阵分解模型需要考虑多种偏差项和正则化策略。
全局偏差 μ:所有评分的平均值。不同数据集的平均评分不同(如 IMDb 的平均评分约为 6.5/10),全局偏差捕获了这一基线水平。
用户偏差 b_u:某些用户倾向于给高分(宽松型评分者),某些用户倾向于给低分(严格型评分者)。用户偏差捕获了这种评分习惯的差异。
物品偏差 b_i:某些物品(如经典电影)普遍获得高评分,某些物品(如小众艺术片)普遍获得低评分。物品偏差捕获了物品本身的受欢迎程度。
完整的预测模型为:r̂(u,i) = μ + b_u + b_i + P_u · Q_i。偏差项的学习可以与 P、Q 的优化一起通过 SGD 或 ALS 完成。
正则化是防止过拟合的关键技术。L2 正则化(Ridge)在损失函数中加入参数的平方和:λ(||P||²_F + ||Q||²_F + b_u² + b_i²)。L1 正则化(Lasso)可以促进稀疏性,有助于特征选择。在实践中,L2 正则化更为常用。
概念五:矩阵分解的扩展方向
矩阵分解的基本框架可以沿多个方向进行扩展。
融合侧信息:将用户和物品的额外信息(如用户年龄、物品类别)融入矩阵分解。RegSVD 将侧信息作为特征融入潜在因子学习过程。Factorization Machines(FM)通过引入二阶特征交叉来扩展矩阵分解,能够利用任意实值特征向量。
时间感知模型:用户偏好和物品热度都会随时间变化。TimeSVD++ 在 SVD++ 的基础上引入时间参数,允许用户偏差、物品偏差和潜在因子随时间动态变化。
社交正则化:利用社交网络信息来约束矩阵分解。假设社交网络中相连的用户具有相似的潜在因子表示,在损失函数中加入社交正则化项:Σ_{(u,v)∈E} ||P_u - P_v||²。
非线性扩展:使用神经网络替代简单的内积来计算用户和物品的匹配得分。神经协同过滤(NCF)使用多层感知机(MLP)来学习用户和物品之间的非线性交互模式。
三、深入分析与讨论
深入分析一:潜在因子的可解释性
矩阵分解学到的潜在因子是否具有可解释性是一个引人深思的问题。与 LDA 主题模型不同,矩阵分解的潜在因子没有明确的语义标签,但它们确实捕获了数据中的某些结构。
在电影推荐的场景中,研究者发现矩阵分解学到的潜在因子往往与电影的某些隐含属性相关。例如,某个维度可能对应"好莱坞大片 vs 独立艺术片",另一个维度可能对应"新片 vs 经典老片"。然而,这些对应关系并非人为定义,而是模型从数据中自动发现的。
潜在因子的维度 k 是一个重要的超参数。k 太小会导致欠拟合,模型无法捕获足够的偏好信息。k 太大会导致过拟合,模型可能拟合噪声而非真实模式。通常通过交叉验证来选择最优的 k 值,经验范围一般在 20-200 之间。
值得注意的是,潜在因子的可解释性随着维度的增加而降低。低维度(如 k=5-10)的因子可能具有较清晰的语义对应,而高维度(如 k=100+)的因子则很难用人类可理解的概念来描述。
深入分析二:矩阵分解与深度学习的融合
矩阵分解与深度学习的融合是推荐系统领域的重要研究方向。这种融合不是简单的替代关系,而是互补关系。
神经协同过滤(NCF)是融合的代表性工作。NCF 保留了矩阵分解中用户和物品嵌入(Embedding)的思想,但用神经网络替代了简单的内积操作。NCF 包含两个分支:GMF(Generalized Matrix Factorization)分支使用逐元素乘积代替内积,允许不同维度的权重不同;MLP(Multi-Layer Perceptron)分支将用户和物品嵌入拼接后通过多层全连接网络学习非线性交互模式。
两塔模型(Two-tower Model)是工业界广泛使用的架构。用户塔和物品塔分别使用深度网络将用户特征和物品特征映射为低维向量,然后通过内积或注意力机制计算匹配得分。这种架构本质上是将矩阵分解的查表操作推广为函数映射操作,能够处理未见过的用户和物品。
深入分析三:矩阵分解在隐式反馈上的应用
隐式反馈数据(点击、浏览、购买等)相比显式反馈数据(评分)具有数据量大但信息量低的特点。矩阵分解在隐式反馈上的应用需要特殊处理。
核心挑战在于:隐式反馈中缺乏负样本。用户没有点击某个物品不代表不喜欢,可能只是没看到。因此,不能简单地将未观测到的交互视为负样本。
加权正则化矩阵分解(WRMF)是处理隐式反馈的经典方法。它将损失函数修改为加权形式:L = Σ_{u,i} c_{ui} × (x_{ui} - P_u · Q_i)² + λ(||P||²_F + ||Q||²_F),其中 x_{ui} 是二值观测(有交互为 1,无交互为 0),c_{ui} 是置信度权重。对于有交互的样本,置信度较高;对于无交互的样本,置信度较低。
另一种方法是负采样(Negative Sampling),从所有未观测到的交互中随机采样一部分作为负样本,将问题转化为二分类任务。BPR(Bayesian Personalized Ranking)使用 pairwise 的损失函数,优化目标是让正样本的预测得分高于负样本。
四、实践案例
案例一:Netflix Prize 竞赛中的矩阵分解
Netflix Prize(2006-2009)是推荐系统历史上最具影响力的竞赛,矩阵分解方法在其中大放异彩。
竞赛任务是将 Netflix 提供的 1 亿条用户评分数据的预测精度(RMSE)提升 10% 以上。最终获胜团队 BellKor's Pragmatic Chaos 使用了多种矩阵分解方法的集成。
其核心方案包括:SVD++ 作为基础模型,结合时间感知的偏差项和潜在因子;ASVD(Aspect Model SVD)将用户分组,不同组使用不同的潜在因子空间;大尺度 ensemble 将多个模型的预测结果通过线性回归进行融合。
竞赛的重要发现包括:时间效应建模能带来显著提升(用户评分习惯和物品受欢迎程度都随时间变化);模型集成比单一模型的改进更有效;邻域方法与矩阵分解的结合能够互补。这些发现深刻影响了后续推荐系统的研究和实践。
案例二:Spark ALS 在大规模推荐系统中的实现
Apache Spark MLlib 提供了分布式 ALS 实现,是工业界大规模矩阵分解的标准工具之一。
在一个典型的电商推荐场景中,系统拥有 1 亿用户和 1000 万商品,交互记录约 50 亿条。使用 Spark ALS 进行矩阵分解的关键参数设置包括:rank=50(潜在因子维度)、maxIter=20(最大迭代次数)、regParam=0.1(正则化参数)、alpha=40(隐式反馈置信度缩放参数)。
分布式实现的关键优化包括:用户和物品因子矩阵按分区存储,每次迭代中 P 和 Q 的更新可以完全并行化;使用 Block 矩阵乘法来减少通信开销;通过广播变量来共享小规模数据。在 100 个 executor 的集群上,一次完整的训练(20 轮迭代)约需 30 分钟。
训练完成后,系统使用学到的用户和物品因子来计算推荐列表。通过 ANN(近似最近邻)检索引擎(如 FAISS),可以在毫秒级时间内为每个用户找到 Top-K 推荐物品。
五、常见误区与注意事项
误区:潜在因子维度越高越好。过高的维度会导致过拟合和计算开销增加。应通过交叉验证选择最优维度,通常在 20-200 之间。
误区:矩阵分解可以自动处理所有偏差。虽然模型可以学习全局偏差、用户偏差和物品偏差,但更复杂的偏差(如位置偏差、选择偏差)需要额外的建模处理。
注意事项:数据预处理对矩阵分解影响很大。评分归一化(减去用户均值和物品均值)通常能显著提升效果。异常值处理也很重要。
注意事项:隐式反馈和显式反馈需要不同的处理方式。不能简单地将隐式反馈当作评分数据来处理,需要使用专门的模型(如 WRMF、BPR)。
注意事项:矩阵分解的冷启动问题。标准矩阵分解无法处理全新的用户或物品(因为没有对应的因子向量)。需要结合侧信息或使用在线学习策略来解决。
六、本章小结
本章系统讲解了矩阵分解这一推荐系统的核心技术。矩阵分解通过将高维稀疏的用户-物品评分矩阵分解为低秩的用户和物品潜在因子矩阵,实现了从基于邻域的协同过滤到基于模型的推荐方法的跨越。
Funk SVD 解决了标准 SVD 无法处理缺失值的问题,SVD++ 进一步引入隐式反馈信息增强了模型表达力。ALS 和 SGD 是两种主要的优化方法,ALS 更适合大规模分布式场景,SGD 则更灵活。偏差项和正则化是提升模型效果的关键技术。
矩阵分解与深度学习的融合产生了 NCF、两塔模型等现代推荐架构,将潜在因子表示的思想推广到更广泛的特征空间。矩阵分解在隐式反馈场景下的应用(WRMF、BPR)也是工业界的重要实践。
七、思考题与练习
推导矩阵分解的 SGD 更新公式,包括用户因子 P_u、物品因子 Q_i、用户偏差 b_u 和物品偏差 b_i 的梯度。
在 MovieLens-100K 数据集上实现 Funk SVD,比较不同潜在因子维度(k=10, 20, 50, 100, 200)对 RMSE 的影响,绘制学习曲线。
实现 ALS 算法,与 SGD 方法进行对比实验。分析两种方法在收敛速度、最终效果和并行化能力上的差异。
实现 SVD++ 模型,分析隐式反馈信息对推荐效果的提升程度。设计实验验证不同隐式反馈权重对结果的影响。
设计一种融合物品类别信息的矩阵分解方法。考虑如何将类别信息编码到潜在因子学习过程中。
分析矩阵分解模型中潜在因子的可解释性。通过可视化方法(如 t-SNE)展示学习到的物品潜在因子分布,观察是否能发现语义上有意义的聚类模式。
在隐式反馈数据上实现 WRMF 和 BPR 两种方法,对比它们的推荐效果。分析负采样策略对 BPR 性能的影响。
调研并总结 Factorization Machines(FM)的原理,分析 FM 与矩阵分解的关系和区别。