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

總結

詳細地實現奇異值分解對於協同過濾非常有效。我們的實驗表明,與完全增量學習相比,批處理學習或不完全增量學習通常需要較小的學習率,並且性能不穩定。我們發現,增量學習,尤其是完全增量學習,可以在查看單個訓練得分後更新值,是通過數百萬個訓練實例進行協同過濾的最佳選擇。

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