NFM——引入pooling和NN的FM

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=1nwixi+f(x)\hat{y}_{N F M}(\mathbf{x})=w_{0}+\sum_{i=1}^{n} w_{i} x_{i}+f(\mathbf{x})
前兩項分別爲偏置項和線性部分,f(X)f(X)爲NFM的核心部分

網絡結構

NFM的結構如下圖所示,其中省略了常數項和線性迴歸部分。
在這裏插入圖片描述

Input Layer

圖中最底層的部分,可以看到應該是由sparse部分(圖中進行了one-hot)個dense(圖中的0.2)部分組成。

Embedding Layer

ViV_{i}表示第n個特徵embedding後的向量,它是一個k維向量,viRk\mathbf{v}_{i} \in \mathbb{R}^{k}

經過Embedding後就可以得到一個輸入特徵的embedding向量的集合Vx={x1v1,,xnvn}V_{x} =\left\{x_{1} \mathbf{v}_{1}, \dots, x_{n} \mathbf{v}_{n}\right\},該集合中並不是n個向量,因爲有的xi=0x_{i}=0.

注意這一步這是得到了對應特徵的embedding向量的集合,並沒有進行拼接或者求平均的操作。

Bi-Interaction Layer

上一步得到特徵向量的集合後,在這一層用一種方式來學習到這些向量的交叉信息。
定義如下的運算,將一個集合中若干個向量轉化爲一個KK維向量
fBI(Vx)=i=1nj=i+1nxivixjvj(1)f_{B I}\left(\mathcal{V}_{x}\right)=\sum_{i=1}^{n} \sum_{j=i+1}^{n} x_{i} \mathbf{v}_{i} \odot x_{j} \mathbf{v}_{j} \qquad (1)
可以看到這裏計算只對xi0x_{i} \neq 0的特徵進行交叉,注意上式表達的是向量計算,並沒有精確到元素,其含義爲:將n個向量兩兩配對,這些pair對其第ii個位置的乘積的總和構成結果的第ii個元素。

對(1)式(n2n^2時間複雜度),進行優化,得到:
fBI(Vx)=12[(i=1nxivi)2i=1n(xivi)2](2)f_{B I}\left(\mathcal{V}_{x}\right)=\frac{1}{2}\left[\left(\sum_{i=1}^{n} x_{i} \mathbf{v}_{i}\right)^{2}-\sum_{i=1}^{n}\left(x_{i} \mathbf{v}_{i}\right)^{2}\right] \qquad(2)
這一步二階交叉項等於0.5*(和的平方減去平方的和)原理爲:
(a+b+c)2(a2+b2+c2)=2ab+2ac+2bc(a+b+c)^2 -(a^2 + b^2 + c^2) = 2ab + 2ac + 2bc

這樣在線性的時間複雜度內就可以進行計算,如果考慮到fBI(Vx)f_{B I}\left(\mathcal{V}_{x}\right)的維度KK,那麼(2)的時間複雜度爲KNxKN_{x},NxN_{x}爲非零特徵的個數。

這裏生成二階交叉信息和傳統FM的區別是,就目標函數來看,FM先對所有特徵進行交叉,最終保留存在存在的pair對,但是NFM是先保留存在的特徵,然後從中提取出交叉信息,相當於對Vx\mathcal{V}_{x}進行了一次池化操作,所以這層又叫 bi-interactio pooling層。該層沒有引入額外的參數。

Hidden Layers

隱藏層沒啥特別的,都是乘上權重加上偏置項然後過激活函數:
z1=σ1(W1fBI(Vx)+b1)z2=σ2(W2z1+b2)zL=σL(WLzL1+bL)\begin{array}{l} \mathbf{z}_{1}=\sigma_{1}\left(\mathbf{W}_{1} f_{B I}\left(\mathcal{V}_{x}\right)+\mathbf{b}_{1}\right) \\ \mathbf{z}_{2}=\sigma_{2}\left(\mathbf{W}_{2} \mathbf{z}_{1}+\mathbf{b}_{2}\right) \\ \cdots \cdots \\ \mathbf{z}_{L}=\sigma_{L}\left(\mathbf{W}_{L} \mathbf{z}_{L-1}+\mathbf{b}_{L}\right) \end{array}

Prediction Layer

接着對於隱藏層的最後一層的輸出,再乘個權重(每個元素對應的權重構成hh
f(x)=hTzLf(\mathbf{x})=\mathbf{h}^{T} \mathbf{z}_{L}
那麼整個NFM的輸出爲:
y^NFM(x)=w0+i=1nwixi+hTσL(WL(σ1(W1fBI(Vx)+b1))+bL)\begin{aligned} \hat{y}_{N F M}(\mathbf{x}) &=w_{0}+\sum_{i=1}^{n} w_{i} x_{i} \\ &+\mathbf{h}^{T} \sigma_{L}\left(\mathbf{W}_{L}\left(\ldots \sigma_{1}\left(\mathbf{W}_{1} f_{B I}\left(\mathcal{V}_{x}\right)+\mathbf{b}_{1}\right) \ldots\right)+\mathbf{b}_{L}\right) \end{aligned}
即由偏置項加上線性迴歸項再加上深度FM項,這三個部分都是KK維的向量。

NFM的特例

當NFM的hidden layer爲0層時,NFM的表達式如下:
y^NFM0=w0+i=1nwixi+hTi=1nj=i+1nxivixjvj=w0+i=1nwixi+i=1nj=i+1nf=1khfvifvjfxixj\begin{aligned} \hat{y}_{N F M-0} &=w_{0}+\sum_{i=1}^{n} w_{i} x_{i}+\mathbf{h}^{T} \sum_{i=1}^{n} \sum_{j=i+1}^{n} x_{i} \mathbf{v}_{i} \odot x_{j} \mathbf{v}_{j} \\ &=w_{0}+\sum_{i=1}^{n} w_{i} x_{i}+\sum_{i=1}^{n} \sum_{j=i+1}^{n} \sum_{f=1}^{k} h_{f} v_{i f} v_{j f} \cdot x_{i} x_{j} \end{aligned}
當權重hh爲常數向量[1,1,....,1][1,1,....,1]時,NFM退化爲FM

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章