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. 在console中输出图片

    console.log("%c\n ","font-size:81px;background:url('http://www.baidu.com/img/bdlogo.g ...

  2. java-java runtime 入门

    1.内存管理:Java提供了无用单元自动收集机制.通过totalMemory()和freeMemory()方法可以知道对象的堆内存有多大,还剩多少.Java会周期性的回收垃圾对象(未使用的对象),以便 ...

  3. 一句话在网页右上角加一个精致下拉框:forkme on github

    随着我国科技水平不断发展,玩Github的童鞋越来越多了,按照惯例,开源项目会有一个示例网站,而网站的右上角,通常会有一个forkme on github,这说明你可以去Github查看.下载项目源码 ...

  4. jenkins2 Jenkinsfile和load

    更复杂的pipeline实例,使用了Jenkinsfile和load. 文章来自:http://www.ciandcd.com 文中的代码来自可以从github下载: https://github.c ...

  5. Nodejs学习笔记(八)--- Node.js + Express 实现上传文件功能(felixge/node-formidable)

    目录 前言 formidable简介 创建项目并安装formidable 实现上传功能 运行结果 部分疑惑解析 写在之后 前言 前面讲了一个构建网站的示例,这次在此基础上再说说web的常规功能---- ...

  6. paip.提升性能---list,arraylist,vector,linkedlist,map的选用..

    paip.提升性能---list,arraylist,vector,linkedlist,map的选用.. arraylist,vector基本一样,但是,vector线程安全的. 作者Attilax ...

  7. iOS开发之静态库(六)—— 时空之争

    前面的所有试验中,我们的静态库都支持了所有可能的指令集(i386, x86_64, armv7, armv7s, arm64),最大限 度的匹配了所有可能运行该代码的设备,使代码在当前存在的几乎所有i ...

  8. MF-800U

    MF-800U 价格:200元左右 https://item.taobao.com/item.htm?spm=a230r.1.14.6.kfkqoY&id=4963072384&ns= ...

  9. MAT(Memory Analyzer Tool)工具入门介绍(转)

    1.MAT是什么? MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速.功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗 ...

  10. Java 定时任务

    control 类 Date nowDate = new Date(); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH: ...