用 tensorflow实现DeepFM
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 部分的输出如下。
(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的更多相关文章
- DeepFM——tensorflow代码改编
本人代码库: https://github.com/beathahahaha/tensorflow-DeepFM-master-original DeepFM原作者代码库: https://githu ...
- DeepFM算法解析及Python实现
1. DeepFM算法的提出 由于DeepFM算法有效的结合了因子分解机与神经网络在特征学习中的优点:同时提取到低阶组合特征与高阶组合特征,所以越来越被广泛使用. 在DeepFM中,FM算法负责对一阶 ...
- 基于TensorFlow Serving的深度学习在线预估
一.前言 随着深度学习在图像.语言.广告点击率预估等各个领域不断发展,很多团队开始探索深度学习技术在业务层面的实践与应用.而在广告CTR预估方面,新模型也是层出不穷: Wide and Deep[1] ...
- tfserving 调用deepfm 并预测 java 【参考】
https://blog.csdn.net/luoyexuge/article/details/79941565?utm_source=blogxgwz8 首先是libsvm格式数据生成java代码, ...
- deepfm代码参考
https://github.com/lambdaji/tf_repos/blob/master/deep_ctr/Model_pipeline/DeepFM.py https://www.cnblo ...
- 推荐算法之: DeepFM及使用DeepCTR测试
算法介绍 左边deep network,右边FM,所以叫deepFM 包含两个部分: Part1: FM(Factorization machines),因子分解机部分 在传统的一阶线性回归之上,加了 ...
- deepFM(原理和pytorch理解)
参考(推荐):https://blog.csdn.net/w55100/article/details/90295932 要点: 其中的计算优化值得注意 K代表隐向量维数 n可以代表离散值one-ho ...
- Tensorflow 官方版教程中文版
2015年11月9日,Google发布人工智能系统TensorFlow并宣布开源,同日,极客学院组织在线TensorFlow中文文档翻译.一个月后,30章文档全部翻译校对完成,上线并提供电子书下载,该 ...
- tensorflow学习笔记二:入门基础
TensorFlow用张量这种数据结构来表示所有的数据.用一阶张量来表示向量,如:v = [1.2, 2.3, 3.5] ,如二阶张量表示矩阵,如:m = [[1, 2, 3], [4, 5, 6], ...
随机推荐
- BZOJ2534 Uva10829L-gap字符串 字符串 SA ST表
原文链接https://www.cnblogs.com/zhouzhendong/p/9240665.html 题目传送门 - BZOJ2534 题意 有一种形如 $uvu$ 形式的字符串,其中 $u ...
- 删除Docker中所有已停止的容器
方法一: #显示所有的容器,过滤出Exited状态的容器,取出这些容器的ID, sudo docker ps -a|grep Exited|awk '{print $1}' #查询所有的容器,过滤出E ...
- URL简介
一般来说,http请求都会和URL地址有关,那么今天就来说说URL的组成部分. 实例:http://192.168.1.12/phpwind/searcher.php?keyword=phpwind& ...
- oracle的DBMS_JOB相关知识
http://langgufu.iteye.com/blog/1179235 查看当前定时任务 select job,next_date,next_sec,failures,broken from u ...
- Maya mayapy.exe 安装 Cython,编译 pyd
Maya mayapy.exe 安装 Cython,编译 pyd 前言 在 Python 2.7 cython cythonize py 编译成 pyd 谈谈那些坑 中最后提到,使用 VCForPy ...
- gdb调试若干问题
1.若干命令速查 file <文件名>:加载被调试的可执行程序文件.因为一般都在被调试程序所在目录下执行GDB,因而文本名不需要带路径.示例:(gdb) file gdb-sample r ...
- javascript 作用域详解
作用域理解:定义的变量.函数生效的范围.javascript 有全局作用域和函数作用域两种.注:es6实现let 块级作用域不是js原生的,底层同样是通过var实现的.如果想了解具体细节,请访问bab ...
- shell crlf to lf
UNIX/Linux Commands You can use the following tools: dos2unix (also known as fromdos) – converts tex ...
- Socket 网络通信
Socket 网络通信 1.OSI (Open System Interconnect Reference Model)(开放系统互联参考模型) 从下低到高 :物理层.数据链路层.网络层.传输层.会话 ...
- 通过ipmitool找回遗忘的iDrac地址
Background: 在使用Dell服务器的过程中,如果发生一下情况:可以进入系统,但是忘记iDrac卡的地址,在系统的某个Linux下,可以使用ipmitool这个工具来get一下硬件的信息,从而 ...