乐趣区

深度学习在CTR预估中的应用

欢迎大家前往腾讯云 + 社区,获取更多腾讯海量技术实践干货哦~
本文由鹅厂优文发表于云 + 社区专栏

一、前言

二、深度学习模型

1. Factorization-machine(FM)
FM = LR+ embedding
2. Deep Neural Network(DNN)
3. Factorisation-machine supported Neural Networks (FNN)
4. Product-based Neural Network(PNN)
5. Wide & Deep Learning(Wide&Deep)
6. Factorization-Machine based Neural Network (deepFM)
7. Neural Factorization Machines (NFM)
8. Attention Neural Factorization Machines (AFM)
9. Deep&CrossNetwork(DCN)
10. Deep Interest Network (DIN)

三、写在最后
四、参考文献

作者:辛俊波 | 腾讯 应用研究员
一、前言
深度学习凭借其强大的表达能力和灵活的网络结构在 NLP、图像、语音等众多领域取得了重大突破。在广告领域,预测用户点击率(Click Through Rate,简称 CTR)领域近年也有大量关于深度学习方面的研究,仅这两年就出现了不少于二十多种方法。本文就近几年 CTR 预估领域中学术界的经典方法进行探究,并比较各自之间模型设计的初衷和各自优缺点。通过十种不同 CTR 深度模型的比较,不同的模型本质上都可以由基础的底层组件组成。
本文中出现的变量定义:
​ • n: 特征个数,所有特征 one-hot 后 连接起来的整体规模大小
​ • f: 特征 field 个数,表示特征类别有多少个
​ • k: embedding 层维度,在 FM 中是隐向量维度
​ • H1: 深度网络中第一个隐层节点个数,第二层 H2,以此类推。
二、深度学习模型
1. Factorization-machine(FM)
​ FM 模型可以看成是线性部分的 LR,还有非线性的特征组合 xixj 交叉而成,表示如下:

其中 vi 是第 i 维特征的隐向量,长度 k <<n,包含 k 个描述特征的因子。参数个数为 k *n。所有包含 xi 的非零组合特征都可以用来训练 vi,缓解数据稀疏问题。图 1 是从神经网络的角度表示 FM,可以看成底层为特征维度为 n 的离散输入,经过 embedding 层后,对 embedding 层线性部分(LR)和非线性部分(特征交叉部分)累加后输出。
图 1 FM 模型结构
FM = LR+ embedding
待学习的参数如下:
(1)LR 部分:1+n
(2)embedding 部分:n*k
FM 下文中将作为各种网络模型的基础组件
2. Deep Neural Network(DNN)
图 2 是经典的 DNN 网络,结构上看就是传统的多层感知机(MultiLayer Perceptron,简称 MLP)。在 MLP 网络中,输入是原始的特征 n 维特征空间,假设第一层隐层节点数为 H1,第二层为 H2,以此类推。在第一层网络中,需要学习的参数就是 n *H1。对于大多数 CTR 模型来说,特征体系都极其庞大而且稀疏,典型的特征数量级 n 从百万级到千万级到亿级甚至更高,这么大规模的 n 作为网络输入在 ctr 预估的工业界场景中是不可接受的。下面要讲到的大多数深度学习 CTR 网络结构,都围绕着如何将 DNN 的高维离散输入,通过 embedding 层变成低维稠密的输入工作来展开。
图 2 DNN 模型结构
DNN 待学习参数:nH1+H1H2+H2H3+H3o(o 为输出层大小,在 ctr 预估中为 1)
DNN(后文称 MLP)也将作为下文各种模型的基础组件之一
3. Factorisation-machine supported Neural Networks (FNN)
在上述的 DNN 中,网络的原始输入是全部原始特征,维度为 n,通常都是百万级以上。然而特征维度 n 虽然空间巨大,但如果归属到每个特征所属的 field(维度为 f),通常 f 维度会小很多。如果有办法将每个特征用其所属的 field 来表示,原始输入将大大减少不少。Factorisation-machine supported Neural Networks,简称 FNN 就是基于这种思想提出来的。
图 3 FNN 模型结构
FNN 假设每个 field 有且只有一个值为 1,其他均为 0。x 为原始输入的特征,它是大规模离散稀疏的。它可以分成 n 个 field,每一个 field 中,只有一个值为 1,其余都为 0(即 one hot)。field i 的输入可以表示成 x[start_i: end_i],W0i
为 field i 的 embedding 矩阵。Zi 为 embedding 后的向量,是一个 k 维的向量,它由一次项 wi,二次项 vi=(vi1,vi2,…vik) 组成,其中 k 是 FM 中二次项的向量的维度。而后面的 l1,l2 则为神经网络的全连接层的表示。
除此之外,FNN 还具有以下几个特点:
Ø FM 参数需要预训练
​ FM 部分的 embedding 需要预先进行训练,所以 FNN 不是一个 end-to-end 模型。在其他论文中,有试过不用 FM 初始化 embedding, 而用随机初始化的方法,要么收敛速度很慢,要么无法收敛。有兴趣的同学可以实验验证下。
Ø 无法拟合低阶特征
​ FM 得到的 embedding 向量直接 concat 连接之后作为 MLP 的输入去学习高阶特征表达,最终的 DNN 输出作为 ctr 预估值。因此,FNN 对低阶信息的表达比较有限。
Ø 每个 field 只有一个非零值的强假设
​ FNN 假设每个 fileld 只有一个值为非零值,如果是稠密原始输入,则 FNN 失去意义。对于一个 fileld 有几个非零值的情况,例如用户标签可能有多个,一般可以做 average/sum/max 等处理。
FNN = LR + DEEP = LR + embedding + MLP
(1)LR 部分:1+n
(2)embedding 部分:n*k
(3)MLP 部分:fkH1+H1*H2+H2
​ 可以看到,对比 DNN,在进入 MLP 部分之前,网络的输入由 n 降到了 f *k(f 为 field 个数,几十到几百之间,k 为隐向量维度,一般 0~100)
4. Product-based Neural Network(PNN)
FNN 的 embedding 层直接 concat 连接后输出到 MLP 中去学习高阶特征。PNN,全称为 Product-based Neural Network,认为在 embedding 输入到 MLP 之后学习的交叉特征表达并不充分,提出了一种 product layer 的思想,既基于乘法的运算来体现体征交叉的 DNN 网络结构,如图 4 所示。
图 3 PNN 模型结构
​ 对比 FNN 网络,PNN 的区别在于中间多了一层 Product Layer 层。Product Layer 层由两部分组成,左边 z 为 embedding 层的线性部分,右边为 embedding 层的特征交叉部分。除了 Product layer 不同,PNN 和 FNN 的 MLP 结构是一样的。这种 product 思想来源于,在 ctr 预估中,认为特征之间的关系更多是一种 and“且”的关系,而非 add” 加”的关系。例如,性别为男且喜欢游戏的人群,比起性别男和喜欢游戏的人群,前者的组合比后者更能体现特征交叉的意义。根据 product 的方式不同,可以分为 inner product(IPNN)和 outer product(OPNN),如图 5 所示。
图 5 PNN(左图:IPNN;右图:OPNN)
Product layer 的输出为

PNN = FM + product + MLP
Ø Inner Product-based Neural Network
​ IPNN 的叉项使用了内积 g(fi, fj) = <fi, fj>。f 个 filed,两两求内积共计交叉项 p 部分的参数共 f(f-1)/2(f 为特征的 field 个数,原始论文里用的 N)个,线性部分 z 部分参数共 fk 个。需要学习的参数为:
​(1)FM 部分:1+ n + n*k
​(2)product 部分:(fk + f(f-1)/2)*H1
​(3)MLP 部分:H1H2+H21
Ø Outer Product-based Neural Network
​ OPNN 用矩阵乘法来表示特征的交叉, g(fi, fj)=fifit。f 个 field 两两求矩阵乘法,交叉项 p 共 f(f-1)/2kk 个参数。线性部分 z 部分参数共 fk 个。需要学习的参数为:
​(1)FM 部分:1+ n + n*k
​(2)product 部分:(fk + f(f-1)/2kk)*H1
​(3)MLP 部分:H1H2+H21
5. Wide & Deep Learning(Wide&Deep)
前面介绍的两种变体 DNN 结构 FNN 和 PNN,都在 embedding 层对输入做处理后输入 MLP,让神经网络充分学习特征的高阶表达,deep 部分是有了,对高阶的特征学习表达较强,但 wide 部分的表达是缺失的,模型对于低阶特征的表达却比较有限。google 在 2016 年提出了大名鼎鼎的 wide&Deep 的结构正是解决了这样的问题。Wide&deep 结合了 wide 模型的优点和 deep 模型的优点,网络结构如图 6 所示,wide 部分是 LR 模型,Deep 部分是 DNN 模型。
图 6 Wide&Deep 模型结构
在这个经典的 wide&deep 模型中,google 提出了两个概念,generalization(泛化性)和 memory(记忆性)
Ø Memory(记忆性)
wide 部分长处在于学习样本中的高频部分,优点是模型的记忆性好,对于样本中出现过的高频低阶特征能够用少量参数学习;缺点是模型的泛化能力差,例如对于没有见过的 ID 类特征,模型学习能力较差。
Ø Generalization(泛化性)
deep 部分长处在于学习样本中的长尾部分,优点是泛化能力强,对于少量出现过的样本甚至没有出现过的样本都能做出预测(非零的 embedding 向量); 缺点是模型对于低阶特征的学习需要用较多参才能等同 wide 部分效果,而且泛化能力强某种程度上也可能导致过拟合出现 bad case.
除此之外,wide&deep 模型还有如下特点
Ø 人工特征工程
LR 部分的特征,仍然需要人工设计才能保证一个不错的效果。因为 LR 部分是直接作为最终预测的一部分,如果作为 wide 部分的 LR 特征工程做的不够完善,将影响整个 wide&deep 的模型精度
Ø 联合训练
模型是 end-to-end 结构,wide 部分和 deep 部分是联合训练的
Ø embedding 层 deep 部分单独占有
LR 部分直接作为最后输出,因此 embedding 层是 deep 部分独有的。
wide&deep = LR + embedding + MLP
​(1)LR 部分: 1+n
​(2)embedding 部分:n*k
​(3)MLP 部分:fkH1 + H1H2 + H21
6. Factorization-Machine based Neural Network (deepFM)
google 提出的 wide&deep 框架固然强大,但由于 wide 部分是个 LR 模型,仍然需要人工特征工程。但 wide&deep 给整个学术界和工业界提供了一种框架思想。基于这种思想,华为诺亚方舟团队结合 FM 相比 LR 的特征交叉的功能,将 wide&deep 部分的 LR 部分替换成 FM 来避免人工特征工程,于是有了 deepFM,网络结构如图 6 所示。
图 7 DeepFM 模型结构
比起 wide&deep 的 LR 部分,deeFM 采用 FM 作为 wide 部分的输出,FM 部分如图 8 所示。

图 8 deepFM 模型中的 FM 部分结构
除此之外,deepFM 还有如下特点:
Ø 低阶特征表达
wide 部分取代 WDL 的 LR,比 FNN 和 PNN 相比能捕捉低阶特征信息
Ø embedding 层共享
wide&deep 部分的 embedding 层得需要针对 deep 部分单独设计;而在 deepFM 中,FM 和 DEEP 部分共享 embedding 层,FM 训练得到的参数既作为 wide 部分的输出,也作为 DNN 部分的输入。
Ø end-end 训练
embedding 和网络权重联合训练,无需预训练和单独训练
deepFM = FM + embedding + DNN
(1)FM 部分:1+n
(2)embedding 部分:n*k
(3)DNN 部分:fkH1 + H1*H2+H1
通过 embedding 层后,FM 部分直接输出没有参数需要学习,进入 DNN 部分的参数维度从原始 n 维降到 f * k 维。
7. Neural Factorization Machines (NFM)
​ 前面的 deepFM 在 embedding 层后把 FM 部分直接 concat 起来(f* k 维,f 个 field,每个 filed 是 k 维向量)作为 DNN 的输入。Neural Factorization Machines,简称 NFM,提出了一种更加简单粗暴的方法,在 embedding 层后,做了一个叫做 BI-interaction 的操作,让各个 field 做 element-wise 后 sum 起来去做特征交叉,MLP 的输入规模直接压缩到 k 维,和特征的原始维度n和特征 field 维度 f 没有任何关系。网络结构如图 9 所示。
图 9 NFM 模型结构
这里论文只画出了其中的 deep 部分, wide 部分在这里省略没有画出来。Bi-interaction 听名字很高大上,其实操作很简单:就是让 f 个 field 两两 element-wise 相乘后,得到 f *(f-1)/ 2 个向量,然后直接 sum 起来,最后得到一个 k 维的向量。所以该层没有任何参数需要学习。
NFM = FM + embedding + MLP
需要学习的参数有:
(1)FM 部分:1+n
(2)embedding 部分:n*k
(3)MLP 部分:kH1 + H1H2+…+Hl*1
NFM 在 embedding 做了 bi-interaction 操作来做特征的交叉处理,优点是网络参数从 n 直接压缩到 k(比 FNN 和 deepFM 的 f * k 还少),降低了网络复杂度,能够加速网络的训练得到模型;但同时这种方法也可能带来较大的信息损失。
8. Attention Neural Factorization Machines (AFM)
​ 前面提到的各种网络结构中的 FM 在做特征交叉时,让不同特征的向量直接做交叉,基于的假设是各个特征交叉对 ctr 结果预估的贡献度是一样的。这种假设其实是不合理的,不同特征在做交叉时,对 ctr 预估结果的贡献度是不一样的。Attention Neural Factorization Machines,简称 NFM 模型,利用了近年来在图像、NLP、语音等领域大获成功的 attention 机制,在前面讲到的 NFM 基础上,引入了 attention 机制来解决这个问题。AFM 的网络结构如图 10 所示。和 NFM 一样,这里也省略了 wide 部分,只画出了 deep 部分结构。
图 10 AFM 模型结构
AFM 的 embedding 层后和 NFM 一样,先让 f 个 field 的特征做了 element-wise product 后,得到 f *(f-1)/ 2 个交叉项。和 NFM 直接把这些交叉项 sum 起来不同,AFM 引入了一个 Attention Net,认为这些交叉特征项每个对结果的贡献是不同的,例如 xi 和 xj 的权重重要度,用 aij 来表示。从这个角度来看,其实 AFM 其实就是个加权累加的过程。Attention Net 部分的权重 aij 不是直接学习,而是通过如下公式表示

这里 t 表示 attention net 中的隐层维度,k 和前面一样,为 embedding 层的维度。所以这里需要学习的参数有 3 个,W, b, h,参数个数共 tk+2t 个。得到 aij 权重后,对各个特征两两点积加权累加后,得到一个 k 维的向量,引入一个简单的参数向量 pT,维度为 k 进行学习,和 wide 部分一起得到最终的 AFM 输出。

总结 AFM 的网络结构来说,有如下特点:
Ø Attention Network
AFM 的亮点所在,通过一个 attention net 生成一个关于特征交叉项的权重,然后将 FM 原来的二次项直接累加,变成加权累加。本质上是一个加权平均,学习 xjxj 的交叉特征重要性
Ø Deep Network
没有 deep,卒。
Attention net 学习得到的交叉项直接学些个 pt 参数就输出了,少了 DNN 部分的表达,对高阶特征部分的进一步学习可能存在瓶颈。另外,FFM 其实也引入了 field 的概念去学习 filed 和 featrue 之间的权重。没有了 deep 部分的 AFM,和优化的 FFM 上限应该比较接近。
AFM = FM + embedding + attention + MLP(一层)
需要学习的参数有:
(1)FM 部分参数:1+n
(2)Embedding 部分参数: n*k
(3)Attention Network 部分参数:kt+t2
(4)MLP 部分参数:k*1
9. Deep&CrossNetwork(DCN)
在 ctr 预估中,特征交叉是很重要的一步,但目前的网络结构,最多都只学到二级交叉。LR 模型采用原始人工交叉特征,FM 自动学习 xi 和 xj 的二阶交叉特征,而 PNN 用 product 方式做二阶交叉,NFM 和 AFM 也都采用了 Bi-interaction 的方式学习特征的二阶交叉。对于更高阶的特征交叉,只有让 deep 去学习了。为解决这个问题,google 在 2017 年提出了 Deep&Cross Network,简称 DCN 的模型,可以任意组合特征,而且不增加网络参数。图 11 为 DCN 的结构。
图 10 DCN 模型结构
整个网络分 4 部分组成:
(1)Embedding and stacking layer
之所以不把 embedding 和 stacking 分开来看,是因为很多时候,embedding 和 stacking 过程是分不开的。前面讲到的各种 XX-based FM 网络结构,利用 FM 学到的 v 向量可以很好的作为 embedding。而在很多实际的业务结构,可能已经有了提取到的 embedding 特征信息,例如图像的特征 embedding,text 的特征 embedding,item 的 embedding 等,还有其他连续值信息,例如年龄,收入水平等,这些 embedding 向量 stack 在一起后,一起作为后续网络结构的输入。当然,这部分也可以用前面讲到的 FM 来做 embedding。为了和原始论文保持一致,这里我们假设 X0 向量维度为 d(上文的网络结构中为 k),这一层的做法就是简答的把各种 embedding 向量 concat 起来。

(2)Deep layer netwok
在 embedding and stacking layer 之后,网络分成了两路,一路是传统的 DNN 结构。表示如下

为简化理解,假设每一层网络的参数有 m 个,一共有 Ld 层,输入层由于和上一层连接,有 dm 个参数(d 为 x0 向量维度),后续的 Ld- 1 层,每层需要 m(m+1) 个参数,所以一共需要学习的参数有 dm+m(m+1)*(Ld-1)。最后的输出也是个 m 维向量 Hl2
(3)Cross layer network
​ Embedding and stacking layer 输入后的另一路就是 DCN 的重点工作了。假设网络有 L1 层,每一层和前一层的关系可以用如下关系表示

可以看到 f 是待拟合的函数,xl 即为上一层的网络输入。需要学习的参数为 wl 和 bl,因为 xl 维度为 d,当前层网络输入 xl+ 1 也为 d 维,待学习的参数 wl 和 bl 也都是 d 维度向量。因此,每一层都有 2 * d 的参数(w 和 b)需要学习,网络结构如下。

经过 Lc 层的 cross layer network 后,在该 layer 最后一层 Lc 层的输出为 Lc2 的 d 维向量
(4)Combination Output Layer
经过 crossnetwork 的输出 XL1(d 维)和 deep network 之后的向量输入(m 维)直接做 concat,变为一个 d + m 的向量,最后套一个 LR 模型,需要学习参数为 1 +d+m。
总结起来,DCN 引入的 crossnetwork 理论上可以表达任意高阶组合,同时每一层保留低阶组合,参数的向量化也控制了模型的复杂度。
DCN = embedding + cross + deep + LR
待学习参数有:
(1)embedding 部分参数: 根据情况而定
(2)cross 部分参数:2dLc(Lc 为 cross 网路层数)
(3)deep 部分参数:d(m+1)+m(m+1)*(Ld-1)(Ld 为深度网络层数,m 为每层网络参数)
(4)LR 部分参数:1+d+m
10. Deep Interest Network (DIN)
​ 最后介绍阿里在 2017 年提出的 Deep Interest Network,简称 DIN 模型。与上面的 FNN,PNN 等引入低阶代数范式不同,DIN 的核心是基于数据的内在特点,引入了更高阶的学习范式。用户的兴趣是多种多样的,从数学的角度来看,用户的兴趣在兴趣空间是一个多峰分布。在预测 ctr 时,用户 embedding 表示的兴趣维度,很多是和当前 item 是否点击无关的,只和用户兴趣中的局部信息有关。因此,受 attention 机制启发,DIN 在 embedding 层后做了一个 action unit 的操作,对用户的兴趣分布进行学习后再输入到 DNN 中去,网络结构如图 12 所示
图 12 DIN 模型结构
DIN 把用户特征、用户历史行为特征进行 embedding 操作,视为对用户兴趣的表示,之后通过 attention network,对每个兴趣表示赋予不同的权值。
• Vu:表示用户最终向量
• Vi:表示用户兴趣向量 (shop_id, good_id..)
• Va:表示广告表示向量
• Wi: 对于候选广告,attention 机制中该兴趣的权重

可以看到,对于用户的每个兴趣向量 Vi,都会通过学习该兴趣的权重 Vi, 来作为最终的用户表示。
三、写在最后
前面介绍了 10 中深度学习模型的网络结构,总结起来可以用如下的所表示

各种 CTR 深度模型看似结构各异,其实大多数可以用如下的通用范式来表达,
Ø input->embedding

把大规模的稀疏特征 ID 用 embedding 操作映射为低维稠密的 embedding 向量
Ø embedding 层向量

concat, sum, average pooling 等操作,大部分 CTR 模型在该层做改造
Ø embedding->output

通用的 DNN 全连接框架,输入规模从 n 维降为 k * f 维度甚至更低。
图 3 通用深度学习模型结构
其中,embedding vector 这层的融合是深度学习模型改造最多的地方,该层是进入深度学习模型的输入层,embedding 融合的质量将影响 DNN 模型学习的好坏。个人总结大体有以下 4 种操作,当然后续可能会有越来越多其他的变形结构。
图 14 embedding 层融合方式
另外,DNN 部分,业界也有很多或 state-of-art 或很 tricky 的方法, 都可以在里面进行尝试,例如 dropout,在 NFM 的 Bi-interaction 中可以尝试以一定概率 dropout 掉交叉特征增前模型的泛化能力等。
写在最后
​ ctr 预估领域不像图像、语音等领域具有连续、稠密的数据以及空间、时间等的良好局部相关性,ctr 预估中的大多数输入都是离散而且高维的,特征也分散在少量不同的 field 上。要解决这样的一个深度学习模型,面临的第一个问题是怎么把输入向量用一个 embedding 层降维策划那个稠密连续的向量,如本文介绍的用 FM 去做预训练,或者和模型一起联合训练,或者其他数据源提取的 embedding 特征向量去做 concat。其次,在宽和深的大战中,在 google 在提出了 wide&deep 的模型框架后,这套体系基本已成为业内的基本框架。无论 wide 部分或者 deep 怎么改造,其实本质上还是一些常见组件的结合,或者改造 wide,或者改造 deep,或者在 wide 和 deep 的结合过程中进行改造。
ctr 预估领域方法变化层出不穷,但万变不离其宗,各种模型本质上还是基础组件的组合,如何结合自己的业务、数据、应用场景去挑选合适的模型应用,可能才是真正的难点所在。
四、参考文献
[1]Factorization Machines
[2]Wide & Deep Learning for Recommender Systems
[3]Deep Learning over Multi-Field Categorical Data: A Case Study on User Response Prediction
[4]Product-based Neural Networks for User Response Prediction
[5]DeepFM: A Factorization-Machine based Neural Network for CTR Prediction
[6]Neural Factorization Machines for Sparse Predictive Analytics
[7] Attentional Factorization Machines: Learning the Weight of Feature Interactions via Attention Networks
[8]Deep & Cross Network for Ad Click Predictions
[9]Deep Interest Network for Click-Through Rate Prediction

问答如何把深度学习应用在云中?相关阅读 IPv6 原理、应用与实践 Python 工匠:编写条件分支代码的技巧 AI 从入门到放弃:CNN 的导火索,用 MLP 做图像分类识别?【每日课程推荐】机器学习实战!快速入门在线广告业务及 CTR 相应知识

退出移动版