前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >推荐系统(十六)——FM全家桶(1),FM,FFM,DeepFM,NFM,AFM

推荐系统(十六)——FM全家桶(1),FM,FFM,DeepFM,NFM,AFM

作者头像
秋枫学习笔记
发布2022-09-19 11:50:02
9880
发布2022-09-19 11:50:02
举报
文章被收录于专栏:秋枫学习笔记

因子分解机(Factorization Machines,FM)及其变种已经在推荐系统中得到了广泛的应用,本文就FM的系列模型进行简单总结。

FM

早期用的比较多的是通过协同过滤基于相似的item或相似的user进行推荐,但是协同过滤中用到的矩阵是非常稀疏的,因此后续提出用MF,通过矩阵分解来得到稠密的向量。后续又提出了采用例如LR逻辑回归,或者用GBDT+LR来更充分的利用特征。如果使用LR,我们可以得到如下模型:

y=\sum_{i=1}^N{w_ix_i}+b

由上式可知,x和y之间是线性关系,没有考虑特征与特征之间的关系。因此FM通过显示的组合来构造二阶特征,如下式:

y=\sum_{i=1}^N{w_ix_i}+b+\sum_{i=1}^{N-1}{\sum_{j=i+1}^N{w_{ij}x_ix_j}}

式中第三部分就是显示的构建特征中第i个位置和第j个位置的组合特征。通过两两组合发掘特征之间的规律。

问题

  • 复杂度过高,如果原始特征为n,第三部分的复杂度就是
n^2

  • 特征通常是比较稀疏的,如果直接进行组合计算,其中会有很多部分是0,导致训练的
w_{ij}

矩阵结果较差。

改进

改进后的式子如下:

y_{F M}=\langle w, x\rangle+\sum_{j_{1}=1}^{d} \sum_{j_{2}=j_{1}+1}^{d}\left\langle V_{i}, V_{j}\right\rangle x_{j_{1}} \cdot x_{j_{2}}

改进点就是将之前的w改为用向量乘法来得到,例如w的大小为

n*n

,则改为用

n*k

的矩阵v来计算得到,

v*v^T->(n,k)*(k,n)->n*n

其中k小于n,这样相当于将原有

n*n

的矩阵缩小为

n*k

的矩阵,减少了训练的参数。原来的式子,

x_px_i,x_px_j

对应的权重分别为

w_{pi},w_{pj}

,这两个参数之间是相互独立的,在稀疏数据中难以学习到较好的值,而现在对应的权重变为

\left\langle v_p,v_i \right\rangle

,

\left\langle v_p,v_j\right\rangle

权重之间存在共同项

v_p

,能更好地在稀疏数据上学习。

时间复杂度的改进: 到现在为止,FM的第三项的计算复杂度

k*n*n

,复杂度还是很高,作者又对其进行了改进。通过下式推导,可以得到改进后的时间复杂度

k*n

。第一个等式:因为矩阵是对称的,因此上三角和下三角一样,因此可以通过整个矩阵的计算的值减去对角线的计算值,再除以2。后续等式就是各项的展开和合并。

\begin{array}{l} \sum_{i=1}^{n} \sum_{j=i+1}^{n}\left\langle v_{i}, v_{j}\right\rangle x_{i} x_{j} \\ =\frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n}\left\langle v_{i}, v_{j}\right\rangle x_{i} x_{j}-\frac{1}{2} \sum_{i=1}^{n}\left\langle v_{i}, v_{i}\right\rangle x_{i} x_{i} \\ =\frac{1}{2}\left(\sum_{i=1}^{n} \sum_{j=1}^{n} \sum_{f=1}^{k} v_{i, f} v_{j, f} x_{i} x_{j}-\sum_{i=1}^{n} \sum_{f=1}^{k} v_{i, f} v_{i, f} x_{i} x_{i}\right) \\ =\frac{1}{2} \sum_{f=1}^{k}\left(\left(\sum_{i=1}^{n} v_{i, f} x_{i}\right)\left(\sum_{j=1}^{n} v_{j, f} x_{j}\right)-\sum_{i=1}^{n} v_{i, f}^{2} x_{i}^{2}\right) \\ =\frac{1}{2} \sum_{f=1}^{k}\left(\left(\sum_{i=1}^{n} v_{i, f} x_{i}\right)^{2}-\sum_{i=1}^{n} v_{i, f}^{2} x_{i}^{2}\right) \end{array}

FM的优点

  • 考虑交叉特征,从而进一步的考虑了特征之间的关系
  • 采用矩阵分解的方式,使模型能够在稀疏数据上训练,并且具有较好的泛化性
  • 降低了时间复杂度

FFM

FFM为Field FM,在原始FM的基础上进行了改进。主要是提出了Field的概念,将不同的特征进行归类,即属于不同的Field。先给出它的公式,后面我们再进行解释。

y=\sum_{i=1}^{N} w_{i} x_{i}+b+\sum_{i=1}^{N-1} \sum_{j=i+1}^{N}\left\langle v_{i, f_{j}}, v_{j, f_{i}}\right\rangle x_{i} x_{j}

可以发现FFM和FM的公式中唯一不同的就是第三项中的v矩阵。

  • 首先来简单解释一下这个Field的概念,举个例子就是在推荐系统模型构建的时候我们会涉及user的特征和item的特征,我们可以将user的特征归为一个field,item的特征归为另一个field。当然也可以细分,比如将交易数据的特征分为卖方field,买方field等等。
  • 那么为什么要分这些field呢?这里作者主要考虑的是,对于不同域之间的特征所对应的权重应该是不同的。栗子:
x_ix_j,x_ix_k

这两种特征有一个共同项

x_i

,他们组合的时候所对应的

v_i

是一样的。是的,当

x_i

和所有其他特征组合时,他所用到的向量都是

v_i

。那么FFM就是考虑到让不同域之间的特征组合的时候更细致,更多样。因此,当

x_i

和不同域之间的特征进行组合时,所用到的v就不一样了。

注意点:

  • 复杂度为
k*n*n
  • 需要注意过拟合问题,因为参数量较大。

DeepFM

深度学习已经在很多领域都得到了广泛的应用,而DeepFM就是将DNN和FM进行结合,利用FM来学习低阶交叉特征,用DNN来学习高阶复杂的特征关系。如下图所示,左边部分为FM部分,右边部分为DNN部分,将embedding后的特征用于FM和DNN,最后将FM的结果和DNN的结果组合后通过sigmoid计算点击率。

AFM

AFM即attention FM,基于注意力机制的FM,其总体结构如上图所示。主要包括embedding layer,pair-wise intersection layer和attention-based pooling。embedding layer主要就是将输入的特征向量转换为embed向量。

Pair-wise Intersection Layer

这一层主要是做哈达玛积,即主元素相乘。

f_{PI}()={(v_iv_j)x_i\odot x_j}_{(i,j)\in R_x}

,不同特征向量之间两两组合。如果输入n个向量,则输出n*(n-1)/2个向量。所谓交互层,就是两两之间组合。

Attention-based Pooling

这里的pooling层,其实就是计算经过交互层后得到的输出的注意力权重,然后用权重对其加权,使得向量不同位置的值对应不同的权重。attention层的设计如下所示:

\begin{aligned} a_{i j}^{\prime} &=\mathbf{h}^{T} \operatorname{Re} L U\left(\mathbf{W}\left(\mathbf{v}_{i} \odot \mathbf{v}_{j}\right) x_{i} x_{j}+\mathbf{b}\right) \\ a_{i j} &=\frac{\exp \left(a_{i j}^{\prime}\right)}{\sum_{(i, j) \in \mathcal{R}_{x}} \exp \left(a_{i j}^{\prime}\right)} \end{aligned}

其中h,w,b是可学习参数,通过单层MLP后经过softmax归一化得到权重,对于attention就不赘述了。

总体损失函数

\hat{y}_{A F M}(\mathbf{x})=w_{0}+\sum_{i=1}^{n} w_{i} x_{i}+\mathbf{p}^{T} \sum_{i=1}^{n} \sum_{j=i+1}^{n} a_{i j}\left(\mathbf{v}_{i} \odot \mathbf{v}_{j}\right) x_{i} x_{j}

其中p为可学习参数,可以发现该损失函数和FM的区别也是在第三项,在特征交叉的过程中加入了注意力机制进行权重调节,值得不同的特征交互具有不同的权重,以此表示不同的特征交互的作用是不同的。可以把AFM看成是在NFM上的改进,NFM的创新之处是加入了交互层,进行哈达玛积计算。这里就不介绍NFM了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 秋枫学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • FM
    • 问题
      • 改进
        • FM的优点
        • FFM
          • 注意点:
          • DeepFM
          • AFM
            • Pair-wise Intersection Layer
              • Attention-based Pooling
                • 总体损失函数
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档