FM模型简介

FM模型的主要应用场景是点击率预估,目的是在数据高维稀疏的情况下,解决特征的组合问题。

1、造成数据稀疏高维的原因:

主要是由于ID类特征和one-hot编码以及特征之间的相互交叉引起的。以笔者所在的某安全公司的商业化业务线展示广告业务为例:主要业务是展示广告的排序,提取的特征包括tag类硬编码特征,实际就是ID类特征,维度大概在100万左右,头部tag大概集中在5万左右;还包括渠道特征,大概在500维的样子。One-hot编码后一个是100w维的特征向量,一个是500维的特征向量,两者交叉就是 5w*500 = 2500w维的特征。

2、特征组合

对于LR模型来说,特征的优化公式如下:
w d = w d + η ∑ i = 1 n x d i ( y i − h ( x d i ) ) {w_d} = {w_d} + \eta \sum_{i=1}^{n}{x_d}^{i}\left ( {y_i}- h\left ( {x_d}^{i} \right ) \right ) wd=wd+ηi=1nxdi(yih(xdi))
这里特征的维度是经过one-hot编码后的维度,一般都在上亿维。从公式可知,只有 x d i ≠ 0 {x_d}^{i} \neq 0 xdi=0的时候(即第i和样本中包含第d个特征), w d {w_d} wd才能得到更新。所以,某个特征在训练样本中出现的次数越多,模型学习到该特征的权重置信度越高。由于广告点击本身是一个很稀疏的事件,所以在训练数据集中很多组合特征出现的次数非常少,直接导致模型对这类特征的权重学习不充分,产生过拟合。并且,LR认为所有的交叉特征是相互独立,即使两个交叉特征从业务角度讲具有关联性,比如tag_time和tag_timespand。这导致模型在优化参数的时候也是相互独立,不能充分利用特征业务上的相关性,也会给导致过拟合。FM解决的就是这个问题:如果在组合特征共现不充分的条件下,高效地学习到交叉特征?

3、FM模型

普通的线性模型公式如下:
y = w 0 + ∑ i = 0 d w i x i + ∑ i = 0 d ∑ j = i + 1 d w i j x i x j y= {w_0}+\sum_ {i=0}^{d}{w_i}{x_i}+\sum_{i=0}^{d}\sum_{j=i+1}^{d}{w_i}_{j}{x_i}{x_j} y=w0+i=0dwixi+i=0dj=i+1dwijxixj
只有当 x_i 和 x_j 都不为0并且出现次数足够充分的情况下,才能学下到w_ij的权重。但是上文提到在ctr场景中,特征是非常稀疏的,这意味对大多数组合特征我们学习不到置信度足够高的权重。
FM通过给每一维原子特征引入一个隐向量因子 V_j 实现对交叉特征的学习。FM的公式如下:
y = w 0 + ∑ i = 0 d w i x i + ∑ i = 0 d ∑ j = i + 1 d < V i , V j > x i x j y= {w_0}+\sum_ {i=0}^{d}{w_i}{x_i}+\sum_{i=0}^{d}\sum_{j=i+1}^{d}<{V_i},{V_j}>{x_i}{x_j} y=w0+i=0dwixi+i=0dj=i+1d<Vi,Vj>xixj
在FM模型模型中,交叉特征的权重不在通过单个标量值来表示,而是通过一对向量内积来表示,这两个向量分别表示两个交叉特征各自的隐向量因子。这样做的好处有:
首先,对于没有出现在训练集中的交叉特征,比如 tag1_time1,LR是无法学习这个特征的权重的,但是由于FM为每一个原子特征引入了一个隐向量因子,即使tag1没有和time1一起共现,但是tag1可能和其他特征共现过很多次,同理time1也是。所以我们可以很好的学习到tag1和time1各自对应的隐向量。在预测的时候只需要取出time1和tag1的隐向量做内积就可以表示出两个特征的交叉作用。这是FM最主要的优势,尤其适用于ctr预估这种高维稀疏的应该场景
其次,需要优化的参数大大减少了

4、FM模型计算公式优化

FM模型由常数项、一阶特征、二阶特征构成,公式的计算复杂度O(kn^2 ),其中K是隐向量的维度,n是特征的维度,我们需要对FM计算公式做优化。二阶特征部分经过如下推导计算复杂度可以降低到O(kn)。
FM计算复杂度简化推导过程
上面的推导结果可以把FM的计算复杂度降低到 O(kn),这为FM在线应用提供基础。

5、FM的更新公式

通过上面对计算复杂度的简化,FM模型对各个参数的导数很容易计算,主要是分别求出模型对常数项 w 0 {w_0} w0、一阶项 w i {w_i} wi、二阶项 v i f {v_i}_{f} vif的导数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值