几句话总结一个算法之CTR预估模型
背景
假设现在有个商品点击预测的任务,有用户端特征性别、年龄、消费力等,商品侧特征价格、销量等,样本为0或者1,现在对特征进行one hot encode,如性别特征用二维表示,男为[1,0],女为[0,1],其他特征相同处理后拼接起来一共有n维,n是所有特征的类别数之和。
Logistic Regression(LR)与二阶
线性模型,y = sigmoid(w, x),w有n维,优点是简单易解释,缺点是太简单,无法挖掘特征组合的情况,如男性+游戏类商品可能是个很强特征。为了弥补这个缺点往往需要人工特征组合,如 手工组合特征 f = 性别是否男 & 商品是否为游戏类,这很依赖人工经验。于是就有了暴力的方法,枚举所有的两两特征的组合(线性二阶多项式),训练参数最大有 n * n个,但是性别男和性别女(相同性别field内)是无法组合的,真实值没这么大。假设与n个特征,m个field,相同field 内部无法组合,则训练参数为0.5 * (n * n - (n/m * n/m) * m )
FM(Factorization Machines)
上面的LR线性二阶多项式参数空间是一个 n * n 的矩阵,过于庞大,可以用两个矩阵相乘得到,这两个矩阵的的维度是 n * k 和 k * n,那么参数空间就是 2 * n * k,k是人为设置的参数,大小可以调节,如果k远远小于n,则参数数量将极大变小,更进一步,这两个矩阵可以用一个矩阵和它的转置来表示。
从embedding角度看,假设k为2,”男性和游戏类目“分别可以在这个矩阵中找到一个2维的向量表示,这两个向量的内积就表示了组合特征对预测结果的影响。
LR的二阶特征组合参数是独立的,如”男性&游戏类目“只看这个特征对最终结果的影响,注重记忆功能;而FM里面,男性这个特征的embedding受到的是来自于各个特征组合的影响,并不独立,注重泛化功能,效果上并不一定比LR二阶更好,但是参数空间是实实在在减少了,另外,FM要求特征embedding后的size一样大小,淘宝百万店铺,十个年龄层级性别,明显不太合适这种方法。
FFM(Field-aware Factorization Machines)
FFM是考虑领域知识的一种FM变种,上面介绍FM,男性这个特征的embedding受到的是来自于各个特征组合的影响,能不能降低这个影响?答案是考虑领域知识。假设有m个field,则男性对每个field都建立一个embedding,参数个数是 n * k *m,这是个鉴于二阶LR和FM之间的一个方法,”男性&游戏类目“ 中的男性这向量,还是受到其他类目组合的影响,但是不受到”男性&价格“这类特征组合的影响。
Embedding + MLP(Multilayer Perceptron)
底层所有特征都做embedding,连接起来,上面再堆叠多层全连接层,这里没有底层特征的组合,但是在可以在高阶组合,学习难度更大。与FM的优势在于,各个特征embedding的长度可以不用保持一致,这样的设置更为合理。
FNN
通过FM预训练embedding,上面再堆叠多层全连接层,是一种特殊的embedding + MLP。
DeepFM
embedding + MLP的方式没有考虑底层(低阶)特征的组合,DeepFM把FM的组合特征引入到 MLP充当”wide部分“,同时MLP也使用了FM的embedding表示联合训练。
NFM(Neural Factorization Machines)
FM是把两个向量做内积,即先把对应位置的元素相乘,后直接相加求和当做组合特征。NFM让两个特征的向量元素相乘,但是不急于直接求和组成特征,而是把所有组合特征元素在各自对应的位置累加起来,做当MLP的输入,个人感觉这种操作底层特征的信息丢失很大。
AFM(Attention Factorization Machine)
所有组合特征元素在各自对应的位置累加起来,AFM在NFM的基础上加入attention子网络,不再是平均求和,而是加权求和。
PNN(Product-based Neural Network)
DeepFM把FM的组合特征引入到 MLP充当”wide部分“,PNN直接FM的组合特征的内积或外积当做deep部分输入,但是这样又会导致product层的节点数至少是输入Field数的平方级别,为了降低节点数,采用外积后的sum pooling降低复杂度,又回到NFM的路子。
DCN(Deep&Cross Network)
采用了残差网络的思想,在高阶进行特征组合,残差 = 上一个隐层的转置 * 该层参数w * 第一个隐层,其中w是要学习的参数,上一个隐层的转置 * w 实际上就是个标量了。下一个隐藏 = 残差 + 上一个隐层+ 偏置项。
几句话总结一个算法之CTR预估模型的更多相关文章
- 几句话总结一个算法之Q-Learning与Sarsa
与Policy Gradients的不同之处在于,这两个算法评估某个状态s执行某个动作a的期望奖励,即Q(s,a) Q(s,a) 有两种方法计算方法,第一种直接查表或者模型预估,Q(s, a) = c ...
- 几句话总结一个算法之RNN、LSTM和GRU
RNN 一般神经网络隐层的计算是h=g(w * x),其中g是激活函数,相比于一般神经网络,RNN需要考虑之前序列的信息,因此它的隐藏h的计算除了当前输入还要考虑上一个状态的隐藏,h=g(w*x+w' ...
- 几句话总结一个算法之DQN
DQN利用深度学习对Q-learning的一个扩展,回顾上篇文章,Q-learning的核心在于Q(s,a)的建模.如果状态s非常复杂,很难通过一张表来存储所有的状态. 深度学习正好可以自动提取s的特 ...
- 几句话总结一个算法之Policy Gradients
强化学习与监督学习的区别在于,监督学习的每条样本都有一个独立的label,而强化学习的奖励(label)是有延后性,往往需要等这个回合结束才知道输赢 Policy Gradients(PG)计算某个状 ...
- CTR预估模型演变及学习笔记
[说在前面]本人博客新手一枚,象牙塔的老白,职业场的小白.以下内容仅为个人见解,欢迎批评指正,不喜勿喷![握手][握手] [再啰嗦一下]如果你对智能推荐感兴趣,欢迎先浏览我的另一篇随笔:智能推荐算法演 ...
- 主流CTR预估模型的演化及对比
https://zhuanlan.zhihu.com/p/35465875 学习和预测用户的反馈对于个性化推荐.信息检索和在线广告等领域都有着极其重要的作用.在这些领域,用户的反馈行为包括点击.收藏. ...
- 闲聊DNN CTR预估模型
原文:http://www.52cs.org/?p=1046 闲聊DNN CTR预估模型 Written by b manongb 作者:Kintocai, 北京大学硕士, 现就职于腾讯. 伦敦大学张 ...
- 深度CTR预估模型中的特征自动组合机制演化简史 zz
众所周知,深度学习在计算机视觉.语音识别.自然语言处理等领域最先取得突破并成为主流方法.但是,深度学习为什么是在这些领域而不是其他领域最先成功呢?我想一个原因就是图像.语音.文本数据在空间和时间上具有 ...
- 【转】- 从FM推演各深度CTR预估模型(附代码)
从FM推演各深度CTR预估模型(附代码) 2018年07月13日 15:04:34 阅读数:584 作者: 龙心尘 && 寒小阳 时间:2018年7月 出处: 龙心尘 寒小阳
随机推荐
- GT性能测试Android版使用说明
1 GT简介 GT(随身调) Android版是腾讯 MIG 专项测试组自行研发的 Android APP 随身调测平台,它是直接运行在手机上的“集成调测环境”(ITE, Integrated Tes ...
- 『快乐链覆盖 树形dp』
快乐链覆盖 Description 给定一棵 n 个点的树,你需要找至多 k 条互不相交的路径,使得它们的长度之和最大 定义两条路径是相交的:当且仅当存在至少一个点,使得这个点在两条路径中都出现 定义 ...
- Neo4j 第八篇:投射和过滤
投射子句用于定义如何返回数据集,并可以对返回的表达式设置别名,而过滤子句用于对查询的结果集按照条件进行过滤 一,Return子句 使用return子句返回节点,关系和关系. 1,返回节点 MATCH ...
- sql server 分页总结
1.第一种方式:使用 ROW_NUMBER() OVER(ORDER BY ID) …… BETWEEN AND 的方式SELECT * FROM( SELECT ROW_NUMBER() OVER( ...
- Git远程协作和分支
一.远程基本操作 基本的配置远程仓库有两个命令: git remote add origin git@github.com:ZXZxin/gitlearn.git : git push -u orig ...
- Java自学-I/O 字节流
Java 字节流 InputStream OutputStream InputStream字节输入流 OutputStream字节输出流 用于以字节的形式读取和写入数据 步骤 1 : ASCII码 所 ...
- windows10风格 springboot vue.js html 跨域 前后分离 activiti 整合项目框架源码
官网:www.fhadmin.org 此项目为Springboot工作流版本 windows 风格,浏览器访问操作使用,非桌面应用程序. 1.代码生成器: [正反双向](单表.主表.明细表.树形表,快 ...
- js数组去重 数组拼接 替换数组中的指定值 递归数组 判断数组中是否存在指定值 数组求和 根据条件判数组值
这是学习过程中记录的一些关于数组操作的常用属性或方法,记录一下方便以后使用. // 数组去重 var arr1 = [1,1,2,3,4,5,6,3,2,4,5,'a','b','c','a',6,7 ...
- There is already an open DataReader associated with this Command which must be closed first
通常出现在嵌套查询数据库(比如在一个qry的遍历时,又进行了数据库查询) 通过在连接字符串中允许MARS可以轻松解决这个问题. 将MultipleActiveResultSets = true添加到连 ...
- 转载--从输入URL到页面展示到底发生了什么
最近我也在看http协议, tcp相关知识, 在吃饭时无意看到来一篇文章讲解“从输入URL到页面展示到底发生了什么”, 细细看完, 很值得回味, 所以转载, 以供日后在温习. (PS, 作者这篇文章发 ...