LR-Poly2-FM-FFM

推荐搜索相关论文基础篇
1.结构上
LR:
LR认为最终的标签,例如CTR中点击与否是由我们的每个特征的线性作用决定的,这里面每个特征的贡献度不一样,所以我们希望学习得到每个特征其对应的贡献程度,此处我们用线性的方式学习,
g ( x ) = w 0 + ∑ i w i x i g(x) = w_0 + \sum_{i}w_ix_i g(x)=w0+iwixi
最终为了方便我们用下面对式子将我们对预测结果缩放到0-1之间的概率,
y = 1 1 + e x p ( − g ( x ) ) y = \frac{1}{1+exp(-g(x))} y=1+exp(g(x))1

Poly2:
LR对特征的交叉信息处理的非常差,
Poly2算法
g ( x ) = w 0 + ∑ i w i x i + ∑ i ∑ j = i + 1 w i j x i x j g(x) = w_0 + \sum_{i}w_i x_i + \sum_{i}\sum_{j =i+1}w_{ij}x_ix_j g(x)=w0+iwixi+ij=i+1wijxixj
我们发现Poly2和LR最大的不同之处出现在了最后一项,出现了特征的交叉,之前我们用 w a x a + w b x b w_ax_a + w_bx_b waxa+wbxb来表示特征 x a x_a xa x b x_b xb的影响,现在我们用 w a x a + w b x b + w a b x a b w_ax_a + w_bx_b+ w_{ab}x_{ab} waxa+wbxb+wabxab来表示两个特征的影响, 因为额外增加一个参数来表征特征之间的关系,所以Poly2的表达能力比LR好了很多,但是在推荐搜索等场景中,用户和商品的维度进行来交叉,而早期这些特征又是高维度稀疏的,这种交叉一下子就让我们的特征维度变大了很多(要学的参数也变大了),所以过拟合的概率大大增大,这些权重很难被学好

FM:
g ( x ) = w 0 + ∑ i w i x i + ∑ i ∑ j = i + 1 w i j x i x j = w 0 + w 1 T x + x T W 2 x g(x) = w_0 + \sum_{i}w_i x_i + \sum_{i}\sum_{j = i+1}w_{ij}x_ix_j = w_0 + w_1^Tx + x^TW_2x g(x)=w0+iwixi+ij=i+1wijxixj=w0+w1Tx+xTW2x
上面我们提到了,上面的式子有一个非常大的问题,就是冗余度太大, 很多参数学习也不太好, 很容易过拟合,为了缓解这种问题,我们做如下的假设:

我们的矩阵W是低秩的,此时我们的矩阵就可以拆解为,
W 2 = V T V , V ∈ R k ∗ d W_2 = V^TV, V \in R^{k*d} W2=VTV,VRkd

其中 d d d为我们特征的维度,这样我们的学习参数就从之前的 O ( d 2 ) O(d^2) O(d2)降低为了 O ( d k ) O(dk) O(dk),一般实践中我们将 k k k设置为100左右或者小于100,远远小于样本的特征维度 d d d,

g ( x ) = w 0 + ∑ i w i x i + ∑ i ∑ j < i < v i , v j > x i x j g(x) = w_0 + \sum_{i}w_i x_i + \sum_{i}\sum_{j <i}<v_i,v_j>x_ix_j g(x)=w0+iwixi+ij<i<vi,vj>xixj

其中,

w 0 ∈ R , w ∈ R d , V ∈ R d ∗ k w_0 \in R, w \in R^d, V \in R^{d * k} w0R,wRd,VRdk

此时,我们便可以这么来理解我们的模型, 我们每个特征i都有一个向量 v i v_i vi来表示它的潜在因素(可以想象为化学组成),任何两个特征之间交叉都会带来一些"化学反应",这个反应的最终结果就是两个特征之间的内积。

FFM:
FM虽然比LR已经好了很多,同时还缓解了Poly2暴力枚举带来的计算问题,但对于特征之间的交叉影响的计算有些简单。
FFM的数学表示,

g ( x ) = w 0 + ∑ i w i x i + ∑ i ∑ j < i < v i , f j , v j , f i > x i x j g(x) = w_0 + \sum_{i}w_i x_i + \sum_{i}\sum_{j <i}<v_{i,f_j},v_{j,f_i}>x_ix_j g(x)=w0+iwixi+ij<i<vi,fj,vj,fi>xixj

我们发现:

相较于Poly2的直接标量 w i j w_{ij} wijFFM两个特征之间的交叉关系是通过向量计算得到的,可以在特征稀疏的情况下,更好的捕捉特征之间的交叉关系(参考FM比Poly2好的两个案例解释);

相较于FM的向量计算,FFM的向量多了一个下标,如果我们认为所有的 f x f_x fx都是一样的,那么FFM就和FM是一样的了,所以FM可以看成是FFM的简化版本或者是特例,再换种理解,FFM相较于FM在特征交叉影响上看上去更为复杂一点,特征的交叉关系捕捉更加细致了;

那么这么做合理吗?我们直观的来理解一下:

FM计算的方式是 :$ w_{ESPN} \dot w_{NIKE} + w_{ESPN} \dot w_{Male} + w_{NIKE} \dot w_{Male}$, 每个特征对应一个特征向量,直接计算点积;

FFM计算的方式是$ w_{ESPN,A} \dot w_{NIKE,P} + w_{ESPN,G} \dot w_{Male,P} + w_{NIKE,G} \dot w_{Male,A} , 认 为 不 同 域 特 征 之 间 的 交 叉 是 不 一 样 的 , 所 以 E S P N 在 碰 到 A d v e r t i s e r 类 时 的 交 叉 应 当 用 向 量 , 认为不同域特征之间的交叉是不一样的,所以ESPN在碰到Advertiser类时的交叉应当用向量 ,,ESPNAdvertiserw_{ESPN,A} 进 行 交 叉 , 遇 到 G e n d e r 类 的 时 候 , 应 当 用 向 量 进行交叉,遇到Gender类的时候,应当用向量 ,Gender,w_{ESPN,G}$进行计算。

从上面的例子我们发现,FFM在特征的交互影响上的计算相较于FM更加合理,而且在很多情况下,域的分数不会非常多,所以相较于Poly2的算法,参数个数也不会非常多,所以很多实验中,FFM相比于FM和Poly2等方案都取得来非常好的效果.

四种方法的优缺点:
LR:
优点:思路简单 训练快
缺点:忽略了特征之间的交叉关系,简单的线性表示不能很好地建模特征之间的交叉作用,学习不到特征间的交叉信息,需要人为构建大量的特征;对于类别型的特征处理很耗内存,因为对每个特征学习一个权重,为避免序号编码产生的大小关系问题,会使用onehot编码,对于公司上亿的用户和商品,这样的组合是十分耗费内存的。
Poly2:
优点:由于Poly2要学习的参数是远远高于LR的,所以表示能力是要大大好于LR,实践中结果比LR要好了很多;
缺点:
Poly2的随机交叉学习增加了学习成本,模型冗余度大大提升,交叉特征的存储成本也大大增加;也增加了模型过拟合的概率。
FM:
优点:
可以学到更多的特征之间的交叉关系,而且相较于Poly2,FM的学习参数要远远低于Poly2;
在数据集非常稀疏的时候,FM的效果经常好于Poly2。
缺点:
因为FM假设为低秩,用两个latent vector的点积表示两个特征之间的影响,限制了特征的交互关系的表示,特征的交叉关系可能比点积复杂。
FFM:
优点:相较于FM,特征之间的学习更加合理
计算时间和效果都很好
缺点:
FFM FM LR Poly2 对类别型特征的处理很好,对数值型特征的处理非常差,
只学习了二阶交叉特征,由于计算原因没有考虑高阶交叉,
如果对类别特征使用one hot 编码,会损失特征的关联信息。

NFM的数学表示为:

y N F M = w 0 + ∑ i = 1 n w i x i + f ( x ) y_{NFM} = w_0 + \sum_{i=1}^nw_ix_i + f(x) yNFM=w0+i=1nwixi+f(x),

回忆一下,如果 f ( x ) = ∑ i = 1 n ∑ j = i + 1 n v i T v j x ˙ i x j f(x) = \sum_{i=1}^n\sum_{j=i+1}^n v_i^Tv_j \dot x_ix_j f(x)=i=1nj=i+1nviTvjx˙ixj ,就转变为了FM的数学式子,而在NFM中,此处为:

f B I ( V x ) = ∑ i = 1 n ∑ j = i + 1 n x i v i ⊙ x j v j f_{BI}(V_x) = \sum_{i=1}^n\sum_{j=i+1}^n x_iv_i \odot x_jv_j fBI(Vx)=i=1nj=i+1nxivixjvj,

我们发现和我们传统的Embedding有一些不同的地方,我们的embedding层是 V x = x i v i V_x = {x_iv_i} Vx=xivi, 我们这边embedding( v i v_i vi为我们的embedding向量)之后了还对其做了rescale,乘上了 x i x_i xi,这是为了对实数值做处理使用的。

  • 注意: 此处 ⊙ \odot 指的是element-wise的乘积,所以最终我们的输出是一个向量, 此处我们可以将上面的式子简化为:

f B I ( V x ) = 1 2 [ ˙ ( ∑ i = 1 n x i v i ) 2 − ∑ i = 1 n ( x i v i ) 2 ] f_{BI}(V_x) = \frac{1}{2} \dot [(\sum_{i=1}^n x_i v_i)^2 - \sum_{i=1}^n(x_iv_i)^2 ] fBI(Vx)=21[˙(i=1nxivi)2i=1n(xivi)2], 其中, v 2 = v ⊙ v v^2 = v \odot v v2=vv

最终整个网络就可以表示为:

y N F M = w 0 + ∑ i = 1 n w i x i + f ( x ) → y N F M = w 0 + ∑ i = 1 n w i x i + h T σ L ( W L ( . . . σ 1 ( W 1 f B I ( V x ) + b 1 ) . . . ) + b L ) y_{NFM} = w_0 + \sum_{i=1}^nw_ix_i + f(x) \rightarrow y_{NFM} = w_0 + \sum_{i=1}^nw_ix_i + h^T \sigma_L(W_L(...\sigma_1(W_1f_{BI}(V_x)+b_1) ...)+ b_L) yNFM=w0+i=1nwixi+f(x)yNFM=w0+i=1nwixi+hTσL(WL(...σ1(W1fBI(Vx)+b1)...)+bL)

1.Interaction Network: X h , ∗ k = ∑ i = 1 H k − 1 ∑ j = 1 m W i j k , h ( X i , ∗ k − 1 ∘ X j , ∗ 0 ) X_{h,*}^k = \sum_{i=1}^{H_{k-1}} \sum_{j=1}^m W_{ij}^{k,h}(X_{i,*}^{k-1} \circ X_{j,*}^0) Xh,k=i=1Hk1j=1mWijk,h(Xi,k1Xj,0)其中 W k , h ∈ R H k − 1 ∗ m W^{k,h} \in R^{H_{k-1 * m}} Wk,hRHk1m, W k , h W^{k,h} Wk,h中每个元素的值可以认为是两个向量为Hadamard product的一个权重, ∘ \circ 为Hadamard product,我们发现第 k k k层的向量变成了第k-1层的每个向量和第一层的每个embedding向量的Hadamard product的和,特征的交互此时变得非常明显,特征的交叉随着网络深度的增加而更深层次。

2.Compressed: “compressed" indicates that the k-th hidden layer compress the potential space of H k − 1 ∗ m H_{k−1} * m Hk1m vectors down to H k H_k Hk vectors. p i k = ∑ j = 1 D X i , j k p_i^k = \sum_{j=1}^DX_{i,j}^k pik=j=1DXi,jk,

其中 i ∈ [ 1 , H k ] i \in [1, H_k] i[1,Hk], 因此我们可以得到一个pooling向量 p k = [ p 1 k , p 2 k , . . . , p H k k ] p^k = [p_1^k, p_2^k, ... , p_{H_k}^k] pk=[p1k,p2k,...,pHkk], 对于第k个隐藏层,其长度为 H k H_k Hk,所有的pooling向量在输入到最后的输出单元时会先进行拼接, p + = [ p 1 , p 2 , . . . , p T ] ∈ R ∑ i = 1 T H i p^+ = [p^1, p^2, ..., p^T] \in R^{\sum_{i=1}^T H_i} p+=[p1,p2,...,pT]Ri=1THi

xDeepFM的时间复杂度较高,原来的时间复杂度为 O ( m H 2 D T ) O(mH^2DT) O(mH2DT),其中D为embedding的维度,T为层数,m为特征个数,H为层的节点的个数,而如果一个简单的DNN,相同的深度情况下,它的计算复杂度为 O ( m H D + H 2 T ) O(mHD + H^2T) O(mHD+H2T),所以DeepFM的时间复杂度非常高;训练代价是非常大的; 和很多的NN一样,虽然xDeepFM通过人为设计网络的交叉,来控制网络的交叉(特征的交叉),这么做缓和了DNN随机的组合,但是是否达到我们的需求仍然是一个非常大的问好

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值