FM模型简介
FM模型的主要应用场景是点击率预估,目的是在数据高维稀疏的情况下,解决特征的组合问题。
1、造成数据稀疏高维的原因:
主要是由于ID类特征和one-hot编码以及特征之间的相互交叉引起的。以笔者所在的某安全公司的商业化业务线展示广告业务为例:主要业务是展示广告的排序,提取的特征包括tag类硬编码特征,实际就是ID类特征,维度大概在100万左右,头部tag大概集中在5万左右;还包括渠道特征,大概在500维的样子。One-hot编码后一个是100w维的特征向量,一个是500维的特征向量,两者交叉就是 5w*500 = 2500w维的特征。
2、特征组合
对于LR模型来说,特征的优化公式如下:
这里特征的维度是经过one-hot编码后的维度,一般都在上亿维。从公式可知,只有的时候(即第i和样本中包含第d个特征),才能得到更新。所以,某个特征在训练样本中出现的次数越多,模型学习到该特征的权重置信度越高。由于广告点击本身是一个很稀疏的事件,所以在训练数据集中很多组合特征出现的次数非常少,直接导致模型对这类特征的权重学习不充分,产生过拟合。并且,LR认为所有的交叉特征是相互独立,即使两个交叉特征从业务角度讲具有关联性,比如tag_time和tag_timespand。这导致模型在优化参数的时候也是相互独立,不能充分利用特征业务上的相关性,也会给导致过拟合。FM解决的就是这个问题:如果在组合特征共现不充分的条件下,高效地学习到交叉特征?
3、FM模型
普通的线性模型公式如下:
只有当 x_i 和 x_j 都不为0并且出现次数足够充分的情况下,才能学下到w_ij的权重。但是上文提到在ctr场景中,特征是非常稀疏的,这意味对大多数组合特征我们学习不到置信度足够高的权重。
FM通过给每一维原子特征引入一个隐向量因子 V_j 实现对交叉特征的学习。FM的公式如下:
在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的计算复杂度降低到 O(kn),这为FM在线应用提供基础。