Wide&Deep 网络
推荐系统的主要挑战之一,是同时解决 Memorization 和 Generalization。Wide & Deep 模型的核心思想是结合线性模型的记忆能力和 DNN 模型的泛化能力,从而提升整体模型性能。
记忆能力:理解为模型直接学习并利用历史数据中物品或者特征的“共现频率”的能力。协同过滤、逻辑回归等简单模型有较强的记忆能力。规则式的推荐:模型直接记住历史数据的分布特点,并利用这些记忆进行推荐。
泛化能力:理解为模型传递特征的相关性,以及发掘洗刷甚至从未出现的稀有特征与最终标签相关性的能力。矩阵分解比协同过滤的泛化能力强,因为矩阵分解引入了隐向量这样的结构。
如上图的网络结构:结合 LR 和 DNN。
Wide 部分
wide部分其实就是一个简单的线性模型 y = wx + b。x = [ x1, x2, ... , xd] 是d个feature的向量,w = [w1, w2, ... , wd]是模型的参数,b是bias。这里的d个feature包括原始的输入feature和经过转换的feature。
其中一种很重要的转换feature叫做cross-product转换。假如x1是性别,x1=0表示男性,x1=1表示女性。x2是爱好,x2=0表示不喜欢吃西瓜,x2=1表示喜欢吃西瓜。那么我们就可以利用x1和x2构造出新的feature,令x3=(x1 && x2),则x3=1表示是女生并且喜欢吃西瓜,如果不是女生或者不喜欢吃西瓜,则x3=0。这样经过转换的来的x3就是cross-product转化。这样转换的目的是为了获取交叉特征对预测目标的影响,给线性模型增加非线性。
Deep 部分
deep部分就是前馈神经网络模型。对于高维稀疏的分类特征,首先会转化成低维的稠密的向量,然后作为神经网hidden layers的输入进行训练。
参考文献
DCN 模型
主要工作是针对 Wide&Deep 网络中的 Wide 部分做了改进,在 Wide&Deep 网络中,Wide 部分是个简单的线性模型,其交叉特征任然需要人工设计,而 DCN 设计了专门的 cross 网络用于自动学习高阶交叉特征。
DCN模型结构如上图所示,主要模块为
- Embedding and Stacking Layer:输入特征的处理,包括embedding处理和concat操作;
- Cross Network:特征交叉网络,对特征进行显式的有限阶的高阶交叉;
- Deep Network:DNN层网络,对特征进行隐式的高阶交叉;
- Combination Layer:结合特征交叉层和DNN层的隐层输出,并输入到预测层。
这里重点关注 Cross network,核心创新之处,它显式的使用特征交叉操作,具体交叉公式为:是一个维度为 d 的列向量。
交叉层的可视化如图所示:
原理解析:
参考文献
NFM 模型
背景:
目前 Wide&Deep、DeepCross、FNN等网络,都是将 concat 后的 embedding 向量输入到多层网络中学习特征的交叉,多层网络能够隐式的学习到任意高阶的特征组合, 但是发现这种网络结构有个明显的弱点就是, 在 low level 采用 concat 的方式处理 embedding 向量带给特征交叉的信息太少(证据就是 NCF 论文中的一个实验), 而多层网络的调优存在很多臭名昭著的困难, 比如梯度消失/爆炸, 过拟合等。作者在研究已有成果的时, 受 FNN 启发, 发现如果在进入多层网络之前能够用 FM 进行预训练, 得到一个 embedding 向量, 再进入 NN 中能够得到更好的效果。
NFM 网络结构
NFM 与 FM 网络结构类似,只是在二阶特征交叉中进行优化,NFM 预估的目标为:
接下来,主要阐述的设计,网络结构如下:
Embedding Layer
与正常的 Embedding 层不同的是:使用原始的特征值乘以 Embedding vector,使得模型也可以处理 real valued feature。Bi-Interaction Layer
这一层其实是一个 pooling 操作,将多个向量转化为一个向量,形式化如下:
的输入是整个的嵌入向量,
,
是特征取值,
,
是特征对应的嵌入向量。中间的操作表示对应位置相乘。所以原始的嵌入向量任意两个都进行组合,对应位置相乘结果得到一个新向量;然后把这些新向量相加,就得到了Bi-Interaction的输出。这个输出只有一个向量,维度仍然是K,可以理解为就是FM的二阶输出。
Hidden Layer
DNN 学习高阶组合特征。Prediction Layer
最后一层隐藏层输出,输出层最后预测结果公式如下:
总结整个网络,公式如下:
参考文献
FNN 模型
FNN简单概括:FM+MLP,如果再用一句稍显复杂的话概括FNN那就是:FNN是一个两阶段训练的模型,阶段一先训练一个FM模型得到每个field的embedding向量,阶段二,基于阶段一的embedding向量初始化MLP的embedding层,然后训练一个MLP(DNN)。
模型结构图如下:
重点关注下 Dense Real Layer 层,定义如下:
是一个全局的偏置标量,
是特征域,
是第 i 个特征域在FM中的参数向量,定义如下:
权重都是通过 FM 预训练好的偏置项
和
分别初始化,也就是 Embedding 层的参数矩阵。
则可以表示为
,为one-hot编码。
简单理解如下,利用王喆《深度学习推荐系统》图表示为:
优缺点
优点:每个特征的嵌入向量是预先采用FM模型训练的,因此在学习DNN模型时,训练开销降低,模型能够更快达到收敛。
缺点:
- Embedding 的参数受 FM 的影响,不一定准确。
- 预训练阶段增加了计算复杂度,训练效率低。
- FNN 只能学习到高阶的组合特征;模型中没有对低阶特征建模。
参考文献
DeepFM 网络
Wide & Deep推荐模型的升级版。不同点如下:
- wide模型部分由LR替换为FM。FM模型具有自动学习交叉特征的能力,避免了原始Wide & Deep模型中浅层部分人工特征工程的工作。
- 共享原始输入特征。DeepFM模型的原始特征将作为FM和Deep模型部分的共同输入,保证模型特征的准确与一致。
模型输入,这是一个 d 维向量,其中
即为第 i 个field的特征表示,如果是类别,则为one-hot编码后的向量,连续值则为它本身。然后对其进行 Embedding,连续值离散化后可进行 Embedding。
接着 FM 层即为embedding后结果的内积和一次项的和,最后一层sigmoid后再输出结果。Embedding内积与FM模型等价!
由于进行了one-hot编码,所以对应的只有一个值为1,其余的都为0,则:
若两个 field 做内积,假设非0的那一列为c和d则:
参考文献
xDeepFM 模型
参考文献
DeepFFM 模型
2. DeepCrossing 网络
2016年,微软提出Deep Crossing模型,旨在解决特征工程中特征组合的难题,降低人力特征组合的时间开销,通过模型自动学习特征的组合方式,也能达到不错的效果,且在各种任务中表现出较好的稳定性。
利用残差网络进行特征处理。
3. PNN 网络
作者认为在embedding输入到MLP之后学习的交叉特征表达并不充分,提出了一种product layer的思想,既基于乘法的运算来体现体征交叉的DNN网络结构。在 CTR 预估中,认为特征关系属于“且”关系,而非“加”关系。
Product Layer 层
product layer 可以分成两个部分,一部分是线性部分 lz,一部分是非线性部分 lp。二者的形式如下:
其中 z 是线性信号向量,因此直接用 embedding 层得到,然后通过矩阵的点乘(相乘求和)即可。
对于 p 而言,有两种方式:一种是 IPNN,另一种是 OPNN;
IPNN 的示意图如下所示:内积
OPNN 的示意图如下所示:矩阵乘
参考文献:
4. DIN 网络结构
4.1 Base 版本
Base 版本的模型:一般的思路为,先通过 one-hot、multi-hot 得到高维离散特征,然后通过 Embedding 层将高维离散特征转换为固定长度的连续特征,然后通过多个全连接层,经过 sigmoid 函数转化为 0-1 值,代表点击的概率。
上图中, user feature groups
代表着用户的历史购买记录,存在着多条记录。mutil-hot 在 Embedding 之后会得到多个向量信息, 融合层中进行 element-wise +
操作,其实就是 sum-pooling
,统一为固定长度的连续特征。
4.2 DIN 网络
Base 模型在进行融合的时候:对用户的历史行为同等对待,存在问题。
为什么引入注意力机制?
难道仅仅是通过观察历史数据拍脑袋决定的么?当然不是,如果不用 Local activation 的话,将会出现下面的情况:假设用户的兴趣的 Embedding 是
,候选广告的 Embedding 是
,用户兴趣和候选的广告的相关性可以写作
。如果没有 Local activation 机制的话,那么同一个用户对于不同的广告,Vu 都是相同的。举例来说,如果有两个广告 A 和 B,用户兴趣和 A,B 的相似性都很高,那么在 Va 和 Vb 连线上的广告都会有很高的相似性。这样的限制使得模型非常难学习到有效的用户和广告的 embedidng 表示。
引入Activation Unit
之后,用户的兴趣表示计算如下:
加入了注意力机制,从过去
的加和变成了
的加权和。重点在于
采用什么比较好,传统的 Attention 机制,通常是点积或者 MLP。上图右上角的 activation unit:首先是把 u 和 v 以及 u v的 element wise 差值向量合并起来作为输入,然后喂给全连接层,最后得出权重。