这一篇,我们将介绍微软BING AD团队提出的Deep Crossing模型,用来解决大规模特征组合问题的模型,这些特征可以是稠密的,也可以是稀疏的,从而避免了人工进行特征组合,并使用了当年提出的残差神经网络。这个模型也算是深度学习在推荐系统的完整应用了:完整的解决了特征工程、稀疏向量稠密化、多层神经网络进行优化等一些列深度学习的目标应用。

特征

微软在广告场景中所使用的特征如下面所示:

  • 查询。

    用户在搜索框中输入的文本字符串
  • 关键字

    与产品相关的文本字符串,广告主添加的其产品描述词
  • 标题

    赞助广告的标题(简称为"广告",以下简称 "广告"),由广告主指定,以获取关注度
  • 落地页

    用户点击了相应的广告之后进入的页面
  • 匹配类型

    给广告商的一个选项,包括精准匹配、短语匹配、语义匹配等等
  • 点击

    显示是否有一个印象被点击用户的点击。点击通常会与运行时的其他信息一起被记录下来
  • 点击率

    广告的历史点击率
  • 点击预测

    平台的关键模式,即预测用户点击给定广告的可能性。
  • 广告计划

    广告主创造的投放广告的计划、包括预算、定向条件等
  • 曝光样例

    一个广告“曝光”的例子,记录了广告在实际曝光场景的相关信息
  • 点击阳历

    一个广告“点击”的例子,记录了广告在实际点击场景的相关信息

模型结构

网络的主要模型结构如下图所示

可以看出网络结构主要包括4种网络层——Embedding层,Stacking层,Multiple Residual Units层以及Scoring层。所需要的优化目标也是很常见的点击与否的二分类log损失:

\[logloss=-\frac{1}{N}\sum_{1}^{N}(y_i\log(p_i))+(1-y_i)\log(1-p_i))
\]

Embedding层

Embedding层以全连接层为主,主要目的是用来将稀疏的特征类别特征转化成稠密的Embedding向量,一般来说,Embedding向量的维度要远小于原始的洗漱特征向量。数值类型的特征不需要经过Embedding层而直接进入Stacking层。从下面的公式也能看出,所使用的激活函数是ReLU函数。

\[X^O_j=\max(0, W_jX_j^I+b_j)
\]

Stacking层

Stacking层比较简单,将所有的Embedding向量与数值类型的特征拼接在一起,从而形成新的特征向量,该层也常被成为连接层(Concatenate)。

Multiple Residual Untis层

这个层主要大量使用了带有残差的多层感知机,也就是借鉴了ResNet的残差的思想进行优化的网络结构。通过多层残差网络对特征向量的各个维度进行充分的交叉组合,使得模型能够捕捉到更多的非线性特征以及组合特征的信息,同时残差也使得网络变得更深以及更容易优化。下图就是一个残差单元的结构:

将原始的输入和通过网络层的输出进行逐元素相加,也被称为短路(Shortcut)操作。

\[X^O=\mathcal{F}(X^I,\{W_0, W_1\},\{b_0,b_1\})+X^I
\]

Scoring层

Scoring层作为输出层,为了拟合优化目标存在的,如CTR预估这种二分类模型,Scoring层往往使用的逻辑回归模型,对于图像分类等多分类模型,Scoring层使用的Softmax模型。

小结

作为一个“Embedding+多层神经网络”的结构,在历史上是具有革命意义的,没有使用任何的人工特征,并且相对于FM/FFM等模型,做到了通过调整网络层数进行深度特征交叉。这也是Deep Crossing模型的名字由来。

参考

Deep Crossing: Web-Scale Modeling without Manually Crafted Combinatorial Features

最新文章

  1. Spring Data JPA
  2. 访问路径:https://i.cnblogs.com/posts?categoryid=925678
  3. Linux Bash命令关于程序调试详解
  4. [改善Java代码]不要覆写静态方法
  5. GSON 示例代码 实用版
  6. 201521123017 《Java程序设计》第10周学习总结
  7. 浅析Entity Framework Core中的并发处理
  8. bzoj1001(对偶图最短路)
  9. elastaticresearch 学习过程
  10. Sql Server 索引以及页和区
  11. [Zabbix3.0 ]添加Nginx监控
  12. Java开发笔记(八十九)缓存字节I/O流
  13. vs2017 重新生成报错 MSB4057 BuildDependsOn DependsOnTargets ContainerPrepareForLaunch 解决办法
  14. Python:Day51 web框架
  15. Vue(基础四)_总结五种父子组件之间的通信方式
  16. VS2017使用Git进行源代码管理
  17. SQL记录-PLSQL日期与时间
  18. [svc]linux正则及grep常用手法
  19. (转)代号为Purley的新一代服务器平台
  20. C++中模板与泛型编程

热门文章

  1. javascript实现文件上传之前的预览功能
  2. 面试BAT必问的JVM,今天我们来说一说它类加载器的底层原理
  3. 听法国设计师大卫·维森特讲述他与CorelDRAW的渊源
  4. Guitar Pro吉他指弹入门——特殊调弦
  5. 为什么企业需要CRM系统?CRM的作用及其重要性分析
  6. js 实现textarea剩余字数统计
  7. JAVA 中的Optional (臭名昭著的空指针异常(NullPointerException))
  8. presto 访问kudu 多schemas配置
  9. Django的静态文件的配置
  10. MyBatis-01:环境搭建