初学者系列:Deep FM详解

2019 年 8 月 26 日 专知


导读

点击率(CTR)的预测在推荐系统中至关重要,其任务是估计用户点击推荐项目的概率。 在CTR预测中,学习用户点击行为背后的隐式特征交互是非常重要的。 本文主要介绍了一种更有效的学习低维特征与高维度特征交互的CTR预测模型Deep FM。


核心思想

01


为了同时学习高阶和低阶的组合特征,Deep FM集成了因子分解机(FM)和深度神经网络(DNN)的体系结构。 FM算法负责对一阶特征以及二阶特征(由一阶特征交叉组合得到的)进行特征的提取; DNN算法负责对高阶特征进行特征的提取。


原理

02

Deep FM模型由FM部分和Deep部分组成,二者共享相同的输入,其结构图如上所示。 原始的输入在经过embleing(借鉴了FM的思想)之后分别传入了FM模块与DNN模块,二者进行联合训练 。 DeepFM的输出结果可以表示成 :


Embedding


为什么进行Embedding


CTR预测的原始输入中既包含离散型数据(例如: 性别),也包含连续型数据(例如: 年龄)。 离散型数据需要one-hot编码,连续型数据可以先离散化再one-hot编码,也可以直接保留原值。 但是在经过one-hot编码之后,数据会变得稀疏并且维度会升高,将one-hot类型的特征直接输入到DNN中,会导致网络参数过多。 为了解决这个问题,需将原始数据的one-hot根据不同的特征,分别将其编码进行Embedding,Embedding将输入向量压缩为低维,密集的实值向量,而且每个feature 在Embedding后长度均相同。


Embedding计算过程


下图为输入层到Embedding的结构:
FM算法中的隐向量V作为该嵌入层的权重矩阵,经过Embedding之后的结果为V与x_i的内积(V^(T) * x_i)。 如上图所示,k=5时,对于Field1来说,进行V与x_1的内积。
其中:
  • V_{ij}表示第i个特征Embeding之后在隐向量的第j维。
  • x_{1j}表示第1个field的one-hot特征的第j个值
相当于选中了V中的第二行。 由此,我们可以知道对于每一个field在经过Embedding后都会选出中V中的一行,将这些行拼接起来就得到了Embedding后的新的表示。 在具体实践过程中,Embedding是通过函数tf.nn.embedding_lookup()来实现的。


Note: 在FM部分和DNN部分,embedding是共享权重的,对同一个特征来说,得到的V_i 相同。虽然输入fields的长度不同,但是embedding之后的长度是一样的。


FM模块


FM部分是一个因子分解机,从下图FM的结构图中可以知道,FM部分主要是对一维特征与二维交叉特征进行建模。 对于一维部分进行了Addition运算,对于二维交叉特征主要通过隐向量V_i和V_j的内积进行运算。


FM的输出公式为:
其中:
  • d是输入one-hot之后的维度(对应FM论文中的n)

tips:请点击FM查看FM的具体推倒过程


Deep模块


Deep 部分是一个前向NN,用于学习更高阶的交叉特征,其结构图如下所示:
原始的高维稀疏特征向量被Embedding层压缩成低维稠密特征向量,然后再送入NN的hidden layer。  Embedding层的输出是一个m×k维向量表示为a^(0),做为DNN的第一层输入,之后每一层和前一层的关系都可表示为下式:
最终DNN的输出是 :



实践

03


在github上有很多实现Deep FM的代码,主要分为构造数据与构建模型。 为了更好地理解Deep FM的工作机制,我们使用简单的数据集,来具体实践应用Deep FM进行简单的二分类。


数据集


为了方便查看每一个变量的值,自己构造了简单的数据集,数据集示例如下:
如果想使用真实的数据集,可以点击porto seguro's safe driver prediction下载Porto seguro的安全驾驶数据集,该数据集是根据汽车保单持有人数据预测该持有人是否会在次年提出索赔。


数据构造(data.py)


在数据构造部分主要是将原始数据分为仅包含各个特征索引值的字典与仅包含各个特征取值的字典。 对于连续型特征索引值只有一个,取值还是原始数据值本身,对于离散型变量,索引值有多个(该特征有多少个取值就是多少个)取值为1。
在经过构造之后,原始数据变为:

模型构造(main.py)


  • 加载数据


调用函数FeatureDictionary()与DataParser()获得训练数据与测试数据。
   数据示例如下:


  • 构建模型


 在构建模型之前,需要对变量进行初始化以及维度设定,变量包含embedding、FM、DNN、输出层四部分,具体如下:
Deep FM模型主要包括Embedding、DNN、FM模块的一维特征以及FM模块的交叉项特征这四部分。


① Embedding
在Embedding层,通过tf.nn.embedding_lookup()函数根据输入特征的索引号找到对应权重中的一行。
② FM模块的一维特征
对于一维特征计算中的 y_first_order是Sparse Featues 到 FM Layer中Addition Unit的全连接,相当于进行了为1的embedding。


③ FM模块的交叉项特征
④ DNN
⑤ 输出


训练


训练结果为:


预测



获取代码

请关注专知公众号(点击上方蓝色专知关注

后台回复“初学者系列deepFM”即可获取数据集以及全部代码。


参考链接:
https://github.com/gutouyu/ML_CIA/blob/master/DeepFM
https://github.com/ChenglongChen/tensorflow-DeepFM


-END-
专 · 知


专知,专业可信的人工智能知识分发,让认知协作更快更好!欢迎登录www.zhuanzhi.ai,注册登录专知,获取更多AI知识资料!
欢迎微信扫一扫加入专知人工智能知识星球群,获取最新AI专业干货知识教程视频资料和与专家交流咨询
请加专知小助手微信(扫一扫如下二维码添加),加入专知人工智能主题群,咨询技术商务合作~
专知《深度学习:算法到实战》课程全部完成!560+位同学在学习,现在报名,限时优惠!网易云课堂人工智能畅销榜首位!
点击“阅读原文”,了解报名专知《深度学习:算法到实战》课程
登录查看更多
108

相关内容

FM 2019是正式方法欧洲(FME)组织的系列国际研讨会中的第23次,该协会是一个独立的协会,旨在促进软件开发正式方法的使用和研究。官网链接:http://formalmethods2019.inesctec.pt/?page_id=565
神经网络的拓扑结构,TOPOLOGY OF DEEP NEURAL NETWORKS
专知会员服务
31+阅读 · 2020年4月15日
近期必读的6篇顶会WWW2020【推荐系统】相关论文-Part3
专知会员服务
57+阅读 · 2020年4月14日
【MIT深度学习课程】深度序列建模,Deep Sequence Modeling
专知会员服务
77+阅读 · 2020年2月3日
MATLAB玩转深度学习?新书「MATLAB Deep Learning」162页pdf
专知会员服务
99+阅读 · 2020年1月13日
六篇 CIKM 2019 必读的【图神经网络(GNN)】长文论文
专知会员服务
37+阅读 · 2019年11月3日
初学者系列:推荐系统Wide & Deep Learning详解
业界 | 从FM推演各深度CTR预估模型(附代码)
大数据文摘
8+阅读 · 2018年7月16日
CTR预估专栏 | 一文搞懂DeepFM的理论与实践
AI前线
13+阅读 · 2018年7月6日
LibRec 每周算法:DeepFM
LibRec智能推荐
14+阅读 · 2017年11月6日
LibRec 每周算法:NFM (SIGIR'17)
LibRec智能推荐
7+阅读 · 2017年10月17日
Arxiv
15+阅读 · 2020年2月6日
Deep Learning for Generic Object Detection: A Survey
Arxiv
13+阅读 · 2018年9月6日
Arxiv
22+阅读 · 2018年8月30日
Arxiv
15+阅读 · 2018年6月23日
Arxiv
5+阅读 · 2018年6月5日
VIP会员
相关资讯
初学者系列:推荐系统Wide & Deep Learning详解
业界 | 从FM推演各深度CTR预估模型(附代码)
大数据文摘
8+阅读 · 2018年7月16日
CTR预估专栏 | 一文搞懂DeepFM的理论与实践
AI前线
13+阅读 · 2018年7月6日
LibRec 每周算法:DeepFM
LibRec智能推荐
14+阅读 · 2017年11月6日
LibRec 每周算法:NFM (SIGIR'17)
LibRec智能推荐
7+阅读 · 2017年10月17日
Top
微信扫码咨询专知VIP会员