推荐系统-深度模型

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,核心创新之处,它显式的使用特征交叉操作,具体交叉公式为:x_0, w_l,b_l是一个维度为 d 的列向量。
x_{l+1}=x_0x_l^Tw_l + b_l + x_l = f(x_l,w_l,b_l)+x_l

交叉层的可视化如图所示:

原理解析:

参考文献

NFM 模型

背景:

目前 Wide&Deep、DeepCross、FNN等网络,都是将 concat 后的 embedding 向量输入到多层网络中学习特征的交叉,多层网络能够隐式的学习到任意高阶的特征组合, 但是发现这种网络结构有个明显的弱点就是, 在 low level 采用 concat 的方式处理 embedding 向量带给特征交叉的信息太少(证据就是 NCF 论文中的一个实验), 而多层网络的调优存在很多臭名昭著的困难, 比如梯度消失/爆炸, 过拟合等。作者在研究已有成果的时, 受 FNN 启发, 发现如果在进入多层网络之前能够用 FM 进行预训练, 得到一个 embedding 向量, 再进入 NN 中能够得到更好的效果。

NFM 网络结构

NFM 与 FM 网络结构类似,只是在二阶特征交叉中进行优化,NFM 预估的目标为:
\hat{y}_{N F M}(\mathbf{x})=w_{0}+\sum_{i=1}^{n} w_{i} x_{i}+f(\mathbf{x})

接下来,主要阐述f(x)的设计,网络结构如下:

  1. Embedding Layer
    与正常的 Embedding 层不同的是:使用原始的特征值乘以 Embedding vector,使得模型也可以处理 real valued feature。

  2. Bi-Interaction Layer
    这一层其实是一个 pooling 操作,将多个向量转化为一个向量,形式化如下:
    f_{B I}\left(\mathcal{V}_{x}\right)=\sum_{i=1}^{n} \sum_{j=i+1}^{n} x_{i} \mathbf{v}_{i} \odot x_{j} \mathbf{v}_{j}
    f_{BI}的输入是整个的嵌入向量,x_ix_j是特征取值,v_iv_j是特征对应的嵌入向量。中间的操作表示对应位置相乘。所以原始的嵌入向量任意两个都进行组合,对应位置相乘结果得到一个新向量;然后把这些新向量相加,就得到了Bi-Interaction的输出。这个输出只有一个向量,维度仍然是K,可以理解为就是FM的二阶输出。

  3. Hidden Layer
    DNN 学习高阶组合特征。

  4. Prediction Layer
    最后一层隐藏层输出Z_L,输出层最后预测结果公式如下:
    f(x) = h^TZ_L

总结整个网络,公式如下:
\begin{aligned} \hat{y}_{N F M}(\mathbf{x}) & =w_{0}+\sum_{i=1}^{n} w_{i} x_{i} +\mathbf{h}^{T} \sigma_{L}\left(\mathbf{W}_{L}\left(\ldots \sigma_{1}\left(\mathbf{W}_{1} f_{B I}\left(\mathcal{V}_{x}\right)+\mathbf{b}_{1}\right) \ldots\right)+\mathbf{b}_{L}\right) \end{aligned}

参考文献

FNN 模型

FNN简单概括:FM+MLP,如果再用一句稍显复杂的话概括FNN那就是:FNN是一个两阶段训练的模型,阶段一先训练一个FM模型得到每个field的embedding向量,阶段二,基于阶段一的embedding向量初始化MLP的embedding层,然后训练一个MLP(DNN)。

模型结构图如下:

FNN模型图

重点关注下 Dense Real Layer 层,z定义如下:
z = (w_0, z_1,z_2,...,z_i,...,z_n)

w_0是一个全局的偏置标量,n是特征域,z_i是第 i 个特征域在FM中的参数向量,定义如下:
z_i = W_{0}^{i}·x[start_i:end_i]=(w_i,v_i^1,v_i^2,...,v_i^K)

权重W_{0}^{i}都是通过 FM 预训练好的偏置项w_iv_i分别初始化,也就是 Embedding 层的参数矩阵。Field_i则可以表示为x[start_i:end_i],为one-hot编码。

简单理解如下,利用王喆《深度学习推荐系统》图表示为:

优缺点
优点:每个特征的嵌入向量是预先采用FM模型训练的,因此在学习DNN模型时,训练开销降低,模型能够更快达到收敛。

缺点:

  • Embedding 的参数受 FM 的影响,不一定准确。
  • 预训练阶段增加了计算复杂度,训练效率低。
  • FNN 只能学习到高阶的组合特征;模型中没有对低阶特征建模。

参考文献

DeepFM 网络

Wide & Deep推荐模型的升级版。不同点如下:

  1. wide模型部分由LR替换为FM。FM模型具有自动学习交叉特征的能力,避免了原始Wide & Deep模型中浅层部分人工特征工程的工作。
  2. 共享原始输入特征。DeepFM模型的原始特征将作为FM和Deep模型部分的共同输入,保证模型特征的准确与一致。

模型输入x=[x_{filed1},x_{field2},...,x_{fieldm}],这是一个 d 维向量,其中x_{fieldi}即为第 i 个field的特征表示,如果是类别,则为one-hot编码后的向量,连续值则为它本身。然后对其进行 Embedding,连续值离散化后可进行 Embedding。

接着 FM 层即为embedding后结果的内积和一次项的和,最后一层sigmoid后再输出结果。Embedding内积与FM模型等价!
由于进行了one-hot编码,所以对应的x_{filedi}只有一个值为1,其余的都为0,则:
V_{\text {fieldi }} \times \mathbf{x}_{\text {fieldi }}=\left[\begin{array}{cccc} v_{11} & v_{21} & \cdots & v_{m 1} \\ v_{12} & v_{22} & \cdots & v_{m 2} \\ \vdots & \vdots & \ddots & \vdots \\ v_{1 k} & v_{2 k} & \cdots & v_{m d} \end{array}\right] \times\left[\begin{array}{c} 0 \\ \vdots \\ 1 \\ \vdots \end{array}\right]=\left[\begin{array}{c} v_{c 1} \\ v_{c 2} \\ \vdots \\ v_{c k} \end{array}\right] x_{c}=V_{c} x_{c}
若两个 field 做内积,假设非0的那一列为c和d则:
(V_{fieldi} x_{fieldi})(V_{fieldj} x_{fieldj})=(V_c*V_d)x_cx_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 是 V_u,候选广告的 Embedding 是 V_a,用户兴趣和候选的广告的相关性可以写作 F(U,A) = V_a * V_u。如果没有 Local activation 机制的话,那么同一个用户对于不同的广告,Vu 都是相同的。举例来说,如果有两个广告 A 和 B,用户兴趣和 A,B 的相似性都很高,那么在 Va 和 Vb 连线上的广告都会有很高的相似性。这样的限制使得模型非常难学习到有效的用户和广告的 embedidng 表示。

引入Activation Unit之后,用户的兴趣表示计算如下:
V_{u}=f\left(V_{a}\right)=\sum_{i=1}^{N} w_{i} * V_{i}=\sum_{i=1}^{N} g\left(V_{i}, V_{a}\right) * V_{i}

加入了注意力机制,V_u从过去V_i的加和变成了V_i的加权和。重点在于 g(V_i, V_a) 采用什么比较好,传统的 Attention 机制,通常是点积或者 MLP。上图右上角的 activation unit:首先是把 u 和 v 以及 u v的 element wise 差值向量合并起来作为输入,然后喂给全连接层,最后得出权重。

参考文献

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,198评论 6 514
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,334评论 3 398
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,643评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,495评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,502评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,156评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,743评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,659评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,200评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,282评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,424评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,107评论 5 349
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,789评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,264评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,390评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,798评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,435评论 2 359

推荐阅读更多精彩内容