FM(Factorization Machine)公式推导

一、前言

        网上关于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目标函数如下:\\\hat{y}(x):=\omega_0+\sum_{i=1}^n\omega_ix_i+\sum_{i=1}^{n-1}\sum_{j=i+1}^n<V_i,V_j>x_ix_j\tag{1}

其中,\\\omega_i(i=0,1,\cdots,n)\in \mathbb{R},\quadV\in \mathbb{R}^{n\times k}

另外,V_i(i=1,2,\cdots,n)k维向量,即矩阵V的某一行;<\cdot,\cdot>运算符则表示两个k维向量的点积V_i^TV_j\\<V_i,V_j>:=\sum_{c=1}^kv_{i,c}\cdot v_{j,c}

公式(1)中,前两项就是常规的线性模型,最后一项就是FM提出的交叉组合特征。

2、简化交叉组合特征项

        交叉组合项乍一看复杂度是O(k*n^2),但经过一定的化简后,可以将复杂度降低为O(kn)。下面我会将完整的公式先放出来,然后逐步分析。

\\\begin{split}&\sum_{i=1}^{n-1}\sum_{j=i+1}^n(V_i^TV_j)x_ix_j\\=&\frac{1}{2}\left[\sum_{i=1}^n\sum_{j=1}^n(V_i^TV_j)x_ix_j-\sum_{i=1}^n(V_i^TV_j)x_ix_i \right]\\=&\frac{1}{2}\left[\sum_{i=1}^n\sum_{j=1}^n\sum_{c=1}^k(v_{i,c}v_{j,c})x_ix_j-\sum_{i=1}^n\sum_{c=1}^kv_{i,c}^2x_i^2 \right]\\=&\frac{1}{2}\sum_{c=1}^k\left(\sum_{i=1}^nv_{i,c}x_i\sum_{j=1}^nv_{j,c}x_j-\sum_{i=1}^nv_{i,c}^2x_i^2 \right)\\=&\frac{1}{2}\sum_{c=1}^k\left[ \left( \sum_{i=1}^nv_{i,c}x_i \right)^2-\sum_{i=1}^nv_{i,c}^2x_i^2 \right]\end{split}

上面这个公式用的是latex的split模块,打不了tag,就按照四个等号的顺序从上到下1-4好了。

        先是第1步的推导,这一步可以先不管V_i^TV_j这一项,因此在推导过程中我就省略了。令M=\sum_{i=1}^{n-1}\sum_{j=i+1}^nx_ix_jN=\sum_{i=1}^n\sum_{j=1}^nx_ix_jS=\sum_{i=1}^nx_ix_iS_n=\sum_{i=1}^nx_i,那么要验证的就是M=\frac{1}{2}(N-S)。首先把N拆开,得到:\\\begin{array}{1}N&=x_1\cdot(x_1+x_2+\cdots+x_n)+x_2\cdot(x_1+x_2+\cdots+x_n)+\cdots+x_n\cdot(x_1+x_2+\cdots+x_n)\\&=S_n\cdot S_n\end{array}

然后把M拆开,得到:\\\begin{split}M&=x_1\cdot(S_n-S_1)+x_2\cdot(S_n-S_2)+\cdots+x_{n-1}\cdot(S_n-S_{n-1})\\&=(S_n-x_n)\cdot S_n-\sum_{i=1}^{n-1}(x_i\cdot S_i)\\&=S_n\cdot S_n-\sum_{i=1}^n(x_i\cdot S_i)\end{split}

所以N-M=\sum_{i=1}^n(x_i\cdot S_i),而\begin{split}\sum_{i=1}^n(x_i\cdot S_i)&=x_1\cdot S_1+x_2\cdot S_2+x_3\cdot S_3+\cdots+x_n\cdot S_n\\&=x_1\cdot(x_1)+x_2\cdot(x_1+x_2)+x_3\cdot(x_1+x_2+x_3)+\cdots+x_n\cdot(x_1+x_2+\cdots+x_n)\\&=x_1^2+(x_1x_2+x_2^2)+(x_1x_3+x_2x_3+x_3^2)+\cdots+(x_1x_n+x_2x_n+\cdots+x_n^2)\\&=[(\underline{x_1x_2})+(\underline{x_1x_3}+x_2x_3)+\cdots+(\underline{x_1x_n}+x_2x_n+\cdots+x_{n-1}x_n)]+[x_1^2+x_2^2+\cdots+x_n^2]\\&=M+S\end{split}

进行简单的移项后,即可得到M=\frac{1}{2}(N-S)

        下面的2-4步如果仔细观察就会发现,只是把向量V_i(i=1,2,\cdots,n)拆开了而已,我写这篇文章之前是没想到这一点的...那这篇文章到这里就结束了,告辞。

        更新一波,在用梯度下降更新权值时,分别对三个权重的偏导是这样的:\\\frac{\partial}{\partial\theta}\hat{y}=\left\{ \begin{split}
&1,&{\rm if} \ \theta\ {\rm is}\ \omega_0 \\
&x_i,&{\rm if} \ \theta\ {\rm is}\ \omega_i\\
&x_i\sum_{j=1}^n(v_{j,c}\cdot x_j)-v_{i,c}\cdot x_i^2,\quad&{\rm if}\  \theta\ {\rm is}\ v_{i,c}
\end{split}\right.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335