因子分解机(Factorization Machines,FM)及其变种已经在推荐系统中得到了广泛的应用,本文就FM的系列模型进行简单总结。
FM
早期用的比较多的是通过协同过滤基于相似的item或相似的user进行推荐,但是协同过滤中用到的矩阵是非常稀疏的,因此后续提出用MF,通过矩阵分解来得到稠密的向量。后续又提出了采用例如LR逻辑回归,或者用GBDT+LR来更充分的利用特征。如果使用LR,我们可以得到如下模型:
由上式可知,x和y之间是线性关系,没有考虑特征与特征之间的关系。因此FM通过显示的组合来构造二阶特征,如下式:
式中第三部分就是显示的构建特征中第i个位置和第j个位置的组合特征。通过两两组合发掘特征之间的规律。
问题
- 复杂度过高,如果原始特征为n,第三部分的复杂度就是
。
- 特征通常是比较稀疏的,如果直接进行组合计算,其中会有很多部分是0,导致训练的
矩阵结果较差。
改进
改进后的式子如下:
改进点就是将之前的w改为用向量乘法来得到,例如w的大小为
,则改为用
的矩阵v来计算得到,
其中k小于n,这样相当于将原有的
的矩阵缩小为
的矩阵,减少了训练的参数。原来的式子,
对应的权重分别为
,这两个参数之间是相互独立的,在稀疏数据中难以学习到较好的值,而现在对应的权重变为
,
权重之间存在共同项
,能更好地在稀疏数据上学习。
时间复杂度的改进: 到现在为止,FM的第三项的计算复杂度是
,复杂度还是很高,作者又对其进行了改进。通过下式推导,可以得到改进后的时间复杂度为
。第一个等式:因为矩阵是对称的,因此上三角和下三角一样,因此可以通过整个矩阵的计算的值减去对角线的计算值,再除以2。后续等式就是各项的展开和合并。
FM的优点
- 考虑交叉特征,从而进一步的考虑了特征之间的关系
- 采用矩阵分解的方式,使模型能够在稀疏数据上训练,并且具有较好的泛化性
- 降低了时间复杂度
FFM
FFM为Field FM,在原始FM的基础上进行了改进。主要是提出了Field的概念,将不同的特征进行归类,即属于不同的Field。先给出它的公式,后面我们再进行解释。
可以发现FFM和FM的公式中唯一不同的就是第三项中的v矩阵。
- 首先来简单解释一下这个Field的概念,举个例子就是在推荐系统模型构建的时候我们会涉及user的特征和item的特征,我们可以将user的特征归为一个field,item的特征归为另一个field。当然也可以细分,比如将交易数据的特征分为卖方field,买方field等等。
- 那么为什么要分这些field呢?这里作者主要考虑的是,对于不同域之间的特征所对应的权重应该是不同的。栗子:
这两种特征有一个共同项
,他们组合的时候所对应的
是一样的。是的,当
和所有其他特征组合时,他所用到的向量都是
。那么FFM就是考虑到让不同域之间的特征组合的时候更细致,更多样。因此,当
和不同域之间的特征进行组合时,所用到的v就不一样了。
注意点:
DeepFM
深度学习已经在很多领域都得到了广泛的应用,而DeepFM就是将DNN和FM进行结合,利用FM来学习低阶交叉特征,用DNN来学习高阶复杂的特征关系。如下图所示,左边部分为FM部分,右边部分为DNN部分,将embedding后的特征用于FM和DNN,最后将FM的结果和DNN的结果组合后通过sigmoid计算点击率。
AFM
AFM即attention FM,基于注意力机制的FM,其总体结构如上图所示。主要包括embedding layer,pair-wise intersection layer和attention-based pooling。embedding layer主要就是将输入的特征向量转换为embed向量。
Pair-wise Intersection Layer
这一层主要是做哈达玛积,即主元素相乘。
,不同特征向量之间两两组合。如果输入n个向量,则输出n*(n-1)/2个向量。所谓交互层,就是两两之间组合。
Attention-based Pooling
这里的pooling层,其实就是计算经过交互层后得到的输出的注意力权重,然后用权重对其加权,使得向量不同位置的值对应不同的权重。attention层的设计如下所示:
其中h,w,b是可学习参数,通过单层MLP后经过softmax归一化得到权重,对于attention就不赘述了。
总体损失函数
其中p为可学习参数,可以发现该损失函数和FM的区别也是在第三项,在特征交叉的过程中加入了注意力机制进行权重调节,值得不同的特征交互具有不同的权重,以此表示不同的特征交互的作用是不同的。可以把AFM看成是在NFM上的改进,NFM的创新之处是加入了交互层,进行哈达玛积计算。这里就不介绍NFM了。