背景

假设现在有个商品点击预测的任务,有用户端特征性别、年龄、消费力等,商品侧特征价格、销量等,样本为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. 34 个今年11月最受欢迎的 JavaScript 库

    作者:Iren Korkishko 译者:前端小智 来源:dev 点赞再看,养成习惯 本文 GitHub:github.com/qq449245884… 上已经收录,更多往期高赞文章的分类,也整理了很 ...

  2. Queue接口分析:add和offer区别,remove和poll方法到底啥区别

    Queue接口: public interface Queue<E> extends Collection<E> { /* * add方法,在不违背队列的容量限制的情况,往队列 ...

  3. 设计模式之(十三)外观模式(Facade)

    外观模式思想 历史上牛人中成功逆袭,实现人生辉煌的人很多,这群人最耀眼的无疑是明太祖朱元璋,从一个放牛讨饭的最低层小屌丝逆袭到人类权力顶峰开国皇帝,确实是我等膜拜的对象.在发不断的发展过程中,其实就在 ...

  4. 踩坑ios H5

    目录 input获取焦点时,页面被放大 ios input输入时白屏 软键盘撑起页面下不来 ios页面滚动不流畅 position:fixed/absolute随屏幕滚动 1.input获取焦点时,页 ...

  5. vue-router 在新窗口打开页面的功能

    项目中,需要点击链接后再新窗口打开页面,大家知道vue是单页面应用开发框架,那么也不是不可以实现这个功能 很简单,详情看下面 1.<router-link>标签实现新窗口打开 <ro ...

  6. 理解AMD ,CMD,CommonJS规范

    https://blog.csdn.net/xcymorningsun/article/details/52709608 理解AMD ,CMD,CommonJS规范 2016年09月30日 10:33 ...

  7. 使用tcpdump监控http流量

    使用tcpdump监控http流量,具体内容包括:http request,http response,http headers以及http message body. 监控本机http流量 tcpd ...

  8. VUE+ElementUI 搭建后台项目(一)

    前言 之前有些过移动端的项目搭建的文章,感觉不写个pc端管理系统老感觉少了点什么,最近公司项目比较多,恰巧要做一个申报系统的后台管理系统,鉴于对vue技术栈比较熟悉,所以考虑还是使用vue技术栈来做: ...

  9. JMETER 使用断言

    断言概念 断言就是在执行某个请求后,根据返回的结果,判断返回是否正确,如果不正确,则表示事务失败. 添加断言 启动流程时返回的数据是一个 json对象,结构为 {success:true,msg:&q ...

  10. nginx设置开机自启

    环境:centos7 nginx1.16.1 方法一:(适用于centos7以上版本) 使用systemctl工具 方法二:(使用多种linux) 使用nginx官方的脚本,设置开机自启