背景

假设现在有个商品点击预测的任务,有用户端特征性别、年龄、消费力等,商品侧特征价格、销量等,样本为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预估模型的更多相关文章

  1. 几句话总结一个算法之Q-Learning与Sarsa

    与Policy Gradients的不同之处在于,这两个算法评估某个状态s执行某个动作a的期望奖励,即Q(s,a) Q(s,a) 有两种方法计算方法,第一种直接查表或者模型预估,Q(s, a) = c ...

  2. 几句话总结一个算法之RNN、LSTM和GRU

    RNN 一般神经网络隐层的计算是h=g(w * x),其中g是激活函数,相比于一般神经网络,RNN需要考虑之前序列的信息,因此它的隐藏h的计算除了当前输入还要考虑上一个状态的隐藏,h=g(w*x+w' ...

  3. 几句话总结一个算法之DQN

    DQN利用深度学习对Q-learning的一个扩展,回顾上篇文章,Q-learning的核心在于Q(s,a)的建模.如果状态s非常复杂,很难通过一张表来存储所有的状态. 深度学习正好可以自动提取s的特 ...

  4. 几句话总结一个算法之Policy Gradients

    强化学习与监督学习的区别在于,监督学习的每条样本都有一个独立的label,而强化学习的奖励(label)是有延后性,往往需要等这个回合结束才知道输赢 Policy Gradients(PG)计算某个状 ...

  5. CTR预估模型演变及学习笔记

    [说在前面]本人博客新手一枚,象牙塔的老白,职业场的小白.以下内容仅为个人见解,欢迎批评指正,不喜勿喷![握手][握手] [再啰嗦一下]如果你对智能推荐感兴趣,欢迎先浏览我的另一篇随笔:智能推荐算法演 ...

  6. 主流CTR预估模型的演化及对比

    https://zhuanlan.zhihu.com/p/35465875 学习和预测用户的反馈对于个性化推荐.信息检索和在线广告等领域都有着极其重要的作用.在这些领域,用户的反馈行为包括点击.收藏. ...

  7. 闲聊DNN CTR预估模型

    原文:http://www.52cs.org/?p=1046 闲聊DNN CTR预估模型 Written by b manongb 作者:Kintocai, 北京大学硕士, 现就职于腾讯. 伦敦大学张 ...

  8. 深度CTR预估模型中的特征自动组合机制演化简史 zz

    众所周知,深度学习在计算机视觉.语音识别.自然语言处理等领域最先取得突破并成为主流方法.但是,深度学习为什么是在这些领域而不是其他领域最先成功呢?我想一个原因就是图像.语音.文本数据在空间和时间上具有 ...

  9. 【转】- 从FM推演各深度CTR预估模型(附代码)

    从FM推演各深度CTR预估模型(附代码) 2018年07月13日 15:04:34 阅读数:584 作者: 龙心尘 && 寒小阳 时间:2018年7月 出处: 龙心尘 寒小阳

随机推荐

  1. 使用Jenkins来实现内部的持续集成流程(下)

    目录 配置项目构建 添加任务 添加源代码地址和登录凭据 添加构建触发器  TFS添加WebHook  添加构建步骤 后端UI  API端  配置项目构建 1.添加任务 2.添加源代码地址和登录凭据 添 ...

  2. Java : JavaWeb和Tomcat相关

    部署:1.直接把项目移动到webapps文件夹下, 用文件夹名访问(如果ROOT文件夹可以直接访问)2.也可以把war包放到webapps文件夹下, tomcat自动解压,但是删除war包必须要停止t ...

  3. 使用python远程连接数据库

    根据web连接服务的原理,我们可以通过一台电脑连接我们另一台电脑上的数据库 一.开启数据库的权限1.Mysql:1)修改访问权限首先修改可以访问的ip,把‘localhost’全部修改为‘%’,打开c ...

  4. linux服务器可以访问IP访问不了域名地址

    1.curl www.baidu.com报错,curl 183.232.231.173可以或者nslookup+域名,nslookup+IP2.这个是因为linux服务器没有配置DNS域名服务器地址导 ...

  5. Python程序调试工具Py-Spy

    序言 如果你是从Java语言开发转Python开发,可能在庆幸自己的开发效率提高了很多,但是也有痛苦的时候,比如你会怀念jstack,jmap, 等各种工具在生产环境做perfomance tunin ...

  6. Java 线程的基本使用

    GitHub Page: http://blog.cloudli.top/posts/Java-线程的基本使用/ 创建线程 创建线程的方式有两种: 继承 Thread 类 实现 Runnable 接口 ...

  7. Python中的@函数装饰器到底是什么?

    在解释@函数装饰器之前,先说一下,类中的类方法和静态方法. 在Python中完全支持定义类方法.静态方法.这两种方法很相似,Python它们都使用类来调用(ps:用对象调用也可以). 区别在于:Pyt ...

  8. 关于spring中请求返回值的json序列化/反序列化问题

    https://cloud.tencent.com/developer/article/1381083 https://www.jianshu.com/p/db07543ffe0a 先留个坑

  9. android studio学习---标签页分离,满足查同一个文件的不同部分

    分离一个标签窗口:右键标签页,打开上下文菜单,选择Split Vertically or Split Horizontall改变分离窗口的摆放方式:右键标签页,打开上下文菜单,选择 Change Sp ...

  10. Nginx 高级配置-实现多域名HTTPS

    Nginx 高级配置-实现多域名HTTPS 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Nginx支持基于单个IP实现多域名的功能 Nginx支持基于单个IP实现多域名的功能 ...