Neural Factorization Machines for Sparse Predictive Analytics paper
解決痛點
NFM可以看做是主要針對FM和FNN的改進,他們缺點如下
- FM模型雖然學習到了交叉特徵,但是對於交叉後的特徵仍然是線性建模,學習不到非線性的關係
- FNN模型雖然在底層用的FM進行向量初始化,在上層使用DNN來學習到高階非線性特徵,但是單個特徵embedding後通過拼接(concatenating),然後在後續的DNN結構中學習到交叉特徵(deep& wide和deep cross也是如此),但是在實際應用中,這種方法對於交叉特徵的學習不盡人意。
所以需要一個模型既能學習到高階特徵,又能學習到非線性關係,因此提出了NFM模型。
目標函數
NFM模型的目標函數如下所示:
y^NFM(x)=w0+i=1∑nwixi+f(x)
前兩項分別爲偏置項和線性部分,f(X)爲NFM的核心部分
網絡結構
NFM的結構如下圖所示,其中省略了常數項和線性迴歸部分。
Input Layer
圖中最底層的部分,可以看到應該是由sparse部分(圖中進行了one-hot)個dense(圖中的0.2)部分組成。
Embedding Layer
Vi表示第n個特徵embedding後的向量,它是一個k維向量,vi∈Rk。
經過Embedding後就可以得到一個輸入特徵的embedding向量的集合Vx={x1v1,…,xnvn},該集合中並不是n個向量,因爲有的xi=0.
注意這一步這是得到了對應特徵的embedding向量的集合,並沒有進行拼接或者求平均的操作。
Bi-Interaction Layer
上一步得到特徵向量的集合後,在這一層用一種方式來學習到這些向量的交叉信息。
定義如下的運算,將一個集合中若干個向量轉化爲一個K維向量
fBI(Vx)=i=1∑nj=i+1∑nxivi⊙xjvj(1)
可以看到這裏計算只對xi=0的特徵進行交叉,注意上式表達的是向量計算,並沒有精確到元素,其含義爲:將n個向量兩兩配對,這些pair對其第i個位置的乘積的總和構成結果的第i個元素。
對(1)式(n2時間複雜度),進行優化,得到:
fBI(Vx)=21⎣⎡(i=1∑nxivi)2−i=1∑n(xivi)2⎦⎤(2)
這一步二階交叉項等於0.5*(和的平方減去平方的和)原理爲:
(a+b+c)2−(a2+b2+c2)=2ab+2ac+2bc
這樣在線性的時間複雜度內就可以進行計算,如果考慮到fBI(Vx)的維度K,那麼(2)的時間複雜度爲KNx,Nx爲非零特徵的個數。
這裏生成二階交叉信息和傳統FM的區別是,就目標函數來看,FM先對所有特徵進行交叉,最終保留存在存在的pair對,但是NFM是先保留存在的特徵,然後從中提取出交叉信息,相當於對Vx進行了一次池化操作,所以這層又叫 bi-interactio pooling層。該層沒有引入額外的參數。
Hidden Layers
隱藏層沒啥特別的,都是乘上權重加上偏置項然後過激活函數:
z1=σ1(W1fBI(Vx)+b1)z2=σ2(W2z1+b2)⋯⋯zL=σL(WLzL−1+bL)
Prediction Layer
接着對於隱藏層的最後一層的輸出,再乘個權重(每個元素對應的權重構成h)
f(x)=hTzL
那麼整個NFM的輸出爲:
y^NFM(x)=w0+i=1∑nwixi+hTσL(WL(…σ1(W1fBI(Vx)+b1)…)+bL)
即由偏置項加上線性迴歸項再加上深度FM項,這三個部分都是K維的向量。
NFM的特例
當NFM的hidden layer爲0層時,NFM的表達式如下:
y^NFM−0=w0+i=1∑nwixi+hTi=1∑nj=i+1∑nxivi⊙xjvj=w0+i=1∑nwixi+i=1∑nj=i+1∑nf=1∑khfvifvjf⋅xixj
當權重h爲常數向量[1,1,....,1]時,NFM退化爲FM