前言

因子分解机 (Factorization Machines) 是CTR预估的重要模型之一。自2010年被提出后,得到了大规模的应该,也是美团和头条做推荐CTR预估的方法之一。要讲述因子分解机FM,就避不开逻辑回归LR(logistic Rgeression)和矩阵分解MF(Matrix Factorization)。那么本篇文章将会涉及到因子分解机的演变过程,公式推导以及求解因子分解机。

逻辑回归和矩阵分解的原理和推导我们在之前的文章中介绍过,有需要的朋友关注我的专栏:

推荐系统初级玩家​zhuanlan.zhihu.com

1.因子分解机的演变

传统的推荐模型

上图是传统的推荐系统模型的分类,逻辑回归LR模型在传统的推荐模型中占据着非常重要的位置。而因子分解机的出现,也来源于逻辑回归和矩阵分解的演化。

首先我们知道,逻辑回归的是对所有特征的一个线性加权组合, 然后再加入Sigmoid逻辑函数:

对比与矩阵分解,虽然逻辑回归模型已经不单单考虑了用户的行为特征,也可以加入年龄,性别,物品的属性,时间,地点等等特征。但是逻辑回归表达能力仍然差的原因是仅仅用了每个单一的特征,而没有考虑到特征之间的关系

那有没有模型可以加入特征之间的联系呢?

POLY2模型(Degree-2 Polynomial Margin)则在LR的基础上采用了一种暴力的特征组合模式,即将所有特征两两相交,因此原来的LR模型就变成了:

其中

是特征组合
的权重。

也就是说,POLY2模型将所有的特征两两相交,暴力的组合了特征。这样以来,就增加了特征的维度,考虑到了特征之间的关系。但是同时,暴力的组合带来的是维度的增加。在机器学习中,我们普遍使用One-hot编码,这样的暴力组合,就使得复杂度从

上升到了
, 特征维度也上升,同时数据极度稀疏,在训练过程中很难收敛。

那么有没有方法可以处理稀疏数据,同时保持特征之间的联系呢?

2.因子分解机

用户对电影打分的onehot编码

上图是电影背景下,用户对电影打分的onehot编码形式。每行代表一个样本,每列都代表一个特征。同时特征可以分为五个部分:用户ID,电影ID,用户对其他电影的打分(归一化),时间信息,以及对上一次电影的打分。

首先我们直观的看下,为什么POLY2模型在很多情况下是不适用的。

POLY2模型的表达式如上,

是常数项,
是一阶特征的系数,
是二阶特征的系数,也就是交叉特征的系数。而由于在数据中,不是每个特征组合都有相互作用,因此,
可能会为0。

举个例子来说,如上图中,我们要估计用户A对电影ST星际迷航(Star Trek)的相互作用,来预测A都ST的打分。显然,上图中A列乘以ST列是等于0的。也就是说,交叉项

为0了,那么对应的
在梯度更新时,
,因此也就会导致
的训练不充分且不准确,进而影响模型的效果。

因此,因子分解机的应运而生。

因子分解机的优势是为每个特征学习了一个隐权重向量(latent vector),在特征交叉的时候,用这两个特征隐向量内积作为交叉特征的权重。如何理解这个含义呢?

在这里我们就要提一嘴矩阵分解。矩阵分解其实是将一个稀疏矩阵R分解为两个矩阵内积的形式,通过内积回乘,就能够得到一个满秩的矩阵。如果是电影的评分矩阵,也就是可以对未知的电影评分进行预测。具体可以看这篇文章:

推荐系统玩家:推荐系统玩家 之 矩阵分解(Matrix Factorization)的基本方法 及其 优缺点​zhuanlan.zhihu.com

而因子分解机FM就是在POLY2模型的基础上,融合了矩阵分解的思想。即,对二阶交叉特征的系数以矩阵分解的方式调整,让系数不再是独立无关的,同时解决数据稀疏导致的无法训练参数的问题:

其中,

是一个
的向量矩阵,n是特征
的个数,
是个待确定的参数。
表示点乘,即向量对应位置乘积的和

由矩阵分解可知,对任意一个正定矩阵

,都可以找到一个矩阵
,且在矩阵
维度
足够大的情况下使得
成立。因此,通过矩阵分解用两个向量
的内积近似原先矩阵

其次,在拆解为

之后,参数更新时是对这两个向量分别更新的,那么在更新时,对于向量
,我们不需要寻找到一组
同时不为0,我们只需要在
的情况下,找到任意一个样本
即可通过
来更新

我们举个例子来理解下上面的定义:

在商品推荐的场景下,样本有两个特征,分别是类品和品牌。某个训练样本的特征组合是(足球,阿迪达斯)。在POLY2模型中,只有当“足球”和“阿迪达斯”同时出现在一个训练样本中时,模型才能够学到这个组合特征对应的权重。而在因子分解机FM中,“足球”的的隐向量也可以根据(足球,耐克)进行更新。“阿迪达斯”的隐向量也可以根据(篮球,阿迪达斯)更新,由此一来,就大幅度的降低了模型对稀疏性的要求。

更极端的情况,对于一个从未出现的组合(篮球,耐克),因为模型已经学习了“篮球”和“耐克”的隐向量,因此就具备了更新权重

的能力,使其泛化能力大大提高。

3.降低时间复杂度

公式(3)的时间复杂度为

, 我们可以对二阶交叉特征进行化简,使时间复杂度降低到

首先矩阵A中的上三角,红色方框部分代表公式(6),也就是因子分解机中二阶交叉项部分。由图可以看出,他是矩阵的全部元素减去对角线元素之和得到的, 即:

其中,

是矩阵全部元素之和。
代表对角线元素之和。

因为 :

因此继续化简:

那么,因子分解机的二阶表达式就为:

其复杂度为

。考虑到特征的稀疏性,尽管
可能很大,但很多
都是零。因此其实际复杂度应该是
,其中
表示样本不为零的特征维度数量的平均值。

4.因子分解机FM求解

我们对公式(8)求偏导,可以计算因子分解模型对参数的梯度:

  • 当参数为

    时:
  • 当参数为

    时,只跟它相关的
    有关:

当参数为

时:

因此,因子分解机FM模型对参数的梯度为

5.损失函数选取及算法流程

至此,我们就推导出了因子分解机的表达式以及参数的梯度。那么,损失函数在这里我们以以下两个为例, 并用梯度下降法求解:

回归问题:平方差损失函数

求偏导得:

平方损失函数的梯度为:

分类问题:对数损失函数

其中:

对数函数下的梯度为:

算法流程(以对数损失函数为例)

  1. 初始化权重

    和矩阵
  2. 对每一个样本:

对特征

:

3. 重复步骤2,直到满足终止条件。


至此,因子分解机FM的原理就梳理完了。如果想了解梯度下降的朋友可以继续看这篇:

推荐系统玩家:推荐系统玩家 之 随机梯度下降(Stochastic gradient descent)求解矩阵分解​zhuanlan.zhihu.com

保持函数依赖的模式分解可以减轻或解决什么_推荐系统玩家 之 因子分解机FM(Factorization Machines)...相关推荐

  1. 保持函数依赖的模式分解可以减轻或解决什么_为什么我更喜欢函数式编程?

    作者 | Mario Morgenthum 译者 | 平川 编辑 | 陈思 AI 前线导读:在学习 Haskell 之前,作者一直使用主流语言,如 Java.C 和 C++--现在他仍然喜欢它们.那么 ...

  2. 推荐系统入门(三):矩阵分解MF因子分解机FM(附代码)

    推荐系统入门(三):矩阵分解MF&因子分解机FM(附代码) 目录 推荐系统入门(三):矩阵分解MF&因子分解机FM(附代码) 一. 矩阵分解MF 1. 隐含语义分析技术 1.1 隐语义 ...

  3. 推荐系统学习笔记之四 Factorization Machines 因子分解机 + Field-aware Factorization Machine(FFM) 场感知分解机

    前言 Factorization Machines(FM) 因子分解机是Steffen Rendle于2010年提出,而Field-aware Factorization Machine (FFM) ...

  4. 【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)

    关系数据理论 6.1 为什么要学习关系数据理论 什么是好的数据库逻辑设计 什么是数据依赖 关系模式的简化表示 6.2 规范化 - 关系的规范化理论 6.2.1 函数依赖 1.函数依赖 2.平凡函数依赖 ...

  5. 推荐系统中的矩阵分解| 奇异值分解及改进、因子分解机

    网络中的信息量呈现指数式增长,随之带来了信息过载问题.推荐系统是大数据时代下应运而生的产物,目前已广泛应用于电商.社交.短视频等领域.本文将针对推荐系统中基于隐语义模型的矩阵分解技术来进行讨论. 目录 ...

  6. 函数依赖和关系模式分解

    文章目录 一,第一范式 二,关系数据库设计中易犯的错误 2.1 数据冗余 2.2 插入.删除.修改异常 三,模式分解(I) 四,函数依赖(FD) 4.1 什么是函数依赖 4.2 函数依赖的使用 4.3 ...

  7. 数据库中的模式分解与无损连接性

    无损连接分解的普通判别方法--表格法 设关系模式R=A1,-,An,R上成立的FD集F,R的一个分解p={R1,-,Rk}.无损连接分解的判断步骤如下: (1)构造一张k行n列的表格,每列对应一个属性 ...

  8. 判断模式分解是否为无损连接的方法

    判断模式分解是否为无损连接的方法 [方法步骤] ρ = { R1<U1 , F1> , R2<U2 , F2> , - , Rk<Uk , Fk> } 是关系模式 ...

  9. 模式分解的无损连接性之深入剖析

    1.无损连接分解的形式定义 无损连接分解的形式定义如下:设R是一个关系模式,F是R上的一个函数依赖(FD)集.R分解成数据库模式δ={R1,--,Rk}.如果对R中每一个满足F的关系r都有下式成立: ...

最新文章

  1. 使用alterMIME实现添加message footer功能
  2. linux nagios 检查udp端口,nagios插件之监控udp端口状态
  3. MySQL数据库同步小工具(Java实现)
  4. 还有多少时间可以用来读书
  5. 脑部手术成功,只是万里长征走完了第一步
  6. linux mysql make_二、linux-mysql -cmake方式安装mysql 5.5
  7. 利用Python来玩扫雷,极致的思维体验
  8. I00006 打印等腰三角形字符图案(底边在下)
  9. 【转】HTTP请求中的form data和request payload的区别
  10. “一夜成名”需要多久?他花了20年!
  11. c语言通讯录整体设计论文,通讯录管理系统的设计与实现
  12. laypage分页java例子_总结laypage.js分页插件用法
  13. 计算机控制系统中的Z变换
  14. 电子元器件商城与数据手册下载网站汇总
  15. 我的第一本书《FFmpeg音视频开发基础与实战》已正式出版
  16. JavaScript中canvas绘制太极图案
  17. java植物大战僵尸_JAVA课程设计——植物大战僵尸(团队)
  18. revit里的BIM模型转fbx真的可以带纹理材质吗?
  19. 十行代码写个摸鱼神器,帮你自动化操作Excel
  20. 联想服务器安装系统蓝屏怎么办,联想电脑装系统出现蓝屏怎么办

热门文章

  1. 使用qsort对不连续的内存数据排序_数据结构教程_v20201121
  2. java综合面试题_JAVA 综合面试题 PDF 下载
  3. 一网打尽,最全面的跨域解决方案来了!
  4. Java 集合系列11: Hashtable深入解析(1)
  5. 蓝桥杯java第三届决赛第四题--DNA比对
  6. oracle安装及使用常见错误
  7. Dijkstra模板(java)
  8. 蓝桥杯 大臣的旅费(Java dfs)
  9. Java的数组集合概括
  10. 数据结构之数组、链表、栈和队列