【論文的思路】
NCF 框架如上:
1、輸入層:首先將輸入的user、item表示為二值化的稀疏向量(用one-hot encoding)
2、嵌入層(embedding):將稀疏表示映射為稠密向量(??如何映射)
所獲得的用戶(項目)的嵌入(就是一個稠密向量)可以被看作是在潛在因素模型的上下文中用於描述用戶(項目)的潛在向量。
3、NCF 層:將用戶嵌入和項目嵌入送入多層神經網絡結構,我們把這個結構稱為神經協作過濾層,它將潛在向量映射為預測分數。
4、輸出層:預測分數
預測模型為:

其中,
分別表示用戶和項目的隱含特征矩陣。
表示交互函數 f 的模型參數。



函數 f 被定義為多層神經網絡,可以被定義為:

其中,
分別表示為輸出層和第 x 個神經協作過濾(NCF)層映射函數,總共有X個NCF層。


【NCF的學習過程】
——運用均方誤差(squared loss)進行回歸:

其中:
y 表示交互矩陣 Y 中觀察到的條目(如對電影有明確的評分,評級)
y− 表示消極實例(negative instances,可以將未觀察的樣本全體視為消極實例,或者采取抽樣的方式標記為消極實例)
w_ui 是一個超參數,用來表示訓練實例 (u,i) 的權重。
似然函數的定義:

對似然函數取負對數,我們得到
(負對數可以用來表示Loss函數,而且還能消除小數乘法的下溢出問題):
(如何推的?——涉及到交叉熵損失函數:
https://blog.csdn.net/red_stone1/article/details/80735068)
——這是NCF方法需要去最小化的目標函數,並且可以通過使用隨機梯度下降(SGD)來進行訓練優化。
【廣義矩陣分解】
(證明MF是如何被解釋為NCF框架的一個特例)
1、首先左側的GMF層:
由於輸入層是用戶(項目)ID中的一個one-hot encoding編碼,所獲得的嵌入向量可以被看作是用戶(項目)的
潛在向量。
用
表示用戶的潛在向量
,
表示項目的潛在向量




- 定義第一層神經CF層的映射函數為:


- 將向量映射到輸出層:


其中,a_out和h分別表示輸出層的激活函數和連接權:
激活函數為a_out :sigmoid函數


權重h為 : 通過log loss(第3.1.1節)學習 h
(當a_out 是一個恆等函數,h權重全為1,即為MF模型)
2、右側的MLP層:
由於NCF用兩條路線來對用戶和項目建模(圖2中可以明顯看出用戶和項目兩個輸入),自然地,需要通過兩個路線,把他們各自的特征連接結合起來。
NCF框架下的MLP模型定義為:

其中,W_x,b_x,a_x分別表示x層的感知機中的權重矩陣、偏置向量(神經網絡的神經元閾值)和激活函數(選擇的是ReLU)。
與GMF不同的有兩個部分:
1)首先是user_latent和item_latent的merge的部分,不再采用內積的形式,而是contract拼接的方式;
2)再者就是for循環構建深層全連接神經網絡,內部Layer的激活函數是relu,最后一層的激活函數仍然是sigmoid。
3、二者結合的NeuMF層:
到目前為止,我們已經開發了NCF的兩個實例:
GMF,它應用了一個線性內核來模擬潛在的特征交互;
MLP,使用非線性內核從數據中學習交互函數。
接下來的問題是:我們如何能夠在NCF框架下融合GMF和MLP,使他們能夠相互強化,以更好地對復雜的用戶-項目交互建模?
為了使得融合模型具有更大的靈活性,我們允許GMF和MLP學習獨立的嵌入(embedding)
[ instead of 讓GMF和MLP共享相同的嵌入層(Embedding Layer)],並結合兩種模型通過連接他們最后的隱層輸出。
公式如下:

其中:








MLP層的激活函數是 ReLU,
該模型結合MF的線性度和DNNs的非線性度,用以建模用戶-項目之間的潛在結構。我們將這一模式稱為“NeuMF”,簡稱神經矩陣分解(Neural Matrix Factorization)。該模型的每個模型參數都能使用標准反向傳播(back-propagation)計算。
【預訓練過程】
由於 NeuMF 是 GMF 和 MLP 的組合,我們建議使用 GMF 和 MLP 的預訓練模型來初始化NeuMF。
1、首先 訓練隨機初始化的 GMF 和 MLP 直到模型收斂。
( 采用
自適應矩估計(Adam,Adaptive Moment Estimation), 通過對不頻繁的參數進行頻繁和更大幅度的更新來適應每個參數的學習速率。 Adam方法在兩種模型上的收斂速度都比普通SGD快,並緩解了調整學習率的痛苦。)
2、然后 用它們的模型參數初始化 NeuMF 相應部分的參數。
( 在將預先訓練的參數輸入NeuMF之后,我們用
普通SGD而不是Adam進行優化。
這是因為Adam需要保存更新參數的動量信息(momentum information)。因為我們用預先訓練的模型參數初始化NeuMF,並且放棄保存動量信息,不適合用基於動量的方法進一步優化NeuMF。)
3、 唯一的調整是在輸出層,在那里我們將兩者用權重連接起來:


其中,
分別表示 GMF 和 MLP 模型預訓練的 h 向量, α 是一個超參數,用來權衡兩個預訓練模型(的比重)。

【4 實驗】
圍繞三個研究問題開展實驗:
RQ1 我們提出的NCF方法是否勝過 state-of-the-art 的隱性協同過濾方法?
RQ2 我們提出的優化框架(消極樣本抽樣的log loss)怎樣為推薦任務服務?
RQ3 更深的隱藏單元是不是有助於對用戶項目交互數據的學習?
【數據集】
1、MovieLens-1M :userid-itemid-rating-timestamp
這個電影評級數據集被廣泛地用於評估協同過濾算法。我們使用的是包含一百萬個評分的版本,每個用戶至少有20個評分。 雖然這是顯性反饋數據集,但我們有意選擇它來挖掘(模型)從顯式反饋中學習隱性信號[21]的表現。為此,我們將其轉換為隱式數據,其中每個條目被標記為0或1表示用戶是否已對該項進行評分。
2、Pinterest:
【評估方案】
為了評價項目推薦的性能,采用了
leave-one-out 方法評估,該方法已被廣泛地應用於文獻
[1,14,27]。
即:對於每個用戶,我們將其
最近的一次交互作為測試集
(數據集一般都有時間戳),並利用
余下的培訓作為訓練集。
由於在評估過程中為每個用戶排列所有項目花費的時間太多,所以遵循一般的策略
[6,21],
隨機抽取100個不與用戶進行交互的項目,將測試項目排列在這100個項目中。
排名列表的性能由
命中率(HR)和
歸一化折扣累積增益(NDCG)
[11]來衡量。
沒有特別說明的話,我們將這兩個指標的排名列表截斷為10(
TopK=10)。
如此一來,
HR直觀地衡量測試項目是否存在於前10名列表中,
而
NDCG通過將較高分數指定為頂級排名來計算命中的位置。我們計算了每個測試用戶的這兩個指標,並求取了平均分。
【Reference】
1、(全文翻譯)【翻譯】Neural Collaborative Filtering--神經協同過濾:
https://www.cnblogs.com/HolyShine/p/6728999.html
2、(源碼解析)【推薦系統】neural_collaborative_filtering(源碼解析):
https://www.cnblogs.com/wzyj/p/8974782.html
3、(一個小demo的實踐)Basic-NCF-Demo:
https://www.jianshu.com/p/6173dbde4f53