《DeepFM: A Factorization-Machine based Neural Network for CTR Prediction》阅读笔记

DeepFM: A Factorization-Machine based Neural Network for CTR Prediction

  现有的针对CTR预估问题的解决方案,普遍对不同阶的交叉特征有着偏好,或者需要专家级特征工程。文章提出了DeepFM模型,能够实现端到端训练,不需要额外的特征工程,并且可以自动地提取交叉特征。
  CTR预估中,一个很重要的内容就是去挖掘点击背后隐藏的特征交互(interaction),这些交互有时候可以从现象去挖掘。例如基于用户经常在饭点点击订餐相关的app,说明“app类别 x 时间”这个二阶交叉特征能用于CTR预估,再比如男孩子很喜欢打射击类和RPG游戏,说明“app类别 x 性别 x 年龄”这个三阶交叉特征可用。一般来说这些交叉特征可以让专家去挖掘,但是某些交叉特征是人意想不到的,只能从数据中挖掘出来,例如在超市购买啤酒的人多会购买尿布的那个故事,而且可能存在更高阶的有用的交叉特征,人工暴力枚举是不现实的,我们需要高效地构造交叉特征。
  现有的一些模型都不能很好地解决这个问题。基于FTRL的LR,线性模型无法实现交叉。FM,理论上可以实现任意阶交叉,但出于复杂度考虑往往只做到二阶交叉。CNN,只适合相邻特征之间关联程度大的数据。RNN,只适合具有时间依赖性的数据。FNN和PNN,专注高阶交叉,缺乏低阶交叉。Wide&Deep,仍然部分依赖与人工特征工程。

DeepFM

  假设训练数据集 (X,y) ( X , y ) 大小是 n n X m m 个field,这其中可能包含类别型 categorical field 和连续型 continuous field,其中categorical field 一般是onehot编码过的特征,continuous field就是特征本身或者先量化再onehot。每一个样本 (x,y) 是很稀疏的,表示为 x=[xfield1,xfield2,,xfieldm] x = [ x f i e l d 1 , x f i e l d 2 , ⋯ , x f i e l d m ] ,每一个 xfieldi=[xi1,xi2,] x f i e l d i = [ x i 1 , x i 2 , ⋯ ] 都是一个稀疏向量,因为是onehot过的,所以可能只有1个特征取1,其他特征都是0,下面就直接称这个为1的特征位 xi x i

这里写图片描述

  如图,DeepFM由两部分组成:FM component + deep component,两者共享同一个输入。每个特征 xi x i ,有一个权重 wi w i (标量)用于FM一次项计算,一个 k k 维的 latent vector Vi 用于FM二次项计算,Embedding之后还会输入到 deep component。所有参数,包括FM的参数和神经网络的参数,是联合训练的(joint training):

ŷ =sigmoid(yFM+yDNN) y ^ = s i g m o i d ( y F M + y D N N )

FM Component

这里写图片描述

  FM component 就是个简单的FM,在我的另一篇博客里有详细描述。FM能高效地提取二阶交叉特征,尤其是当数据非常稀疏的时候。

yFM=<w,x>+ij<Vi,Vj>xixj y F M =< w , x > + ∑ i ∑ j < V i , V j > x i x j

Deep Component

这里写图片描述

  Deep component 是一个前向NN,用于学习更高阶的交叉特征。原始的高维稀疏特征向量被Embedding层压缩成低维稠密特征向量,然后再送入NN的hidden layer。

这里写图片描述

  Embedding是对每一个field做的,虽然field vector长短不一,但经过Embedding之后,会变成定长 k k 。一个field里的每个特征xi对应一个 k k 维的Vi,比如上图第一个特征 x1 x 1 对应 V1=[V11,V12,,V1k] V 1 = [ V 11 , V 12 , ⋯ , V 1 k ] ,只是在这条样本中 x1=0 x 1 = 0 ,所以 V1 V 1 得不到训练, x2=1 x 2 = 1 所以 V2 V 2 能得到训练。
  Embedding层的输出是一个 m×k m × k 维向量,可以表示为 a=[e1,e2,,em] a = [ e 1 , e 2 , ⋯ , e m ] ei e i 表示 field i 的 Embedding。这个向量将作为DNN的第一层输入,之后每一层和前一层的关系都可表示为下式,最终DNN的输出是 yDNN=RELU(W(H)a(H1)+bias(H1)) y D N N = R E L U ( W ( H ) a ( H − 1 ) + b i a s ( H − 1 ) ) (假设总共有H层隐层)

a(L+1)=RELU(WLa(L)+bias(L)) a ( L + 1 ) = R E L U ( W L a ( L ) + b i a s ( L ) )

  在早前一些方法中(例如FNN),这个Embedding层的参数 V V <script type="math/tex" id="MathJax-Element-3759">V</script>是要预训练一个FM得到的,而本文不这么干,FM就是整体结构的一部分,跟着DNN一起训练。

DeepFM和其他神经网络的关系

这里写图片描述

  上图给出了几种比较著名的NN相关的CTR预估模型。
  FNN是用预训练的FM初始化的DNN,它有三个缺点:受制于FM参数,需要预训练很耗时,仅提取高阶交叉特征。
  PNN在Embedding层和NN之间插入一个乘积层(Product Layer),根据乘法的不同,又可以划分为 IPNN(内积),OPNN(外积)和PNN*(内外都有)。外积损失信息太大而导致不可信,内积时间复杂度太高。另外,PNN也仅提取高阶交叉特征。
  Wide&Deep能同时提取低阶和高阶交叉特征,但是在Wide part需要人工特征工程。
  下面给出一个对比表格。

-不需要预训练高阶交叉低阶交叉不需要特征工程
FNN
PNN
Wide&Deep
DeepFM

超参数选择

激活函数

这里写图片描述

dropout概率

这里写图片描述

神经元个数

这里写图片描述

隐层层数

这里写图片描述

网络形状

constant (200-200-200), increasing (100-200-300), decreasing (300-200-100), and diamond (150-300-150).

这里写图片描述

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值