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. Shiro笔记(三)shiroFilter拦截器配置原则

    参考: http://blog.csdn.net/yaowanpengliferay/article/details/17281341

  2. 【python】数据库

    No1: [SQLite] 插入 # 导入SQLite驱动: >>> import sqlite3 # 连接到SQLite数据库 # 数据库文件是test.db # 如果文件不存在, ...

  3. Codefoces Gym 101652 【最大连续和】

    <题目链接> 题目大意: 给你一段只由 'B'和'R'组成的字符串,问你在连续的区间内,"B"和"R"的差值最大是多少,输出该区间:如果对于差值相等 ...

  4. 满血复活--来自世一大的WAR

    最需要复习的清单 1.二分 2.图论 3.数论 4.dp

  5. java、python与留下迷点的php hash collision

    JAVA 生成java的碰撞数据比较简单 根据网上资料可知: at,bU,c6的在java中的hash值是相同的 则可以根据这三个不断做 笛卡尔积 简单明了就是做字符串拼接. 举个例子 把A当做at, ...

  6. ftp服务器搭建流程详解

    随着项目的运行,项目的体积越来越庞大,于是将文件(这里包括所有上传的附件信息等)放在项目中已经显得很臃肿,项目运行的速度会越来越慢,逐步制约了项目的用户体验,为解决这一问题我们可以将项目剥离开来,让多 ...

  7. BZOJ.5249.[九省联考2018]iiidx(贪心 线段树)

    BZOJ LOJ 洛谷 \(d_i\)不同就不用说了,建出树来\(DFS\)一遍. 对于\(d_i\)不同的情况: Solution 1: xxy tql! 考虑如何把这些数依次填到树里. 首先对于已 ...

  8. BZOJ.3631.[JLOI2014]松鼠的新家(树上差分)

    题目链接 树剖/差分裸题.. //28260kb 584ms #include <cstdio> #include <cctype> #include <algorith ...

  9. Java并发编程(八)-- 死锁

    简介 当两个以上的运算单元,双方都在等待对方停止运行,以获取系统资源,但是没有一方提前退出时,就称为死锁.在多任务操作系统中,操作系统为了协调不同进程,能否获取系统资源时,为了让系统运作,必须要解决这 ...

  10. BZOJ3737 : [Pa2013]Euler

    首先枚举$n$的每个约数$d$,检查一下$d+1$是否是质数,这些数都有可能作为答案的质因子出现. 考虑爆搜,每次枚举下一个要在答案中出现的质因子$p$,将$n$除以$p-1$,再枚举$p$的指数,然 ...