今天看了出自 IJCAI 2017 的論文 DeepFM: A Factorization-Machine based Neural Network for CTR Prediction,思想並不復雜,現將筆記大致記錄於此。
背景
CRT (click-through rate) 預測,是指預測用戶對某個物品(廣告)的點擊率,以便於推送用戶最有可能點擊的物品。廣告平台(比如微信)當然希望有一個模型能夠准確預測出用戶最可能點擊的廣告,這樣可以增加平台收益。
預測點擊概率需要用到用戶信息和物品信息,通常是將多種信息融合在一個向量中。離散的用戶和物品的屬性,就采用 one-hot 表示,連續的屬性可以歸一化后直接使用。訓練樣本為 \((x, y)\),其中 \(x\) 是一個高維稀疏矩陣,其中包含 user 和 item 的信息,\(y \in\{0,1\}\) 表示用戶是否點擊了 item。
特征間的組合常常很有用,比如從用戶點擊數據中發現在吃飯的時間用戶常常下載點外賣的軟件,這說明 time 和 app category 有很大關系。另外可能在數據中發現男孩子常常玩射擊類游戲,這說明用戶性別和年齡與游戲類別存在很大的聯系。
要從數據中捕獲以上提到的特征,需要模型能夠組合不同的特征。線性模型無法進行特征組合,僅能學習到不同特征的權重。為此人們做了特征工程,向線性模型中加入 \(x_ix_j\) 這樣的組合特征,為了解決組合特征參數過多的問題,提出了 Factorization Machines。
但是 FM 因為計算量的問題也常常只能引入二階特征(兩個特征的組合),為了能夠引入更加強大的特征組合。Wide & Deep 模型被提出,結合線性模型和深度神經網絡,試圖讓模型學習到更加復雜的特征。
本文的 DeepFM 和 Wide & Deep 的動機,我感覺是差不多的,只是 DeepFM 提出了一種看起來更加簡潔的模型。
DeepFM
DeepFM 的模型架構圖如下:
單看此圖肯定時看不明白的,稍加解釋如下:
模型架構圖的左邊是一個 FM 模型,FM 的輸入就是高維的稀疏向量,這個向量是是不同屬性的 one-hot 向量拼接得來的。上圖中輸入向量下面的 Field i 就是一個屬性對應的 one-hot 向量。如果熟悉 FM 就知道,FM 模型會對每一個特征學習到一個低維的稠密向量,可以視為特征的 Embedding。
右面是一個深度神經網絡模型,高維的稀疏向量中每一個 Filed 中只有一個維度有值,每一個 Filed 對應的 one-hot 向量,可以經過一個 Embedding 層轉換為低維的稠密向量。Embedding 層中的各個特征的 Embedding 同時也用於 FM 模型。
論文中視各個 Filed 都是離散的,都可以表示為 one-hot 向量,但如果某個屬性是連續值,該怎么辦?可以直接把連續值放入神經網絡,也可以使用這個特征對應的 Embedding。
FM 模型可以表示為:
深度模型的輸入為:
其中 \(e_i\) 就是第 Field i 對應的 Embedding,不同 Field 的 Embedding 拼接起來得到一個稠密向量,輸入到全連接的神經網絡中。神經網絡模型可以表示為:
最終整個 DeepFM 模型可以表示為:
總結
FM 解決的是輸入比較稀疏時,組合特征不好學習的問題。DeepFM 提供了一種結合低階和高階特征的方法,聯合訓練 FM 和 神經網絡,讓模型抽取到更加豐富的特征。和 Wide & Deep 模型相比,DeepFM 中淺層網絡和深層網絡使用的輸入是相同的。Wide & Deep 網絡中 Wide 部分的的輸入還是需要做特征工程,而在 DeepFM 中則不需要特征工程或需要的更少。