【论文导读】Deep Crossing模型---使用残差网络作为MLP的具体实现

本文介绍了Deep Crossing模型,它用于微软Bing搜索广告推荐,通过残差网络自动实现特征交叉。模型包含Embedding、Stacking、Multiple Residual Units和Scoring层,减少了特征工程的需求。多个残差单元增强非线性和组合特征,提升模型表达能力。文章提供代码复现,并指出其在深度学习推荐系统历史上的重要意义。
摘要由CSDN通过智能技术生成

前言

本次分享一篇2016年提出的模型Deep Crossing,论文题目:“Deep Crossing: Web-Scale Modeling without Manually Crafted Combinatorial Features“。
本文约1.9k字,预计阅读15分钟。

Deep Crossing

Deep Crossing模型是微软于2016年在KDD上提出的模型,它算是第一个企业以正式论文的形式分享深度学习推荐系统的技术细节的模型。由于手工设计特征(特征工程)花费巨大精力,因此文章提出了Deep Crossing模型自动联合特征与特征交叉。以现在的角度看待这个模型是非常简单的,也就是Embedding+MLP的结构,但对当时影响是非常巨大。由于距离Deep Crosssing的提出已过去近4年,因此并不在涉及Introduction和Related Work两部分内容。但该模型的应用场景与之前的电商平台有所不同,因此需要简单提一下。

应用场景

Deep Crossing模型的应用场景是微软的搜索引擎Bing中的搜索广告的推荐场景,即文章提到的Sponsored search(赞助搜索)。当用户在搜索引擎中输入搜索词时,除了返回对应的搜索结果,还会有与搜索词相关的广告。这与之前单纯的电商场景不同,因为有搜索的关键词,那么推送给用户的广告将更为精确。如何提高广告的点击率以及转化率,这是Deep Crossing模型的优化目标。

模型特征

针对特定的应用背景,微软使用的特征如下:

  • Query(搜索):用户搜索的关键词;

  • Keyword(广告关键词):广告商对自己的产品广告打的标签,用于匹配用户的搜索词;

  • Title(标题):广告的标题;

  • Landing Page(落地网页):点击广告后跳转的网页;

  • Match Type(匹配类型):广告商可选择的关键字与用户查询的匹配程度,通常有四种:精确匹配、短语匹配、宽泛匹配和上下文相关匹配;

  • Campaign(广告计划):广告商投放的计划;

  • Imression(曝光样例):记录了该广告实际曝光场景的相关信息;

  • Click(点击样例):记录了该广告实际点击场景的相关信息;

  • Click Through Rate(点击率):广告的历史点击率

  • click prediction(预估点击率):另一个CTR模型的预估值;

文章给出了如下一个单独特征类型以及维度的例子:

对于搜索词、关键词、文本则是一个文本信息,关于维度信息,在2013年微软提出DSSM模型的论文有所提及。MatchType对应着四个匹配的类型,为分类输入特征。CampaignID使用one-hot编码进行表示。CampaignIDCount是数值特征(计数型特征),存储每个活动的统计数据,如点击率、预估点击率等。所有引入的特征都是稀疏特征,除了计数特征。

模型结构

Deep Crossing模型是一个端到端的模型,结构如下所示,

主要包含4层结构:Embedding层、Stacking层、Multiple Residual Units层和Scoring层。

Embedding层

几乎所有基于深度学习的推荐、CTR预估模型都离不开Embedding层,它的作用是将离散高维的稀疏特征转化为低维的密集型特征。Embedding矩阵的参数通过神经网络的反向传播进行训练。在模型结构中发现Feature #2并没有使用Embedding,因为文章提到“维度小于256的特征“不需要进行Embedding转化。

Stacking层

Stacking层的工作特别简单,就是将所有的Embedding向量、未进行Embedding操作的原生特征进行拼接。

Multiple Residual Units层

Deep Crossing模型中的Crossing就是多个残差单元层来实现。该层使用了残差网络的基本单元,单个残差单元如下所示:

Deep Crossing模型使用稍微修改过的残余单元,它不使用卷积内核,改为了两层神经网络。我们可以看到,残差单元是通过两层ReLU变换再将原输入特征加回来:

其中,

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. Zero Crossing算子 Zero Crossing算子可以通过cv2.Laplacian函数实现具体代码如下: ``` import cv2 import numpy as np # 读取图像 img = cv2.imread('image.jpg', 0) # 检测边缘 laplacian = cv2.Laplacian(img,cv2.CV_64F) laplacian = np.uint8(np.absolute(laplacian)) zcr = np.zeros(laplacian.shape) zcr[laplacian == 0] = 255 zcr[laplacian < 0] = 128 # 显示图像 cv2.imshow('image', img) cv2.imshow('Zero Crossing', zcr) cv2.waitKey(0) cv2.destroyAllWindows() ``` 2. Marr-Hildreth算子 Marr-Hildreth算子可以通过cv2.Laplacian和cv2.GaussianBlur函数实现具体代码如下: ``` import cv2 import numpy as np # 读取图像 img = cv2.imread('image.jpg', 0) # 高斯滤波 img = cv2.GaussianBlur(img, (3, 3), 0) # 检测边缘 laplacian = cv2.Laplacian(img,cv2.CV_64F) laplacian = np.uint8(np.absolute(laplacian)) marr_hildreth = np.zeros(laplacian.shape) marr_hildreth[laplacian > 0] = 255 # 显示图像 cv2.imshow('image', img) cv2.imshow('Marr-Hildreth', marr_hildreth) cv2.waitKey(0) cv2.destroyAllWindows() ``` 3. DoG算子 DoG算子可以通过cv2.GaussianBlur和cv2.absdiff函数实现具体代码如下: ``` import cv2 import numpy as np # 读取图像 img = cv2.imread('image.jpg', 0) # 高斯滤波 gaussian1 = cv2.GaussianBlur(img, (3, 3), 0) gaussian2 = cv2.GaussianBlur(img, (5, 5), 0) # 检测边缘 dog = cv2.absdiff(gaussian1, gaussian2) dog = np.uint8(np.absolute(dog)) dog[dog < 50] = 0 dog[dog >= 50] = 255 # 显示图像 cv2.imshow('image', img) cv2.imshow('DoG', dog) cv2.waitKey(0) cv2.destroyAllWindows() ``` 以上代码中的'image.jpg'是输入图像的路径,请根据实际情况修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值