zoukankan      html  css  js  c++  java
  • 推荐系统实践 0x10 Deep Crossing

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

    特征

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

    • 查询。
      用户在搜索框中输入的文本字符串
    • 关键字
      与产品相关的文本字符串,广告主添加的其产品描述词
    • 标题
      赞助广告的标题(简称为"广告",以下简称 "广告"),由广告主指定,以获取关注度
    • 落地页
      用户点击了相应的广告之后进入的页面
    • 匹配类型
      给广告商的一个选项,包括精准匹配、短语匹配、语义匹配等等
    • 点击
      显示是否有一个印象被点击用户的点击。点击通常会与运行时的其他信息一起被记录下来
    • 点击率
      广告的历史点击率
    • 点击预测
      平台的关键模式,即预测用户点击给定广告的可能性。
    • 广告计划
      广告主创造的投放广告的计划、包括预算、定向条件等
    • 曝光样例
      一个广告“曝光”的例子,记录了广告在实际曝光场景的相关信息
    • 点击阳历
      一个广告“点击”的例子,记录了广告在实际点击场景的相关信息

    模型结构

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

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

    [logloss=-frac{1}{N}sum_{1}^{N}(y_ilog(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

  • 相关阅读:
    POJ 1113 Wall
    POJ 2159 Ancient Cipher
    POJ 3253 Fence Repair
    HDU 5444 Elven Postman
    HDU 5432 Pyramid Split
    数据库 组合查询
    数据库 简单的数据查询
    数据库 聚合函数与分组
    数据库 使用DML语句更改数据
    数据库的数据完整性
  • 原文地址:https://www.cnblogs.com/nomornings/p/14149944.html
Copyright © 2011-2022 走看看