从FM到DeepFM:浅谈推荐系统中的模型演化

近年来,embedding+DNN的模型组合成为了CTR预估任务的通用框架。本文分析总结一系列相关的模型,包括FM, FNN, PNN, Wide&Deep和DeepFM.

I. Factorization Machine(FM)

1. FM的定义

假设输入特征是n维向量。

FM的公式:

其中, , , 表示向量点乘。

矩阵 中的一行用来表示输入向量的第个变量,的维度为,参数,定义了因子分解的维度。FM可以看做线性部分的LR(包含的项)和非线性的特征组合(包含的项)。特征组合项展开之后就是所有特征()之间的两两相乘,并乘以一个系数。而这里的其实就是embedding size,用维的向量来表达某个输入特征。因此,式(1)是所有特征自身的一阶线性表示以及两两特征之间的二阶交叉表示(即和, )之和。

图 1. FM的结构

2. FM为什么可以描述稀疏特征

  • 为什么稀疏特征难以学习?

对于推荐系统来说,假设输入特征为最简单的user-item组合。并假设输入数据中一共有M个users,N个items,则每个输入向量的特征为M+N,且由于one-hot encoding,每个输入特征中只有2个位置非零,如下表所示:

... ...
... ...
1 0 ... 0 1 0 ... 0
0 1 ... 0 1 0 ... 0
... ... ... ... ... ... ... ...
1 0 ... 0 0 1 0 0
... ... ... ... ... ... ... ...

对于实际问题,输入数据不可能有所有user和所有item的全组合。假如我们需要预测user 对item 的评分,但输入数据中并没有user 对user 的直接评价,这样就会导致无法预测。

这也是协同过滤(Colaborative Filtering)考虑的主要问题。

  • FM为什么可以学习稀疏特征?

在式中,最关键的部分在于第三个交叉项 。这里表示和之间的交互(interaction)FM没有使用独立的参量来表示这一交互,而是选择使用因子相乘的方法来表达。这样不同field之间就可以有交叉。

field的定义:特征种类的个数。如上述例子中有两个field:user和item。

在上述例子中,虽然训练数据中没有对于的评价,但我们可以在学习的过程中,通过其他的输入实例来学习和的值,这样就可以间接地学习到和之间的关系,并作出预测。

II. FM supported Neural Netrowk(FNN)

1. FNN的设计思想

CTR预估任务的输入多为大规模稀疏的,并且包含很多categorical特征,DNN难以直接学习,无法发挥DNN在拟合高阶特征方面的强大作用。因此FNN使用FM来作为embedding模块,将高维度稀疏特征转化为低纬度稠密特征(这也是ctr预估任务引入embedding的前身)。FM可以学习任意两个特征之间的组合,并将其连同一阶特征输出到后面的DNN中,由DNN来学习特征的高阶非线性抽象。

2. FNN的结构

图2.FNN的结构
  • 首先,FNN对输入数据提出了每个field的特征只有一个1,其余元素都是0的强假设。
    从下至上,从到是embedding层,类似于FM的结构。,这里代表embedding层 Field i的输出,可以写作:

    这里, 里每一行的值都是用和来初始化的。被用作上层DNN的输入:
    经过两层FC之后,输出经过sigmoid函数用于预测ctr的值。

  • 将FM的结构用于底层embedding其实是受到了卷积神经网络(CNN)的启发。CNN中使用feature map将空间上相邻的神经元联结起来,这就类似于FM中将不同field的特征互相交叉的过程。此外,FM是Field-wise training for one-hot sparse encoded input. 即将每个特征用其所属的field表示,这种结构可以大大减少输入数据的维度。

  • 参数的值需要预训练一个FM来得到,因此FNN不是一个end-to-end模型。

III. Product-based Neural Networks(PNN)

图 3. PNN的结构

1. 网络结构

PNN的结构和FNN类似,区别在于PNN在 embedding layer和MLP之间加入了一层product layer,这里的embedding layer与FNN中的相同。product layer分为两个部分:左边的是FM一次项的输出,右边的是FM两两交叉项的输出,如下所示:

其中N为输入的field数目。这里是field 的embedding 向量, 而定义了特征的两两交叉项。通过定义不同的, 可以设计出不同的PNN模型。论文中给出了两种:inner product和outer product。这里向量应该有维,和FM中的交叉项类似,为两两不重复交叉(即)。

这里的embedding向量可以写作:

  • 如果将product layer的二次项输出去掉,PNN就等同于FNN。

  • 如果product layer选择inner product,并将PNN的hidden layers(e.g. L1和L2)去掉,同时输出采用相同权重的sum up,则PNN等同于FM。

2. PNN的设计思想

  • PNN使用product layer来探索更多特征交互(feature interaction)的可能性。
  • product layer是做“AND"操作,会更倾向于学习特征间交互的规则(rules)而不是单纯学习特征(features)。由于CTR预测使用的是大规模稀疏网页数据,不同于图像数据那样,相邻的pixel之间都很强的关联性。因此学习数据之间的逻辑(logic)或规则(rules)会显得更有意义,这也是特征交互的体现。
  • 一句话总结:乘比加好!

IV Wide & Deep

1. 设计思想

Google 的 Wide & Deep这篇论文中,首先将推荐系统的任务定义为一个搜索排序过程:给定用户的query,推荐系统要输出一个排好序的item list. 然后提出了两个概念:memorization(记忆性)和generalization(泛化性)。

  • memorization
    指模型学习历史数据中出现过的query-item组合的能力。一般使用线性模型(如logistic regression),搭配特征之间的叉乘(cross-product)来学习;
  • generalization:指模型历史数据中未出现过的新的组合的能力。可以用基于embedding的模型来学习,如FM,DNN等。这些模型会通过embedding将categorical特征映射为低维稠密向量,但其缺点是对于高维稀疏的输入数据,其中的query和item两两之间几乎都没有交叉,但embedding会将所有的query-item pair都映射为低维向量,可能会为用户推荐一些不相关的item。
    Wide & Deep的出发点就是就是将两种结构结合起来,使模型兼具memorization和generalization,并使用联合训练(joint training)的方式完成模型的学习。

2. 模型结构

图4. wide&deep模型结构

这里的Wide需要人工设计特征工程,最主要的就是叉乘变换(cross-product transformation),即将指定的binary特征进行连乘,以捕捉特征之间的交叉关系,为模型加入了非线性。

V. DeepFM

DeepFM是Wide & Deep的升级版,将wide部分用FM来代替,这样就免去了在wide部分人工设计特征交叉,得到一个end-to-end模型,理论上可以学习到所有特征间的interaction。

图5. DeepFM模型结构

VI. 总结

关于CTR预估模型的演变,主要围绕着FM和DNN模型的的不同组合进行,这里对相关概念总结如下

  • Feature interaction(特征交叉/特征组合)

Feature interaction是特征工程中的重要一环。ctr预估任务中,通过将不同类型的特征进行组合,可以发掘出用户不同兴趣的内在关联,有助于更好的预测用户行为。例如在app store的推荐场景中,用户经常在吃饭的时候下载外卖app,说明app类目和time stamp就是两个相关性较强的特征。通过特征交叉将两个特征关联起来会有较好的效果。

在Wide&Deep中,FM部分的输入就经过了人工做叉乘变换(cross-product transformation)来捕捉这种特征组合信息。同时,FM模型本身的输出也包含了不同field特征之间的交叉:. 而DNN的结构可以捕捉到更高阶的特征交叉信息。

  • FM与DNN

FM可以捕捉到低阶的特征交叉,而DNN通过学习embedding向量,可以抽象特征交叉的高阶表示。同时,Wide&Deep论文里提到FM和DNN分别负责memorization(捕捉已有特征组合)和generalization(探索未出现过的特征组合),两者结合起来可以发挥更大的作用。

你可能感兴趣的:(从FM到DeepFM:浅谈推荐系统中的模型演化)