矩陣分解

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

矩陣分解是簡單的嵌入模型。根據意見回饋矩陣 A \(\in R^{m \times n}\),其中 \(m\) 是使用者 (或查詢) 的數量, \(n\) 則是項目數量,則模型會學習:

  • 使用者嵌入矩陣 \(U \in \mathbb R^{m \times d}\),其中 i 是使用者 i 的嵌入項目。
  • 項目嵌入矩陣 \(V \in \mathbb R^{n \times d}\),其中 j 列是項目 j 的嵌入項目。

插圖:使用週期性電影的矩陣矩陣分解。

嵌入產品是為了讓產品 \(U V^T\) 能反映意見回饋矩陣 A 的近似值。請留意, \(U . V^T\) 的\((i, j)\) 項目只是要接近 \(A_{i, j}\)的使用者嵌入 \(i\)和項目嵌入 \(j\)的點號產品。

選擇目標函式

平方目標就是直覺的距離,也就是平方距離。做法是盡量減少所有觀測項目之間的正方形錯誤總和:

\[\min_{U \in \mathbb R^{m \times d},\ V \in \mathbb R^{n \times d}} \sum_{(i, j) \in \text{obs}} (A_{ij} - \langle U_{i}, V_{j} \rangle)^2.\]

在此目標函式中,您只需要加總觀察到的組合 (i、j),也就是意見回饋矩陣中的非零值。不過,僅將一個值加總是不太合適的做法。所有矩陣的矩陣會盡可能減少損失,並產生無法有效做出有效性的模型。

插圖:三個矩陣:只觀察矩陣分解、加權加權分解和單數值分解。

也可以將未觀察的值視為零,並加總矩陣中的所有項目。此做法程式碼會將 \(A\) 和近似 \(U V^T\)之間的 Frobenius 距離最小化:

\[\min_{U \in \mathbb R^{m \times d},\ V \in \mathbb R^{n \times d}} \|A - U V^T\|_F^2.\]

您可以透過矩陣的單數值分解 (SVD) 來解決二次問題。不過,SVD 也不是理想的解決方案,因為在實際應用程式中,矩陣 \(A\) 可能十分稀少。例如,相較於其他使用者觀看的所有影片,YouTube 的所有影片都會納入考量。解決方案 \(UV^T\) (對應於模型輸入輸入的近似值) 可能接近零,導致一般效能效能不佳。

相較之下,加權矩陣分解會將目標分解為下列兩個總和:

  • 觀察到的項目總數。
  • 未觀測的項目總數 (以零表示)。

\[\min_{U \in \mathbb R^{m \times d},\ V \in \mathbb R^{n \times d}} \sum_{(i, j) \in \text{obs}} (A_{ij} - \langle U_{i}, V_{j} \rangle)^2 + w_0 \sum_{(i, j) \not \in \text{obs}} (\langle U_i, V_j\rangle)^2.\]

這裡的 \(w_0\) 是權重,可用於決定兩個字詞的權重,因此目標不會被其中一個一為核心。調整這個超參數非常重要。

\[\sum_{(i, j) \in \text{obs}} w_{i, j} (A_{i, j} - \langle U_i, V_j \rangle)^2 + w_0 \sum_{i, j \not \in \text{obs}} \langle U_i, V_j \rangle^2\]

其中 \(w_{i, j}\) 是查詢 i 和項目 j 的頻率的函式。

縮減目標函式

盡可能減少目標函式的常見演算法包括:

  • 隨機梯度下降 (SGD) 是一種通用方法,可盡量減少遺失函式。

  • 加權替代最小正方形 (WALS) 專門用於這個特定目標。

該目標在兩個矩陣的二元和 V 中都具有二次方狀 (但請注意,這個問題並非共同轉換。)WALS 的運作方式為隨機初始化嵌入,然後變更:

  • 修正 \(U\) 並解決問題 \(V\)。
  • 修正 \(V\) 並解決問題 \(U\)。

每個階段都可以確切完成 (透過線性系統的解決方案),並且可以分散。保證每個步驟皆融合,因為每個步驟都保證能減少損失。

SGD 與 WALS

SGD 和 WALS 有優缺點。 請參閱下列資訊以瞭解兩者之間的比較:

新加坡幣

非常有彈性:使用其他損失函式。

可平行處理。

減速,無法快速完成對話。

很難處理未觀測的項目 (必須使用負值取樣或重力)。

戰爭

只需要仰賴損失的正方形。

可平行處理。

互動速度比新加坡標準時間更快。

更輕鬆地處理未觀察到的項目。