DeepFM

DeepFM

  • 在前面一篇文章中提到,目前遇到特征组合的问题,主流做法主要会分成两类:FM系列、DNN系列。
  • 关于DNN相关内容,是深度学习基础知识,本处不展开介绍,直接使用。本文主要介绍FM+DNN的结合体:DeepFM相关内容。
  • 文章依旧主要从三方面展开对FM算法介绍
    • When – 什么时候需要考虑DeepFM算法
    • What – 究竟什么是DeepFM算法
    • How – DeepFM怎么使用

1. When

什么时候需要考虑DeepFM

  • 基于CTR预估的推荐系统,究其根本,其实是学习到用户点击行为背后隐含的特征组合。在各种各样的推荐场景中,低阶特征组合或者高阶的特征组合都会对最终用户的行为产生影响。

  • 之前介绍的FM通过对每一维特征的隐变量内积提取特征组合,最终结果还算不错。

  • 虽然理论上FM可以对高阶特征组合进行建模,可是因为计算复杂度的原因一般到二阶的特征组合就结束。

  • 那么高阶特征该怎么办呢,此时你应该会和很多大牛的想法一样,通过多层的神经网络去解决

1.1 DNN的局限性

以下图片内容参考自张俊林教授在AI大会上的分享

我们知道,对于离散特征的处理,一般都是把特征转换为one-hot编码形式,不过把one-hot编码类型的特征输入到DNN中,会导致网络参数过多:

image-20210305182007165

就如上图,从输入层到隐藏层,将会产生50亿的参数。

解决上面这个问题的方法是:把特征分为不同的field,从one-hot变成dense vector:
image-20210305182339599

然后再添加两层全连接层,让其和dense vector进行组合,此时高阶特征的组合就搞定了

img

不过上面方式把低阶和高阶特征组合隐含的体现在隐藏层中,如果我们希望把低阶特征组合单独建模,然后融合高阶特征组合。又该怎么做呢?

img

1.2 模型融合方式

此时,我们能想到的就是把

DNN与FM进行一个合理的融合:

img

二者的融合总的来说有两种形式,一是串行结构,二是并行结构。

融合方式一:并行结构

image-20210305182948505

融合方式二:串行结构

image-20210305183159763

而我们今天要讲到的DeepFM,就是并行结构中的一种典型代表

2. What

究竟什么是DeepFM算法

2.1 简单介绍

DeepFM是2017年华为诺亚方舟实验室发表的一篇论文。

论文链接:https://arxiv.org/pdf/1703.04247.pdf

DeepFM整体结构:

image-20210305195016766

根据上图,我们把图像分成左半部分和右半部分,其实**这也就是DeepFM包含的两部分:DNN部分和FM部分,其中DNN部分负责高阶特征的提取,FM部分负责低阶特征的提取。**这两部分共享同样的输入。

2.2 模型细节

接下来,我们从下往上,分别看一下组成DeepFM的各个部分。

a) 架构间参数的传递

联合

架构间参数的传递,有几处需要注意,尤其是上面标记红色圈中部分。

  • 其中1中,是针对不同特征做的embedding【FM的二阶两两交互计算部分和 deep部分是共享这个embedding结果的】
  • 2是FM的一阶计算部分【使用权重直接对原始特征做的一阶计算】
  • 3是对应FM的二阶计算阶段,对经过权重embedding的结果做二阶交叉计算
  • 4是deep部分的全连接计算部分,使用神经网络进行计算

b) FM计算的过程

image-20210305202257417

FM的计算公式,我们在之前文章中讲过,此处拿来直接使用:

y^(x)=w0+i=1nwixi+i=1nj=i+1n<vi,vj>xixj\hat{y}(x) = w_0+\sum^{n}_{i=1}{w_ix_i}+\sum^{n}_{i=1}{\sum^{n}_{j=i+1}{<v_i,v_j>x_ix_j}}

  • 上公式中,第一项和第二项公式对应上面标圈部分1的内容,即:

    w0+i=1nwixiw_0+\sum^{n}_{i=1}{w_ix_i}

  • 公式中第三项公式对应上面标圈部分2的内容,即:

    i=1nj=i+1n<vi,vj>xixj\sum^{n}_{i=1}{\sum^{n}_{j=i+1}{<v_i,v_j>x_ix_j}}

c) DNN部分

image-20210305203403298

DNN是一个前馈神经网络。与图像或者语音这类输入不同,图像语音的输入一般是连续而且密集的,然而用于CTR的输入一般是极其稀疏的。因此需要重新设计网络结构。具体实现中为,在第一层隐含层之前,引入一个嵌入层来完成将输入向量压缩到低维稠密向量。

image-20210305203527570

嵌入层(embedding layer)的结构如上图所示。当前网络结构有两个特性:

  • 1)尽管不同field的输入长度不同,但是embedding之后向量的长度均为K。
  • 2)在FM里得到的隐变量VikV_{ik}现在作为了嵌入层网络的权重。

d) DeepFM预测结果输出

最后,上DeepFM中FM和DNN预测结果的输出方式:

y^=sigmoid(yFM+yDNN)\hat{y}=sigmoid(y_{FM}+y_{DNN})

3.How

DeepFM怎么使用

推荐百度官方基于paddlepaddle实现框架:

Ps:参考readme运行一遍就搞定。

参考资料:

资料一:https://arxiv.org/pdf/1703.04247.pdf

资料二:https://zhuanlan.zhihu.com/p/67795161

资料三:http://wiki.baidu.com/pages/viewpage.action?pageId=765563246

资料四:https://github.com/PaddlePaddle/models/tree/develop/PaddleRec/ctr/deepfm_dygraph


DeepFM
http://sherwinzhang.com/机器学习/ML/DeepFM/
作者
sherwin
发布于
2021年4月9日
许可协议