近年来,embedding+DNN的模型组合成为了CTR预估任务的通用框架。本文分析总结一系列相关的模型,包括FM, FNN, PNN, Wide&Deep和DeepFM.
I. Factorization Machine(FM)
1. FM的定义
假设输入特征是n维向量。
FM的公式:
其中,
,
,
表示向量点乘。
矩阵 中的一行
用来表示输入向量的第
个变量,
的维度为
,参数
,定义了因子分解的维度。FM可以看做线性部分的LR(包含
的项)和非线性的特征组合(包含
的项)。特征组合项展开之后就是所有特征(
)之间的两两相乘,并乘以一个系数
。而这里的
其实就是embedding size,用
维的向量来表达某个输入特征
。因此,式(1)是所有特征自身的一阶线性表示以及两两特征之间的二阶交叉表示(即
和
,
)之和。

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的结构

-
首先,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)

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. 模型结构

这里的Wide需要人工设计特征工程,最主要的就是叉乘变换(cross-product transformation),即将指定的binary特征进行连乘,以捕捉特征之间的交叉关系,为模型加入了非线性。
V. DeepFM
DeepFM是Wide & Deep的升级版,将wide部分用FM来代替,这样就免去了在wide部分人工设计特征交叉,得到一个end-to-end模型,理论上可以学习到所有特征间的interaction。

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(探索未出现过的特征组合),两者结合起来可以发挥更大的作用。
网友评论