一、前言
网上关于FM算法的介绍很多,我写这篇文章的目的是详细地推一遍FM算法中交叉组合项的简化计算(其是就是验证一下为什么公式中的每个等号是成立的,而不是探究这种思路是怎么得出的),方便自己以后查看,也可以帮助一下对这个算法有些许疑惑的朋友。本文主要参考了https://www.cnblogs.com/AndyJee/p/7879765.html这篇文章,FM算法的原文出处则是在这里S. Rendle, "Factorization Machines," 2010 IEEE International Conference on Data Mining, Sydney, NSW, 2010, pp. 995-1000, doi: 10.1109/ICDM.2010.127.
二、背景
FM即因式分解机。在传统的线性模型中,每个特征都是独立的,如果需要考虑特征与特征之间的交互作用,可能需要人工对特征进行交叉组合;非线性SVM可以对特征进行Kernel映射,但是在特征高度稀疏的情况下,并不能很好地进行学习;现在也有很多分解模型如矩阵分解MF、SVD++等,这些模型可以学习到特征之间的交互隐藏关系,但基本上每个模型都只适用于特定的输入和场景。为此,在高度稀疏的数据场景如推荐系统下,FM出现了。
三、FM算法模型
1、模型目标函数
二元交叉的FM目标函数如下:
其中,
另外,是维向量,即矩阵的某一行;运算符则表示两个维向量的点积:
公式(1)中,前两项就是常规的线性模型,最后一项就是FM提出的交叉组合特征。
2、简化交叉组合特征项
交叉组合项乍一看复杂度是,但经过一定的化简后,可以将复杂度降低为。下面我会将完整的公式先放出来,然后逐步分析。
上面这个公式用的是latex的split模块,打不了tag,就按照四个等号的顺序从上到下1-4好了。
先是第1步的推导,这一步可以先不管这一项,因此在推导过程中我就省略了。令,,,,那么要验证的就是。首先把拆开,得到:
然后把拆开,得到:
所以,而
进行简单的移项后,即可得到。
下面的2-4步如果仔细观察就会发现,只是把向量拆开了而已,我写这篇文章之前是没想到这一点的...那这篇文章到这里就结束了,告辞。
更新一波,在用梯度下降更新权值时,分别对三个权重的偏导是这样的: