0. 导言
最近在参加IJCAI18的pCVR预估比赛,比赛到了复赛也是真正比拼模型和算法的时候了。初赛90%的时间都在做一个勤劳的”挖掘机”,但是到了复赛,光挖特征已经无法做到很好的提升了,这时候就是拼模型了。做CTR模型的人,FFM一定是绕不过去的,因此借此机会,在这里按照论文[1]仔细的推敲(翻译:p)下FFM背后的数学原理。
field-aware factorization machines(FFM)是基于FM和二阶多项式模型的扩展。在大量的CTR预估比赛中大放异彩。FFM在处理海量稀疏数据的分类问题时十分有效。
我们定义数据集为,其中为维特征向量。我们知道带正则的Logistic regression可以表示为这样的一个优化问题:
其中
然而在CTR预估任务中,特征之间的相互作用是绝不能忽视的,甚至能表达出单个特征无法表达出的信息(见论文中Table 1的例子)。为了学习到特征交互项之前的系数,我们可以用两种方法。第一个方法就是将原始的线性部分进行二阶多项式转换,而第二个方法就是用FM模型。如果我们将两个模型做一些适当的结合,当当当~就出来了我们的FFM。接下来我们将详细介绍下这两个方法和他们是如何结合的具体细节。
1. POLY2
多项式模型(二阶)其实我们中学就学过,现在我们用更专业的语言定义一下
,
用大白话讲就是两个变量的交互项。(一般来说函数将每对映射为一个唯一的自然数,但是由于通常在高维情形下,学习过多的系数会影响模型的性能,因此许多包对其做了一些优化,例如Vowpal Wabbit package用hash的方法来减少所需要学习的参数个数)。计算这个的复杂度为,其中为单个样本非零元素的平均个数。这个方法的缺点在于,若数据集中非零个数有很多,则该模型的复杂度太高;若数据集为稀疏数据,大量的特征的值为0,无法有效的学习到特征交叉项的系数。因此我们引出了FM。
2. FM
我们可以看到FM模型将多项式中学习scalar系数问题转换成学习两个维隐向量问题。再通过一些数学上的一些trick,模型可以化简为
其中
这个模型的复杂度为。FM模型优于Poly2模型的原因之前也提到了一点。更具体可以参考论文以及文中给出的参考文献。
3. FFM
终于进入正题了。我们先用一个例子复习一下FM模型,假设有这样一条CTR数据。
FM模型显而易见。那如果用FFM模型呢?公式就变成为
这里的就代表了三个field,ESPN后面的代表了与它相乘的Nike是在这个field里的,Nike后面的代表了与它相乘的ESPN是在这个field里的,同理其他的项。
这样FFM模型的数学表达式就呼之欲出了:
计算复杂度为。
4. 算法
先贴图再解释:
1:初始化一个的张量(三维数组),令其值全为1。
2:运行次SGD迭代,每次迭代:
3:对于整个训练集
4:随机抽样一个样本点
5:计算
6:外层循环(只看非零项)
7:里层循环(只看非零项)
8:计算次梯度(梯度对于不可导函数的推广)
9:对于隐变量的每一个item (1~循环)
10:更新梯度和(懒得打字了,贴图了。。)(初始值设为1)
11:最后更新模型参数(初始值通过对服从的随机变量抽样得到)
Note:论文说如果对数据进行标准化操作能得到更好的效果。
5. 小结
数学推导部分结束,有兴趣的可以自己拿纸笔动手推导一下。第一次写博文,写的很详细很傻瓜,后续的博文将补充一些细节和自己的实践。Thx for reading!
6. 参考文献
[1] : https://www.csie.ntu.edu.tw/~cjlin/papers/ffm.pdf