Factorization Machine Model

如果仅考虑两个样本间的交互, 则factorization machine的公式为:

$\hat{y}(\mathbf{x}):=w_0 + \sum_{i=1}^nw_ix_i + \sum_{i=1}^n\sum_{j=i+1}^n<\mathbf{v}_i, \mathbf{v}_j>x_ix_j$

其中的参数为

$w_0 \in \mathcal{R}, \mathbf{w}\in\mathbb{R}^n,\mathbf{V}\in\mathbb{R}^{n\times k}\tag{1}$

$\mathbf{v_i}$是样本$i$的向量表示, 维度为$k$, 两个向量的点积越大, 表示这两个样本越相似.

2路FM(2-way FM)捕获了样本自身以及样本之间的交互, 详解如下

$w_0$是全局偏置

$w_i$是第$i$个样本的强度

$\hat{w}_{i,j}:=<\mathbf{v}_i, \mathbf{v}_j>$代表第$i$个样本和第$j$个样本的交互. 与其为每个样本对都设置一个参数$w_{i,j}$, FM模型将其分解成两个向量之间的乘积.

通常来说, 对于任一正定矩阵$\mathbf{W}$,  只要$k$充分大, 都可以找到一个矩阵$\mathbf{V}$使得 $\mathbf{W}= \mathbf{V} \cdot \mathbf{V}^t$. 然而如果数据比较稀疏, 因为数据量不够估计复杂的交互矩阵$\mathbf{W}$, 通常需要选择小一点的$k$. 而FM把这种交互分解后, 会学习的更好, 因为FM通过分解来打破了交互之间的依赖性, 减少了参数. 下图是一个用于预测用户对电影打分的数据集:

易知$(1)$式的计算复杂度为$\mathit{O}(kn^2)$, 但是其可以做如下化简:

$\sum_{i=1}^n\sum_{j=i+1}^n<\mathbf{v}_i, \mathbf{v}_j>x_ix_j$

$=\frac{1}{2}\sum_{i=1}^n\sum_{j=1}^n<\mathbf{v}_i,\mathbf{v}_j>x_ix_j - \frac{1}{2}\sum_{i=1^n}<\mathbf{v}_i, \mathbf{v}_j>x_ix_j$

$=\frac{1}{2}\left(\sum_{i=1}^n\sum_{j=1}^n\sum_{f=1}^kv_{i, f}v_{j, f}x_ix_j - \sum_{i=1}^n\sum_{f=1}^kv_{i,f}v_{i,f}x_ix_i\right)$

$=\frac{1}{2}\sum_{f=1}^k\left(\left(\sum_{i=1}^nv_{i, f}x_i\right)\left(\sum_{j=1}^nv_{j,f}x_j\right) - \sum_{i=1}^nv_{i, f}^2x_i^2\right)$

$=\frac{1}{2}\sum_{f=1}^k\left(\left(\sum_{i=1}^nv_{i, f}x_i\right)^2 -\sum_{i=1}^nv_{i, f}^2x_i^2\right)$

根据上述化简, $(1)$式的计算复杂度可以变为$\mathit{O}(kn)$

FM可以用作回归, 二分类以及排序. 为了防止过拟合, 最好添加$\mathcal{L}_2$正则化项.

  • 回归  直接使用MSE作为Loss
  • 二分类 使用hinge loss或者logit loss.
  • 排序 对样本对$(\mathbf{x}^{(a)}, \mathbf{x}^{(b)})$进行优化, 使用pairwise的分类loss

模型学习

FM的参数$(w_o, \mathbf{w}, \mathbf{V})$可以通过梯度下降方法来学习, 比如SGD.

$\frac{\partial}{\partial \theta}=\begin{cases} 1 & if \hspace{2 pt}\theta \hspace{2 pt}is \hspace{2 pt}w_0 \\ x_i, & if \hspace{2 pt}\theta \hspace{2 pt}is \hspace{2 pt}w_i \\ x_i\sum_{j=1}^nv_{j, f}x_j - v_{i, f}x_i^2, & if \hspace{2 pt}\theta \hspace{2 pt}is\hspace{2 pt} v_{i, f}\end{cases}$

其中$\sum_{j=1}^nv_{j, f}x_j$独立于$i$, 可以提前计算. 所以所有的梯度都可以在$\mathit{O}(1)$时间内计算得到, 而每个样本的参数更新可以在$\mathit{O}(kn)$内完成.

2路FM可以扩展到k路:

$\hat{y}(x):=w_0 + \sum_{i=1}^nw_ix_i + \sum_{l=2}^d\sum_{i_1=1}^n\dots\sum_{i_l=i_{l-1}+1}^n\left(\prod_{j=1}^lx_{i_{j}}\right) \left(\sum_{f=1}^{k_l}\prod_{j=1}^lv_{i_j, f}^{(l)}\right)$

参考文献:

[1]. Factorization Machines. Steffen Rendle. ICDM 2010.

[2]. From Matrix Factorization to Factorization Machine.

Factorization Machine的更多相关文章

  1. Factorization Machine因子分解机

    隐因子分解机Factorization Machine[http://www. w2bc. com/article/113916] https://my.oschina.net/keyven/blog ...

  2. 3.1、Factorization Machine模型

    Factorization Machine模型 在Logistics Regression算法的模型中使用的是特征的线性组合,最终得到的分隔超平面属于线性模型,其只能处理线性可分的二分类问题,现实生活 ...

  3. Factorization Machine算法

    参考: http://stackbox.cn/2018-12-factorization-machine/ https://baijiahao.baidu.com/s?id=1641085157432 ...

  4. AI Factorization Machine(FM)算法

    FM算法 参考链接: https://www.csie.ntu.edu.tw/~b97053/paper/Rendle2010FM.pdf

  5. 3.2、Factorization Machine实践

    1.在上一篇博客中我们构建度为二的因子分解机模型,这篇博客对这个模型进行实践 下图为准备的数据集: 完整代码为: # -*- coding: UTF-8 -*- # date:2018/6/6 # U ...

  6. FM算法

    1.FM背景 在计算广告中,CTR预估(click-through rate)是非常重要的一个环节,因为DSP后面的出价要依赖于CTR预估的结果.在前面的相关博文中,我们已经提到了CTR中相关特征工程 ...

  7. COS访谈第十八期:陈天奇

    COS访谈第十八期:陈天奇 [COS编辑部按] 受访者:陈天奇      采访者:何通   编辑:王小宁 简介:陈天奇,华盛顿大学计算机系博士生,研究方向为大规模机器学习.他曾获得KDD CUP 20 ...

  8. ML学习分享系列(2)_计算广告小窥[中]

    原作:面包包包包包包 改动:寒小阳 && 龙心尘 时间:2016年2月 出处:http://blog.csdn.net/Breada/article/details/50697030 ...

  9. AFM论文精读

    深度学习在推荐系统的应用(二)中AFM的简单回顾 AFM模型(Attentional Factorization Machine) 模型原始论文 Attentional Factorization M ...

随机推荐

  1. Nginx学习笔记(九) 配置文件详细说明

    配置文件详细说明 工作了几个月要开始做一些后台开发,免不了接触nginx,以前一般只是简单的使用,更多的分析内部模块的具体实现,为了部署需要进一步掌握配置方法. 全局配置信息 #nginx worke ...

  2. 网站标题ico那些事

    浏览器打开一个网页都会有一个标题,用来显示当前页面的相关内容,如网站名称或者一篇文章的大标题,而定义它应该显示啥的话完全由HTML中title标签的内容决定. 如我们的大博客园:

  3. paip.语义分析--单字动词表.txt

    paip.语义分析--单字动词表.txt 排除重复  select * from t where word in (SELECT word from t_a)  or   word in (SELEC ...

  4. atitit.避免NullPointerException 总结and 最佳实践 o99

    atitit.避免NullPointerException 对于返回集合的方法很简单,只需要返回空的集合就可以了,而不是null. 1 一种可选办法就是不使用空返回值,而是空对象模式: 1 直接抛出e ...

  5. Leetcode 125 Valid Palindrome 字符串处理

    题意:判断字符串是否是回文字符串 先将所有的字母和数字字符保留,并将大写字母转化成小写字母,然后将字符串倒置,比较前后两个字符串是否相同. 该题最好的解法可以模仿 Leetcode 345 Rever ...

  6. 详解Bootstrap缩略图组件及警示框组件

    缩略图组件 缩略图在网站中最常用的就是产品列表页面,一行显示几张图片,有的在图片底下带有标题.描述内容.按钮等信息.bootstrap框架将这部分独立成一个模块组件,通过类名.thumbnail配合b ...

  7. Lucene 4.X 倒排索引原理与实现: (1) 词典的设计

    词典的格式设计 词典中所保存的信息主要是三部分: Term字符串 Term的统计信息,比如文档频率(Document Frequency) 倒排表的位置信息 其中Term字符串如何保存是一个很大的问题 ...

  8. pip install使用豆瓣源

    这个是老问题了 pip install -i https://pypi.douban.com/simple/ selenium 类似的,npm和gem安装的时候可以使用淘宝源.

  9. C# 匿名委托、匿名方法、匿名对象、Lambda表达式

    一.匿名类型可通过使用 new 运算符和对象初始值创建匿名类型.示例:var v = new { Name = "Micro", Message = "Hello&quo ...

  10. BW CUBE 数据的聚集和压缩

    大家都知道,压缩和聚集都是提高bw性能的方法,在新版bw里,压缩名称改成了折叠,聚集放在了滚动菜单里---集合.那么我们在使用这两种方法时需要注意的先创建聚集以后,再进行压缩,因为压缩的过程是把F表的 ...