矩陣分解是簡單的嵌入模型由於 回饋矩陣 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 更快。
處理未觀察的項目更輕鬆。