DeepFM

Posted zhiyong_will

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DeepFM相关的知识,希望对你有一定的参考价值。

1. 概述

特征交叉对于CTR问题的求解有着重要作用,纵观CTR模型的发展可以看出,每一次效果的提升,都伴随着对特征的挖掘,尤其是交叉特征。FM[1]算法在线性模型LR的基础上增加了二阶特征的交叉,对LR效果有着显著的提升;随着深度学习的发展,深度模型天然的特征交叉能力,Google的Wide & Deep[2]通过结合Wide模型的记忆能力和Deep模型的泛化能力,充分利用Deep侧的特征交叉能力,然而由于Wide侧使用的依然是线性模型,依赖于人工特征工程的参与。DeepFM[3]是华为在2017年提出的用于求解CTR问题的深度模型,DeepFM是在Google的Wide & Deep模型的基础上,将FM算法引入到Wide侧,替换掉原始的Wide & Deep模型中的LR模型,可以实现端到端的学习特征的交叉,无需人工特征工程的参与。DeepFM模型一经推出,就受到业界很多公司的关注,并在众多互联网公司的多个场景中落地。

2. 算法原理

2.1. DeepFM的网络结构

DeepFM的网络结构如下图所示:


在DeepFM的网络结构中,主要包括四个部分:第一,Embedding层,用于将稀疏的离散特征转换成稠密的特征向量;第二,FM层,用于计算交叉特征,如上图中的左侧部分;第三,DNN部分,与Wide & Deep模型中的Deep侧一致;最后,输出层,融合左侧FM层和右侧DNN部分的输出得到最终的模型输出。

2.2. DeepFM的计算过程

2.2.1. Embedding层

Embedding层的作用是将输入样本中的稀疏特征转化成稠密的特征。假设训练集 ( χ , y ) \\left ( \\chi ,y \\right ) (χ,y)是由 n n n个样本组成,其中特征 χ \\chi χ是由 m m m个域(field)的数据集合,每个域对应了一个离散的特征, y ∈ 0 , 1 y\\in \\left \\ 0,1 \\right \\ y0,1是样本标签。在CTR预测问题的训练集中,通常包含了两类特征,分别为:类别特征和连续特征,对于类别特征,处理方法是使用one-hot对其编码,而对于连续特征,处理方法通常有两种,一种是不进行处理,直接使用连续值,第二种是先对其离散化,再用one-hot编码表示。

通过one-hot编码后,每一个样本 ( x , y ) \\left ( x,y \\right ) (x,y)的特征为 x x x是一个 d d d维的向量,且 x = [ x f i e l d 1 , x f i e l d 2 , ⋯   , x f i e l d j , ⋯   , x f i e l d m ] x=\\left [ x_field_1,x_field_2,\\cdots ,x_field_j,\\cdots ,x_field_m \\right ] x=[xfield1,xfield2,,xfieldj,,xfieldm],其中 x f i e l d j x_field_j xfieldj为特征 χ \\chi χ的第 j j j个域,对于每个域,通过Embedding层将该域中的特征由稀疏的向量转换成稠密的向量,其具体的过程由下图所示:

由上图可知,Embedding的过程是针对每个域单独进行的。为描述简单,假设对于第 j j j个域 x f i e l d j x_field_j xfieldj,假设第 j j j个域的维数是 d j d_j dj,Embedding层的输出为 e j e_j ej,维度为 k k k,假设此处的 k = 5 k=5 k=5,从稀疏特征到Embedding输出可以由下图表示:

上述的映射可以由下述的公式表示:

e j = W j ⋅ x f i e l d j e_j=W_j\\cdot x_field_j ej=Wjxfieldj

其中 W j W_j Wj k × d j k\\times d_j k×dj的矩阵,上述公式同时可以表示为:

W j = ( V 11 V 21 ⋯ V d j 1 V 12 V 22 ⋯ V d j 2 ⋮ ⋮ ⋱ ⋮ V 1 k V 2 k ⋯ V d j k ) W_j=\\beginpmatrix V_11 & V_21 & \\cdots & V_d_j1\\\\ V_12 & V_22 & \\cdots & V_d_j2\\\\ \\vdots & \\vdots & \\ddots & \\vdots \\\\ V_1k & V_2k & \\cdots & V_d_jk \\endpmatrix Wj=V11V12V1kV21V22V2kVdj1Vdj2Vdjk

其中,可以看到:

e j , 1 = V 11 ⋅ x f i e l d j , 1 + V 21 ⋅ x f i e l d j , 2 + ⋯ + V d j , 1 ⋅ x f i e l d j , d j e_j,1=V_11\\cdot x_field_j,1+V_21\\cdot x_field_j,2+\\cdots +V_d_j,1\\cdot x_field_j,d_j ej,1=V11xfieldj,1+V21xfieldj,2++Vdj,1xfieldj,dj

此处的 V 11 V_11 以上是关于DeepFM的主要内容,如果未能解决你的问题,请参考以下文章

DeepFM算法解析及Python实现

DeepFM算法详解-推荐算法中的皇冠

DeepFM

DeepFM

推荐系统DeepFM模型(A Factorization-Machine based Neural Network)

推荐系统DeepFM模型(A Factorization-Machine based Neural Network)