Neural Collaborative Filtering原文連結與程式碼連結:

Neural Collaborative Filtering原文連結

作者公開的原始碼

Neural Collaborative Filtering (NCF)由何向南博士於17年發表,不同於傳統的基於矩陣分解的協同過濾演算法,NCF框架引入了神經網路,透過神經網路來學習使用者與物品的互動資訊,並在實驗中取得了一定的效果。下面就來看看文中的NCF框架以及3種模型實現具體是什麼樣的。

1、NCF通用框架

文章先提出了一種NCF通用框架,如下圖所示:

NCF神經協同過濾框架之理論篇

NCF通用框架

Input Layer:輸入層的User和Item透過one-hot編碼轉化成了稀疏向量。舉個具體的例子,假設有M個使用者,那麼每個使用者都被轉化為

1\times M

的向量,並且第i個使用者的向量

u_i

[0, 0, \dots, 0, 1, 0, \dots, 0]_{1\times M}

,其中

u_i[i] = 1, \ u_i[j] = 0 \ (j \neq i)

,對於Item的轉化也類似。

Embedding Layer:在這之後,把User向量和Item向量分別嵌入到一個較小維數的空間,假設為K維。嵌入層的具體實現是把輸入的向量

u_i

和嵌入矩陣

P

相乘,得到該向量的嵌入向量

p_i

。如果一共M個使用者,嵌入維數為K維,那麼對於使用者的嵌入矩陣的大小為

M\times K

,其中嵌入矩陣的第i行代表第i個使用者的嵌入向量。(如果一共N個物品,那麼對於物品的嵌入矩陣大小為

N\times K

Neural CF Layers:這一層被稱為神經協同過濾層。把使用者的嵌入向量和物品的嵌入向量送入NCF layers後,透過裡面的layer得到一個向量,這裡面的每個layer都可以定製,作者在文中給出了3種實現,在後面幾節中會具體描述。

Output Layer:透過全連線層把NCF layers輸出的向量對映到最終的預測分數

\hat y_{ui}

,最後再透過損失函式

l(\hat y_{ui}, y_{ui})

進行梯度下降更新引數。

2、作者實現的3種模型:GMF,MLP,NeuMF

這三個模型的區別僅僅只在NCF通用框架中的Neural CF Layers。

2.1 General Matrix Factorization

廣義矩陣分解與傳統的矩陣分解的區別在於它用的是向量對應元素相乘,得到的是向量,而矩陣分解使用的是向量內積,得到的是標量。具體模型如下圖所示:

NCF神經協同過濾框架之理論篇

GMF model

對於透過嵌入層得到的使用者u嵌入向量

p_u

和物品i嵌入向量

q_i

,將他們逐元素相乘,即

p_u = [p^1, \cdots, p^k],\\ q_i = [q^1, \cdots, q^k],\\ \phi_0(p_u, q_i) = p_u \odot q_i = [p^1q^1, \cdots, p^kq^k].

因為是對應元素相乘,所以要求對於使用者的嵌入層和對於物品的嵌入層的嵌入維數要相同,都為k。

在這之後透過無bias的全連線層和啟用函式得到預測分數:

\hat y_{ui} = \sigma((p_u \odot q_i)^Th)

其中

\sigma

為啟用函式,

h

為全連線層的權重矩陣,大小為

k\times 1

2.2 Multi-Layer Perceptron

NCF神經協同過濾框架之理論篇

MLP model

作者使用的多層感知機為全連線層,用ReLU函式作為啟用函式,這個模型對嵌入向量的處理與GMF模型中不同。它把使用者u嵌入向量

p_u

和物品i嵌入向量

q_i

連起來(concatenate),即

z_1 = \phi_1(p_u, q_i) = [p_u, q_i] = [p^1, \cdots, p^{k_1}, q^1, \cdots, q^{k_2}]\\

雖然作者的實驗中

k_1

k_2

取了相同的值,但我認為這裡的也可以取不一樣的值,實驗中預設相同可能是作者調參後的最優結果。

之後就把得到的長度為

k_1+k_2

的向量送入多層感知機層:

\phi_2(z_1) = \sigma_2(z_1^TW_2 + b_2),\\ \phi_3(z_2) = \sigma_3(z_2^TW_3 + b_3),\\ \cdots\cdots\\ \phi_X(z_{X-1}) = \sigma_X(z_{X-1}^TW_X + b_X).

其中,

\sigma_i

為啟用函式,這裡每一層的啟用函式都選取了ReLU,

W_i

b_i

分別為全連線層的weight和bias。

最後透過無bias的全連線層和啟用函式得到預測分數:

\hat y_{ui} = \sigma(\phi_X(z_{X-1})^Th)

其中

\sigma

為啟用函式,

h

為weight。

2.3 Neural Matrix Factorization

NeuMF模型把GMF和MLP模型結合起來,使他們相互強化,以得到更好的效果。

NCF神經協同過濾框架之理論篇

NeuMF model

NCF神經協同過濾框架之理論篇

NeuMF模型具體輸入輸出尺寸

一個比較直接的實現方法是共享GMF和MLP的嵌入層引數,但這樣的處理可能會限制融合模型的效能,作者在文中也給出了一個例子:共享引數意味著它們嵌入維數相同,然而在GMF和MLP模型達到最優效果時,它們的嵌入維數並不一定是相同的,甚至可能相差很大。

為了使融合模型更加靈活,採用分別學習GMF和MLP的嵌入層矩陣的方法,並在兩個模型的最後一層前將他們的輸出向量連起來,然後傳入最後的NeuMF layer,預測最終的分數。具體公式如下:

令GMF的嵌入矩陣為

P^G

Q^G

,分別對應使用者嵌入矩陣和物品嵌入矩陣, MLP的嵌入矩陣為

P^M

Q^M

。那麼對於使用者u和物品i,GMF中的嵌入向量為

p^G_u

q^G_i

,MLP中的嵌入向量為

p^M_u

q^M_i

左側GMF部分:

\phi^{GMF}_{ui} = p^G_u \odot q^G_i

右側MLP部分:

z_1 = \phi^{MLP}_1(p_u, q_i) = [p_u, q_i]\\  \phi^{MLP}_2(z_1) = \sigma_2(z_1^TW_2 + b_2),\\ \phi^{MLP}_3(z_2) = \sigma_3(z_2^TW_3 + b_3),\\ \cdots\cdots\\ \phi^{MLP}_{ui} = \phi^{MLP}_X(z_{X-1}) = \sigma_X(z_{X-1}^TW_X + b_X).

這時候得到了兩個向量

\phi^{GMF}_{ui}

\phi^{MLP}_{ui}

,把這兩個向量連起來傳入最後的NeuMF層,這一層的本質是無bias的全連線層,把向量對映到一維空間,得到最後的預測分數:

Z_{ui} = [\phi^{GMF}_{ui}, \phi^{MLP}_{ui}],\\ \hat y_{ui} = \sigma(Z_{ui} ^T h).

如果訓練時已經擁有了GMF模型和MLP模型的預訓練引數,那麼,在NeuMF層可以使用

超引數 #FormatImgID_55#

將兩者的輸出向量連在一起:

Z_{ui} = [\alpha \phi^{GMF}_{ui}, (1-\alpha)\phi^{MLP}_{ui}],\\ \hat y_{ui} = \sigma(Z_{ui} ^T h).

3 訓練集生成

令使用者數量為M,物品數量為N,則使用者-專案互動矩陣

Y \in \mathrm{R}^{M\times N}

為:

Y_{ui} =  \{  \begin{align} &1, \quad \text{使用者u與物品i有互動}\\ &0, \quad \text{使用者u與物品i沒有互動} \end{align}\\

這裡的互動可以指打分,點選,或者瀏覽,基於不同的資料集可以有不同的意思。

訓練集由正樣本和負樣本組成,並且每個正樣本對應n個負樣本,n為大於0的整數。正樣本為所有的互動資料(u, i),標籤為1。對於每個正樣本(u, i),令集合

negative(u)=\{item: Y_{u,item} = 0\}\\

從negative(u)中選取n個item,得到

(u, item_1), (u, item_2), \dots, (u, item_n)

,將這n個配對作為負樣本,標籤為0。所以如果假設有互動的樣本數量為m個,即正樣本為m個,那麼負樣本有nm個,訓練集一共有(n+1)m個樣本。這裡每一對(u, i)的標籤即為上述框架中的target:

y_{ui}

以上便是NCF框架的基本內容,讀者如果想做進一步瞭解,可以去置頂連結閱讀原文噢~