交叉特征的处理算法学习理解(FM-xDeepFM)

FM算法

公式:

其中

\sum_{i=1}^n\sum_{j=i+1}^nw_{i,j}x_ix_j=\sum_{i=1}^n\sum_{j=i+1}^n<v_i,v_j>x_ix_j

W=VV^T

其中V =(v_1,v_2,...,v_n)

利用上三角矩阵=(对称矩阵-对角矩阵)/2的思想,将其化简为

\sum_{i=1}^n\sum_{j=i+1}^nw_{ij}x_ix_j=\frac12(\sum_{f=1}^k(\sum_{i=1}^nv_{i,f}x_i)^2-\sum_{i=1}^nv_{i,f}^2x_i^2)

再利用梯度下降法求出V,即得到每个特征的隐含向量(能反映交叉信息),同时训练即可得到分类或回归模型。

注:V的维度为n \times kv_i的维度为1 \times kk为超参,表示向量维度。

FFM算法

在FM的基础上引入了类别(field)的概念,n个特征(已one-hot编码)属于f个field。

y = w_0+\sum_{i=1}^nw_ix_i+\sum_{i=1}^n\sum_{j=i+1}^n<v_{i,f_j},v_{j,f_i}>x_ix_j

此时相对于FM中的v_{i(1 \times k)},FFM中的v_i维度为n \times kv_i中有f个向量是不相同的,同一fiield下的向量是相同的。

DeepFM算法

对高阶特征组合进行建模

交叉特征的处理算法学习理解(FM-xDeepFM)_第1张图片

FM算法中 

y = w_0+\sum_{i=1}^nw_ix_i+\sum_{i=1}^n\sum_{j=i+1}^nw_{ij}x_ix_j =\sum_{i=1}^n\sum_{j=i+1}^n<v_i,v_j>x_ix_j

FM layer中的+的输入为onehot编码,x的输入为词向量v_i,ANN的输入也是词向量v_i

最后的\hat{y} = activation(y_{FM}+y_{DNN})

DCN算法(Deep & cross network)

交叉特征的处理算法学习理解(FM-xDeepFM)_第2张图片

其中x_0是连续变量和分类变量embedding向量的组合向量

x_0=[x_{embed,1}^T,x_{embed,2}^T,...,x_{embed,k}^T,x_{dense}^T]^T

交叉特征的处理算法学习理解(FM-xDeepFM)_第3张图片

x_1=x_0x_0^Tw_{c,0}+b_{c,0}+x_0

x2=x_0x_1^Tw_{c,1}+b_{c,1}+x_1

通过不断地叠加,实现了高阶的交叉cross。

参考大佬文章:https://zhuanlan.zhihu.com/p/55234968

xDeepFM算法

交叉特征的处理算法学习理解(FM-xDeepFM)_第4张图片

DCN中没有考虑field概念,xDeepFM考虑了filed概念,核心是CIN的理解:

交叉特征的处理算法学习理解(FM-xDeepFM)_第5张图片

x^0中的m行表示有m个特征(field),每个field的向量维度为D,x^0一开始是初始化的向量矩阵,由embedding vector组成。

后续再通过如下算式进行特征的高阶交叉:

X_{h,*}^k=\sum_{i=1}^{H_{k-1}}\sum_{j=1}^mW_{ij}^{k,h}(X_{i,*}^{k-1}\circ X_{j,*}^0)

首先理解X_{i,*}^{k-1}\circ X_{j,*}^0

交叉特征的处理算法学习理解(FM-xDeepFM)_第6张图片

x^k中有H_k个field,x^0中有m个field,进行点乘的维度效果为:

(H_k \times 1)\times(1 \times m)=(H_k,m)

z1 = x1*y1;z2 = x2*y1,z3 = x3*y3;z4 = x1*y4

最后得到一个维度为(H_k,m,D)的矩阵,可以理解为有D个样本(每个样本是一个embedding维度),每个样本有H_k个特征和m个特征的交叉,即有H_k\times m个值。

再理解W_{i=1}^{k.h}(X_{i,*}^{k-1}\circ X_{j,*}^0)

交叉特征的处理算法学习理解(FM-xDeepFM)_第7张图片

z_1 = \sum_{i=1}^3w_ix_i

其中向量(x_1,x_2,x_3)为权重向量,最后得到维度为(H_k,D)的矩阵x^{k+1},最后对每个filed的向量进行加总求和实现sum pooling。

在用代码实现过程中,可将维度为(H_k,m,D)的矩阵的矩阵进行压缩,得到维度为(n_{samples},D,H_k\times m)的矩阵,然后用维度为(1,H_k\times m,n_{chanels})的filter进行conv1d的卷积操作,再进行sum_pooling操作。

参考大佬文章:https://zhuanlan.zhihu.com/p/57162373

你可能感兴趣的:(FM,算法,机器学习,深度学习)