http://www.fabwrite.com/deepfm
文章DeepFM: A Factorization-Machine based Neural Network for CTR Prediction介紹了一種深度學習模型,以實現點擊率預估。用 tensorflow 試着寫了 DeepFM,見https://github.com/zgw21cn/DeepFM。
1. FNN、PNN、wide&deep等此前幾種深度模型
見下圖。 (1) FNN,見圖左邊。用 FM 預訓練embedding layer,然后DNN訓練。作者認為有兩點局限:embedding layer 的參數會受到 FM 的影響;預訓練計算量大,效率問題。同時 FNN僅能捕捉高階特征,相比之下,DeepFM 無需預訓練,且能捕捉高階和低階特征。
(2) PNN,見圖中間。為了捕捉高階特征間的組合作用,PNN在 embedding layer 和首層 hidden layer 間引入了 product layer。根據 product 類型的不同,有多種類型的 product layer。product 類型有內積、外積、內積和外積的混合。
PNN的局限在於,外積由於是近似計算會丟失信息而比內積不可靠;內積更可靠,但是仍會計算量大。類似於 FNN,PNN忽略了低階特征。
(3) Wide&Deep,見圖右邊。Google 提出的 Wide&Deep可以同時刻畫低階和高階特征,但是在wide 部分仍需要做人工特征工程。
對比表格如下。

2. DeepFM
(1) DeepFM 類似於Wide&Deep模型的結構,由 FM 和 DNN 兩部分組成。FM描述低階特征,而 DNN 描述高階特征。不同於 Wide&Deep,DeepFM 無需特征工程。
(2) 不同於 Wide&Deep,DeepFM 共享相同的輸入和 embedding 向量,訓練更高效。Wide&Deep 模型中的 Wide 需要人工設計交互特征。
結構如下圖。

設DeepFM 的輸入為{x,y}{x,y},這里xx包括category 特征及 continuous 特征。category 特征已經過 one-hot 編碼,所以xx 是高階且稀疏的。
DeepFM 包括 FM和 DNN兩部分,最終輸出也由這兩部分聯合訓練。 math \hat{y}=sigmoid(y_{FM}+y_{DNN})
(1) FM 部分

FM 部分的輸出如下。
(2) DNN 部分

DNN 部分主要是為了刻畫高維特征。由於 CTR預估的輸入是高維稀疏、category 和 continuous 混合的向量,在輸入給第一層隱藏層前,需要增加一個 embedding層,以將上述向量壓縮為低維、稠密的實向量。
這里 的DNN模型有兩個特點:(1) 不同長度的輸入向量,其在隱藏層的長度是相同的。(2) FM 中的隱藏向量VV,現在作為將 one-hot 編碼后的輸入向量到embedding層的權重。
如下圖。

這里假設a(0)=(e1,e2,...em)a(0)=(e1,e2,...em)表示 embedding層的輸出,那么a(0)a(0) 作為下一層 DNN隱藏層的輸入,其前饋過程如下。 math a^{(l+1)}= \sigma (W^{(l)}a^{(l)}+b^{(l)})