A Guide to Singular Value Decomposition for Collaborative Filtering阅读笔记

本文使用的物品、对象、项目、产品等词对应原文的 objects,在最近的推荐系统中,统称为 item。
本文的方法来自:
A Guide to Singular Value Decomposition for Collaborative Filtering
Chih-Chao Ma
Department of Computer Science, National Taiwan University, Taipei, Taiwan

Ma C C. A Guide to Singular Value Decomposition for Collaborative Filtering[J]. 2008.

注意,这里的SVD和经典的分解为3个矩阵的方法是不一样的(请见传统的基于SVD协同过滤推荐),这篇 paper 使用的是可学习(即根据梯度下降更新参数)的方法。

Abstract

As the market of electronic commerce grows explosively, it is important to provide customized suggestions for various consumers. Collaborative filtering is an important technique which models and analyzes the preferences of customers, and gives suitable recommendations. Singular Value Decomposition (SVD) is one of the popular algorithms used for collaborative filtering. However, directly applying conventional SVD algorithms to collaborative filtering may result in poor performance. In this report, we discuss problems that beginners may face and present effective SVD variants for collaborative filtering.
随着电子商务市场的爆炸性增长,为各种消费者提供定制推荐很重要。协同过滤是一种重要的技术,可以对客户的偏好进行建模和分析,并给出适当的建议。奇异值分解(SVD)是用于协作过滤的流行算法之一。但是,直接将常规SVD算法应用于协作过滤可能会导致性能不佳。在此报告中,我们讨论了初学者可能面临的问题,并提出了有效的SVD变体用于协同过滤。

  • 直接使用传统的SVD进行协同过滤的的效果可能会很差,所以考虑一些 SVD 的变体来进行协同过滤。

Introduction

协同过滤是一种从大量用户给出的口味信息集合中预测用户的偏好和兴趣的技术。它的基本假设是,过去满意的人将来也会满意。协同过滤可用于自动向用户推荐其偏好项目的推荐系统。

Problem Definition

假设数据库收集了 nn 个用户对 mm 个对象的偏好作为数值分数。例如,用户可以以 1-5 星的评分给他或她看过的电影打分。通常,用户不会对数据库中的所有对象评分。此外,某些用户可能会给许多物体打分,而其他用户只会给一些物体打分。
VRn×mV∈R^{n×m} 为数据库中收集的得分的矩阵,令 I0,1n×mI∈{0,1} ^{n×m} 为标识(用于RMSE计算需要),如果对象 jj 被用户 ii 打分,则 Iij=1I_{ij} = 1,如果得分缺失,则为0。在大多数情况下,VV 稀疏且不平衡,因此每个用户或对象的分数数量不等,差异很大。 VV 中的现有分数用作协同过滤算法的训练数据,目标是预测数据库中缺少的分数。设 ARn×mA∈R^{n×m} 为一个稀疏矩阵,其中包括全部或部分缺失 votes 作为其非零条目。协同过滤算法旨在预测 AA 中的值。
协同过滤的性能可以通过预测值和真实值之间的误差来衡量。常用且有效的度量是均方根误差(RMSE)。
RMSE(P,A)=i=1nj=1mJij(AijPij)2i=1nj=1mJij\operatorname{RMSE}(P, A)=\sqrt{\frac{\sum_{i=1}^{n} \sum_{j=1}^{m} J_{i j}\left(A_{i j}-P_{i j}\right)^{2}}{\sum_{i=1}^{n} \sum_{j=1}^{m} J_{i j}}}
其中,PRn×mP ∈ R^{n×m} 是预测值,ARn×mA ∈ R^{n×m} 是真实值,J0,1n×mJ ∈ {0,1}^{n×m}AA 的标识。

Singular Value Decomposition(SVD)

奇异值分解,缩写为SVD,是协同过滤的分解算法之一[Zhang et al。,2005]。这种类型的算法找到用户和对象的特征,并根据这些因素进行预测。一些分解算法对每个单个特征值或多个用户的特征向量之间具有附加限制(additional restrictions),但是奇异值分解不施加限制,并且更易于实现。

Formulation

假设 VRn×mV∈R^{n×m}mm 个对象和 nn 个用户的评分矩阵,而 I0,1n×mI∈{0,1} ^{n×m} 是其标识。 SVD算法找到两个矩阵 URf×nU∈R^{f×n}MRf×mM∈R^{f×m} 作为的用户和对象的特征矩阵。也就是说,每个用户或对象都有一个 ff 维特征向量,ff 被称为SVD的维数。预测函数 pp 用于预测 VV 中的值。由 p(Ui,Mj)p(U_i,M_j) 估计的分数是 VijV_{ij} 的值,其中 UiU_iMjM_j 分别表示用户 ii 和对象 jj 的特征向量。一旦找到 UUMM ,就可以通过预测函数来预测 VV 中缺失的分数。通过最小化现有分数与其预测值之间的平方误差之和来执行 UUMM 的优化:
E=12i=1nj=1mIij(Vijp(Ui,Mj))2+ku2i=1nUi2+km2j=1mMj2E=\frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{m} I_{i j}\left(V_{i j}-p\left(U_{i}, M_{j}\right)\right)^{2}+\frac{k_{u}}{2} \sum_{i=1}^{n}\left\|U_{i}\right\|^{2}+\frac{k_{m}}{2} \sum_{j=1}^{m}\left\|M_{j}\right\|^{2}
其中 kuk_ukmk_m 是正则化系数,以防止过度拟合。

最常见的预测功能是特征向量的点积。即,p(Ui,Mj)UiTMjp(U_i,M_j)= U_i^TM_j。因此,UUMM 的优化成为VUTMV≈U^TM的矩阵分解问题。但是在大多数应用中, 中的分数被限制在区间 [ab][a,b] 中,其中 aabb 是在数据域中定义的最小和最大分数值。因此,预测函数为:
p(Ui,Mj)={a if UiTMj<0a+UiTMj if 0UiTMjbab if UiTMj>bap\left(U_{i}, M_{j}\right)=\left\{\begin{array}{ll} a & \text { if } U_{i}^{T} M_{j}<0 \\ a+U_{i}^{T} M_{j} & \text { if } 0 \leq U_{i}^{T} M_{j} \leq b-a \\ b & \text { if } U_{i}^{T} M_{j}>b-a \end{array}\right.

使用上述预测函数时,目标函数及其负梯度具有以下形式:
E=12i=1nj=1mIij(Vijp(Ui,Mj))2+ku2i=1nUi2+km2j=1mMj2\begin{aligned} E &=\frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{m} I_{i j}\left(V_{i j}-p\left(U_{i}, M_{j}\right)\right)^{2} +\frac{k_{u}}{2} \sum_{i=1}^{n}\left\|U_{i}\right\|^{2}+\frac{k_{m}}{2} \sum_{j=1}^{m}\left\|M_{j}\right\|^{2} \end{aligned}
EUi=j=1mIij((Vijp(Ui,Mj))Mj)kuUi,i=1,,n(5)-\frac{\partial E}{\partial U_{i}}=\sum_{j=1}^{m} I_{i j}\left(\left(V_{i j}-p\left(U_{i}, M_{j}\right)\right) M_{j}\right)-k_{u} U_{i}, i=1, \ldots, n \tag{5}
EMj=i=1nIij((Vijp(Ui,Mj))Ui)kmMj,j=1,,m(6)-\frac{\partial E}{\partial M_{j}}=\sum_{i=1}^{n} I_{i j}\left(\left(V_{i j}-p\left(U_{i}, M_{j}\right)\right) U_{i}\right)-k_{m} M_{j}, j=1, \ldots, m \tag{6}
然后可以通过梯度下降对 UUMM 进行优化。

Algorithm 1 (Batch learning of Singular Value Decomposition)

选择学习率 µµ 和正则化系数 ku,kmk_u,k_m

  1. 设置矩阵U,M的起始值。
  2. 重复
    通过 (5) 和 (6) 计算梯度 U,M\nabla{U},\nabla{M}
    更新 UUMMUUμU  MMμMU\leftarrow U- \mu \nabla{U},~~M\leftarrow M- \mu \nabla{M}
    迭代停止的判断条件可以有很多,例如RMSE基本不变,或者U、M基本不变时停止迭代。

批量学习是 SVD 的标准方法。但是,这对于大规模但稀疏的训练矩阵 VV 不利,对于协同过滤来说这很常见。在这种情况下,梯度的值具有较大的方差,并且需要较小的学习率以防止发散。因此,出现了一些更适合协同过滤的变体。

Variants of SVD

我们已经提到批处理学习可能效果不佳。相反,可以使用增量学习,增量学习在扫描部分训练数据后仅修改 UUMM 中的某些特征值。例如,如果一次考虑一个用户 ii。论文中其它变体请见原文,这里不再概述,还有几个算法:

  • Algorithm 2 (Incomplete incremental learning of Singular Value Decomposition)
  • Algorithm 3 (Complete incremental learning of Singular Value Decomposition)
  • Algorithm 4 (Batch learning of SVD with Momentum)

Results

总结

详细地实现奇异值分解对于协同过滤非常有效。我们的实验表明,与完全增量学习相比,批处理学习或不完全增量学习通常需要较小的学习率,并且性能不稳定。我们发现,增量学习,尤其是完全增量学习,可以在查看单个训练得分后更新值,是通过数百万个训练实例进行协同过滤的最佳选择。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章