Neural Collaborative Filtering (2017)
March 25, 2024行列分解による協調フィルタリングは、ユーザとアイテムの評価値行列を近似するユーザとアイテムの潜在因子行列の積を学習する。 Neural Collaborative Filtering (NCF) は、行列分解のかわりにニューラルネットワークで、パラメータを更新する。 NCFは3種類あり、Generalized Matrix Factorization (GMF) と Multi-Layer Perceptron (MLP)、GMFとMLPを組み合わせたNeural Matrix Factorization (NeuMF) がある。
GMFは、ユーザとアイテムの潜在ベクトルのアダマール積を、1層の全結合層と活性化関数のネットワークに入力する。 ユーザ\(u\)とアイテム\(i\)の潜在ベクトルを\(\textbf{p}_u\), \(\textbf{q}_i\), 活性化関数を\(a_{\text{out}}\), 重みを\(\textbf{h}^\top\)とおくとき、評価値を $$ \hat{y}_{ui}=a_{\text{out}}(\textbf{h}^\top(\textbf{p}_u\odot \textbf{q}_i)) $$ と推定する。 GMFにおいては、行列分解を、重みの要素が1、活性化関数が恒等写像、バイアス項がない1層の全結合層とみなせる。
MLPにおきかえる場合、\(\textbf{p}_u\), \(\textbf{q}_i\)を連結してできるベクトルをMLPに入力する。 $$ \begin{align*} \textbf{z}_1&=\phi_1(\textbf{p}_u, \textbf{q}_i)=\begin{bmatrix}\textbf{p}_u\\\textbf{q}_i\end{bmatrix}\\ \phi_2(\textbf{z}_1)&=a_2(\textbf{W}^\top_2\textbf{z}_1+\textbf{b}_2)\\ &\dots\\ \phi_L(\textbf{z}_{L-1})&=a_L(\textbf{W}^\top_L\textbf{z}_{L-1}+\textbf{b}_L)\\ \hat{y}_{ui}&=\sigma(\textbf{h}^\top \phi_L(\textbf{z}_{L-1})) \end{align*} $$
NeuMFは、GMPとMLP出力を1層の全結合層に入力する。 $$ \begin{align*} \phi^{\text{GMF}}&=\textbf{p}^G_u\odot \textbf{q}^G_i\\ \phi^{\text{MLP}}&=a_L(\textbf{W}^T_L(a_{L-1} (\dots a_2(\textbf{W}^\top_2\begin{bmatrix}\textbf{p}^M_u\\\textbf{q}^M_i\end{bmatrix}+\textbf{b}_2)\dots)) + \textbf{b}_L)\\ \hat{y}_{ui}&=\sigma (\textbf{h}^\top \begin{bmatrix}\phi^{\text{GMF}}\\\phi^{\text{MLP}}\end{bmatrix}) \end{align*} $$
雑記
論文では、潜在ベクトルを、ユーザやアイテムのインデックスを示すone-hotベクトルと重みの積から生成していた。 テスト時に推定したいユーザとアイテムの評価値は、訓練時には0.5とするのだろうか。