http://www.fabwrite.com/deepfm

文章DeepFM: A Factorization-Machine based Neural Network for CTR Prediction介绍了一种深度学习模型,以实现点击率预估。用 tensorflow 试着写了 DeepFM,见https://github.com/zgw21cn/DeepFM

1. FNN、PNN、wide&deep等此前几种深度模型

见下图。 (1) FNN,见图左边。用 FM 预训练embedding layer,然后DNN训练。作者认为有两点局限:embedding layer 的参数会受到 FM 的影响;预训练计算量大,效率问题。同时 FNN仅能捕捉高阶特征,相比之下,DeepFM 无需预训练,且能捕捉高阶和低阶特征。

(2) PNN,见图中间。为了捕捉高阶特征间的组合作用,PNN在 embedding layer 和首层 hidden layer 间引入了 product layer。根据 product 类型的不同,有多种类型的 product layer。product 类型有内积、外积、内积和外积的混合。

PNN的局限在于,外积由于是近似计算会丢失信息而比内积不可靠;内积更可靠,但是仍会计算量大。类似于 FNN,PNN忽略了低阶特征。

(3) Wide&Deep,见图右边。Google 提出的 Wide&Deep可以同时刻画低阶和高阶特征,但是在wide 部分仍需要做人工特征工程。

对比表格如下。

2. DeepFM

(1) DeepFM 类似于Wide&Deep模型的结构,由 FM 和 DNN 两部分组成。FM描述低阶特征,而 DNN 描述高阶特征。不同于 Wide&Deep,DeepFM 无需特征工程。

(2) 不同于 Wide&Deep,DeepFM 共享相同的输入和 embedding 向量,训练更高效。Wide&Deep 模型中的 Wide 需要人工设计交互特征。

结构如下图。

设DeepFM 的输入为{x,y}{x,y},这里xx包括category 特征及 continuous 特征。category 特征已经过 one-hot 编码,所以xx 是高阶且稀疏的。

DeepFM 包括 FM和 DNN两部分,最终输出也由这两部分联合训练。 math \hat{y}=sigmoid(y_{FM}+y_{DNN})

(1) FM 部分

FM 部分的输出如下。

yFM=⟨w,x⟩+d∑j1=1d∑j2=j1+1⟨Vi,Vj⟩xj1⋅xj2yFM=⟨w,x⟩+∑j1=1d∑j2=j1+1d⟨Vi,Vj⟩xj1⋅xj2

(2) DNN 部分

DNN 部分主要是为了刻画高维特征。由于 CTR预估的输入是高维稀疏、category 和 continuous 混合的向量,在输入给第一层隐藏层前,需要增加一个 embedding层,以将上述向量压缩为低维、稠密的实向量。

这里 的DNN模型有两个特点:(1) 不同长度的输入向量,其在隐藏层的长度是相同的。(2) FM 中的隐藏向量VV,现在作为将 one-hot 编码后的输入向量到embedding层的权重。

如下图。

这里假设a(0)=(e1,e2,...em)a(0)=(e1,e2,...em)表示 embedding层的输出,那么a(0)a(0) 作为下一层 DNN隐藏层的输入,其前馈过程如下。 math a^{(l+1)}= \sigma (W^{(l)}a^{(l)}+b^{(l)})

用 tensorflow实现DeepFM的更多相关文章

  1. DeepFM——tensorflow代码改编

    本人代码库: https://github.com/beathahahaha/tensorflow-DeepFM-master-original DeepFM原作者代码库: https://githu ...

  2. DeepFM算法解析及Python实现

    1. DeepFM算法的提出 由于DeepFM算法有效的结合了因子分解机与神经网络在特征学习中的优点:同时提取到低阶组合特征与高阶组合特征,所以越来越被广泛使用. 在DeepFM中,FM算法负责对一阶 ...

  3. 基于TensorFlow Serving的深度学习在线预估

    一.前言 随着深度学习在图像.语言.广告点击率预估等各个领域不断发展,很多团队开始探索深度学习技术在业务层面的实践与应用.而在广告CTR预估方面,新模型也是层出不穷: Wide and Deep[1] ...

  4. tfserving 调用deepfm 并预测 java 【参考】

    https://blog.csdn.net/luoyexuge/article/details/79941565?utm_source=blogxgwz8 首先是libsvm格式数据生成java代码, ...

  5. deepfm代码参考

    https://github.com/lambdaji/tf_repos/blob/master/deep_ctr/Model_pipeline/DeepFM.py https://www.cnblo ...

  6. 推荐算法之: DeepFM及使用DeepCTR测试

    算法介绍 左边deep network,右边FM,所以叫deepFM 包含两个部分: Part1: FM(Factorization machines),因子分解机部分 在传统的一阶线性回归之上,加了 ...

  7. deepFM(原理和pytorch理解)

    参考(推荐):https://blog.csdn.net/w55100/article/details/90295932 要点: 其中的计算优化值得注意 K代表隐向量维数 n可以代表离散值one-ho ...

  8. Tensorflow 官方版教程中文版

    2015年11月9日,Google发布人工智能系统TensorFlow并宣布开源,同日,极客学院组织在线TensorFlow中文文档翻译.一个月后,30章文档全部翻译校对完成,上线并提供电子书下载,该 ...

  9. tensorflow学习笔记二:入门基础

    TensorFlow用张量这种数据结构来表示所有的数据.用一阶张量来表示向量,如:v = [1.2, 2.3, 3.5] ,如二阶张量表示矩阵,如:m = [[1, 2, 3], [4, 5, 6], ...

随机推荐

  1. 咸鱼入门到放弃1--JDBC

    JDBC参考微博https://www.cnblogs.com/surfcater/p/10224502.html 主要内容 1.JDBC相关概念 2.JDBC常用接口 driver connecti ...

  2. 071 SparkStreaming与SparkSQL集成

    1.说明 虽然DStream可以转换成RDD,但是如果比较复杂,可以考虑使用SparkSQL. 2.集成方式 Streaming和Core整合: transform或者foreachRDD方法 Cor ...

  3. Http和RPC区别

    本文转自:https://blog.csdn.net/mou_it/article/details/79873612 RPC(即Remote Procedure Call,远程过程调用)和HTTP(H ...

  4. sql union 列的字段不一样的时候

  5. python 配置导入方式

    许多连接,如 from setting import redis_config pool= redis.ConnectionPool(**redis_config) r=redis.Redis(con ...

  6. css position相对定位与绝对定位彻底搞懂

    定位position position本身就有给...定位的意思 position属性的值: static ---默认值 relative ---相对定位 absolute ---绝对定位 fixed ...

  7. python简单名片管理系统

  8. bootstrap之FONTAWESOME 图标

    终于暂时的结束了winform迎来了B/S的项目,这个需要我们自己写前端页面,要用bootstrap搭页面,本人小白,正在慢慢摸索中,主要记录遇到的问题,及解决办法. 第一个,显示时间选择的控件.我在 ...

  9. SQL Server中的标识列

    一.标识列的定义以及特点 SQL Server中的标识列又称标识符列,习惯上又叫自增列. 该种列具有以下三种特点: .列的数据类型为不带小数的数值类型 .在进行插入(Insert)操作时,该列的值是由 ...

  10. BZOJ.2006.[NOI2010]超级钢琴(贪心 堆)

    BZOJ 洛谷 思路和BZOJ3784一样,用前缀和+堆维护.做那题吧,不赘述啦. (没错我就是水一个AC) //54620kb 1060ms #include <queue> #incl ...