矩陣分解

矩陣分解是簡單的嵌入模型由於 回饋矩陣 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.您會發現 \((i, j)\) 項目 \(U . V^T\) 就是點號商品 \(\langle U_i, V_j\rangle\) 使用者嵌入的項目 \(i\) 和 item \(j\),也就是您想要靠近 \(A_{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\)之間的距離:

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

想要解決這個二次方程式問題 矩陣的單數值分解 (SVD)。不過 由於在實際應用程式中 矩陣 \(A\) 可能非常稀疏例如 與特定使用者看過的所有影片相比。 解決方案 \(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}\) 是查詢頻率和項目 j 的函式。

將目標函式降到最低

目標函式最小化的演算法包括:

  • 隨機梯度下降 (SGD) 是一種將損失函式降到最低的通用方法。

  • 加權交替最小正方形 (WALS) 是專門用於這項設定的 的特定目標

目標是 U 和 V 這兩個矩陣的二次方程式 (請注意 然而,這個問題並不是互通的)。WALS 的運作方式是 然後隨機交錯:

  • 正在修正 \(U\) 與解決 \(V\)的問題。
  • 正在修正 \(V\) 與解決 \(U\)的問題。

每個階段都能精確解決 (利用線性系統的解法),並能 發布。這個技巧保證會收斂,因為每個步驟 保證能減少損失

SGD 與 WALS

SGD 和 WALS 有優缺點。 請參閱以下資訊,瞭解兩者的比較結果:

SGD

相當靈活 — 可以使用其他損失 函式

可以平行處理。

較慢—不要以最快的速度交匯。

較難處理未觀察的項目 (需要 使用負取樣或重力)。

WALS

只仰賴損失正方形。

可以平行處理。

傳輸速度比 SGD 更快。

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