1、前言
FM能夠有效的發現二階組合特徵,但存在的問題在於,FM捕獲的二階組合特徵是線性組合的(其表示式就是線性組合),無法捕獲非線性組合特徵。現在深度神經網路可以發現非線性的組合特徵,例如谷歌的Wide&Deep,微軟的DeepCross,但對於這些深度網路,存在的缺點是很難訓練。本文提出NFM模型,其能將FM模型捕獲的二階線性組合特徵以及神經網路捕獲的高階非線性組合特徵組合起來。NFM比FM更具表現力,因為FM可以被看作是NFM不含隱藏層的特例。
2、Introduction
組合特徵(cross feature),例如occupation = {banker,doctor}, дender = {M,F}則其組合特徵為occupation_ender = {banker_M,banker_F,doctor_M,doctor_F}。
FM能夠很好的捕獲二階組合特徵,但其缺點是它畢竟還是屬於線性模型,它的表達能力受限,而且它只能對二階組合特徵進行建模。
NFM針對FM的缺點,在二階特徵組合的隱向量空間中,引入了非線性變換來提升模型非線性表達能力;同時,也可以學習到高階的組合特徵。
3、MODELLING FEATURE INTERACTIONS
最近幾年,embedding-based方法越來越受歡迎,透過把高維稀疏的輸入embed到低維度的稠密的隱向量空間中,模型可以學習到訓練集中沒有出現過的特徵組合。大致分為兩類:
factorization machine-based linear models
neural network-based non-linear models
3.1、FM
公式:
\hat{y} {FM} (x) =w_0 + \sum ^n _{i=1} w_ix_i + \sum^n _{i=1} \sum^n{j=i+1} v^Tv_j \cdot x_i x_j
FM很好的解決了高緯度高稀疏輸入特徵組合的問題。透過隱向量內積來建模權重,針對在訓練集中沒有出現過的特徵組合或者出現次數很好的特徵組合,也能有效的學習。
引數:
\theta \in \left \{ w_0, \{ w_i\},\{ v_{if}\} \right \}
,表示式可寫作:y(x) = g + hθ
3.2、DNN
業內大部分DNN的架構都是:把特徵的嵌入向量簡單拼接起來,輸入到神經網路中學習。這樣簡單的拼接嵌入向量,因為缺失了很多組合特徵的資訊效果並不好,那麼只能寄希望於後面的MLP可以彌補不足。但是為了提高NN的學習能力就需要增加網路層數,複雜的網路結構會收到諸如梯度消失/爆炸、過擬合、degradation(隨著網路層數的增加,訓練準確率不升反降,非常反常)等問題的困擾,網路的學習或者最佳化會非常困難。
如果不對嵌入層預訓練,Wide&Deep和DeepCross的效能比FM還差,而且DeepCross嚴重過擬合,Wide&Deep遇到了degradation問題。
如果使用FM預訓練初始化嵌入層,Wide&Deep和DeepCross效能都提升了,甚至超過了FM。Wide&Deep的degradation問題也解決了,因為訓練集的效能得到了提升。但是兩者依舊都有過擬合的問題。實驗說明DNN的訓練學習真的存在困難。
NFM丟棄了直接把embedding vector拼接輸入到神經網路的做法,而是採用在embedding層後增加了Bi-Interaction操作來對二階組合特徵進行建模。這使得low level的輸入表達的資訊更加的豐富,極大的提高了後面隱藏層學習高階非線性組合特徵的能力。
4、Neural Factorization Machines
結構圖:
公式:
\hat{y}_{NFM}(x) = w_0 + \sum^n _{i=1}w_ix_i +f(x)
其中f(x)是NFM的核心,用來學習二階組合特徵和高階的組合特徵模式。前面兩項為線性迴歸部分,與FM相似。
4.1、Embedding Layer
Embedding將輸入轉換到低維度的稠密的嵌入空間中進行處理。然後與原始特徵進行相乘得到Embedding vector,Vx = {x1v1,…,xnvn},而不是簡簡單單的使用embedding_lookup。
4.2、Bi-Interaction Layer
把embedding vector餵給Bi-Interaction Layer,採用了類似pooling操作,把多個向量轉換成一個向量,形式化如下:
f_{BI}(V_x) = \sum^n_{i=1}\sum^n_{j=i+1} x_iv_i\bigodot x_jv_j
對公式的理解:fBI的輸入是整個的embedding向量,xi xj是特徵取值,vi vj是特徵對應的embedding向量。中間的操作表示對應位置相乘。所以原始的embedding向量任意兩個都進行組合,對應位置相乘結果得到一個新向量;然後把這些新向量相加,就得到了Bi-Interaction的輸出。這個輸出只有一個向量。上式可參考FM的最佳化方法得到:
f_{BI}(V_x) =\frac{1}{2} \begin{bmatrix} (\sum^n_{i=1} x_i v_i )^2 - \sum^n _{i=1}(x_i v_i)^2 \end{bmatrix}
它的計算複雜度是O(NK),其中k是嵌入向量的維度,N是輸入x中非零特徵的個數。
Bi-Interaction Layer實現了對二階組合特徵的建模,但是又沒有引入額外的開銷,包括引數數量和計算複雜度。
4.3、Hidden Layers
表示式:
\begin{matrix} z_1= \sigma (W_1 f_{BI}(V_x) + b_1),\\ z_2=\sigma (W_2 z_1 + b_1) \\ ...\\ z_L=\sigma (W_L z_{L-1} + b_L) \end{matrix}
其中Zi表示的是隱藏層,以此來學習高階組合特徵。
隱藏層結構圖型別(每個隱藏層大小)有tower,constant,diamond等,一般選用constant的效果要好一些。本文實驗中NFM使用一個隱藏層得到了最好的效果。
4.4、Prediction Layer
最後一層隱藏層zL到輸出層最後預測結果公式如下:
f(x) = h^Tz_L
其中h是中間的網路引數。
綜上NFM的表示式總結如下:
\hat y_{NFM}(x) = w_0 + \sum^n_{i=1} w_ix_i +h^T\sigma_L(w_L(…\sigma(w_1F_{BI}(V_x)+b_1…) +b_L
引數:
\Theta = \{w_0, \{ w_i, v_i \}, h, \{ w_l, b_l\}\}
對比FM,NFM模型的引數主要是{Wl,bl},這個是學習高階組合特徵的引數。相比於FM其實多出的引數就是隱藏層的引數。FM也可以看做是一個神經網路架構,就是去掉隱藏層的NFM。我們把去掉隱藏層的NFM稱為NFM-0,形式化如下:
\begin{matrix} \displaystyle \hat y_{NFM-0} = w_0 + \sum^n _{i=1} w_ix_i +h^T \sum^n_{i=1}\sum^n_{j=i+1}x_iv_i\bigodot x_j v_j\\ = w_0 +\sum^n _{i=1}w_ix_i + \sum^n_{i=1} \sum^n_{j=i+1} \sum^k_{f=1}h_{fv_{if}v_{if}\cdot x_ix_j} \end{matrix}
如果h為全1向量,那麼此時NFM就是FM。
這是第一次把FM看做是神經網路來處理,這樣的觀點對於最佳化FM提供了一些新的思路。同時,像NN中常用的技巧也可以應用到這裡面來,比如Dropout,實驗發現在正則化FM的時候,使用Dropout比傳統的L2正則化還要有效。
5、NFM vs Wide&Deep、DeepCross
最重要的區別就在於Bi-Interaction Pooling。Wide&Deep和DeepCross都是用拼接操作(concatenation)替換了Bi-Interaction,並且隱藏層運用tower結構的MLP(或殘差單元)。
Concatenation操作的最大缺點就是它並沒有考慮任何的特徵組合資訊,所以就全部依賴後面的MLP去學習特徵組合,但是很不幸,MLP的學習最佳化非常困難。
使用Bi-Interaction考慮到了二階特徵組合,使得輸入的表示包含更多的資訊,減輕了後面MLP部分的學習壓力,所以可以用更簡單的模型,取得更好的成績。
6、Learning
6.1、目標函式
NFM可以用於分類、迴歸、ranking問題,對應著不同的目標函式。
迴歸:square loss
分類:Hinge Loss 或 log loss
ranking:Contrastive max-margin loss
本中以迴歸問題為例,使用square loss,表示式如下:
L_{reg} = \sum_{x\in \chi} (\hat y (x) - y(x))^2
這裡並沒有正則化項,因為作者發現在NFM中使用Dropout能夠得到更好的效果。
6.2、引數估計
使用mini-batch Adagrad來進行引數估計,Adagrad是SGD的變體,特點是每個引數都有自己的學習速率。然後讓引數沿著目標函式負梯度的方向進行更新,是下降最快的方向,形式化如下:
\theta = \theta - \eta \cdot 2(\hat y(x) - y(x))\frac{d\hat y(x)}{d\theta}
Bi-Interaction在求梯度的做法:
\frac{df_{BI}\nu _X}{DV_i} = (\sum ^n _{j=1} x_jv_j)x_i - x^2_i v_i = \sum ^n _{j=1,j=1} x_ix_jv_j
所以NFM的訓練依舊可以是端到端的訓練,只需要把Bi-Interaction插入到網路中即可。
6.3、Dropout
在NFM中,Bi-Interaction的輸出後就增加了Dropout操作,隨機的丟棄了一部分的輸出。隨後的MLP同樣應用了Dropout。Dropout在NFM中可以有效的抑制過擬合。
6.4、Batch Normalization
DNN的訓練面臨很多問題。其中一個就是協方差偏移(covariance shift),意思就是:由於引數的更新,隱藏層的輸入分佈不斷的在變化,那麼模型引數就需要去學習這些變化,這減慢了模型的收斂速度。
BN(x_i) = \gamma \bigodot (\frac{x_i - \mu _B}{\sigma _B}) + \beta
對於隱藏層的輸入,BN在mini-batch資料上,把輸入轉換成均值為0,方差為1的高斯分佈。其中的gamma、beta是兩個超引數,為了擴大模型的表達能力,如果模型發現不應用BN操作更好,那麼就可以透過學習這兩個引數來消除BN的影響。NFM中Bi-Interaction Layer的輸出就是MLP的第一個輸出,包括後面所有隱藏層的輸入都需要進行Batch Normalization。Batch Normalization在NFM中可以加快訓練速度。
如果用FM來pre-train嵌入層,NFM會收斂的非常快,但是NFM最終的效果並沒有變好。說明NFM對引數有很好的魯棒性。
7、總結
NFM主要特點:
引入了Bi-Interaction Layer,採用Pooling操作將多個embedding vector轉化成一個vector
加入了NN,用於發現高階非線性組合特徵
本作品採用《CC 協議》,轉載必須註明作者和本文連結