CSCNN介绍

Reading time ~3 minutes

JD在《Category-Specific CNN for Visual-aware CTR Prediction at JD.com》提出了CSCNN:

1.介绍

JD领先的广告系统,会服务数百万广告主(advertisers)与数十亿顾客(customers)相连。每天,顾客会访问JD,点击ads并留下数十亿的交互日志。这些数据不仅会反馈给到学到的系统,但也会增强技术演进提升用户体验。

在常见的CPC广告系统中,广告会通过eCPM进行排序,商品的竞价通过advertisers给出,广告系统则会预测CTR。精准的CTR预测对商业效果和用户体验有用。因而,该topic在机器学习界和工业界被广泛关注。

大多数广告会使用图片进行展示,因为它们具有更多的视觉展示,并对于文本描述能传达更丰富的信息。一个有意思的现象是,许多广告通过切换更吸引人的图片会获得更高的CTR。对于CTR预测,这驱使了关于提取更丰富可视化特征的许多研究。这些算法会采用现成的(off-the-shelf)的CNNs来抽取可视化特征,并将它们与非可视化的特征(non-visual features:比如:category, user)进行混合来进行最终CTR预测。有了额外的可视化特征,这些算法在离线实验上可以远胜过无可视化的模型,并可以泛化到冷门和长尾ads上。在实际在线广告系统中使用CNN仍然是non-trival的。使用CNN进行offline end-to-end训练必须足够有效遵循随时间变化(time-varying)的在线分布,online serving需要广告系统的满足低时延要求。

另外,我们注意到,在电商中的可视化特征抽取与图片分类的setting有大不同。在分类任务中,categories会被看成是要预测的target。而在电商系统中,广告的categories会被明显地进行标记,它包含了丰富的可视化先验信息,可以帮助进行可视化建模。一些学术研究通过在CNN embeddings的top之上[7]构建category-specific投影矩阵进行集成,并将可视化features显式解耦成styles和categories。这些研究会共享一个公共的架构:visual和categorical knowledge的late fusion,然而,它对于CTR预测来说是sub-optimal。也就是说,image embedding模块很少会利用categorical knowledge。如果不知道ad category,通过这些CNNs抽取的embedding会包含与该category不相关的不必要features,从而浪费CNN的有限表达能力。相反,如果该ad category被集成其中,CNN只需要关注category-specific patterns,它会减轻训练过程

为了克服工业挑战,我们会同时为有效的end-to-end CNN training和低时延在线服务构建优化的基础设施。基于该有效地基础设施,为了充分利用电商中的labeled category,我们为CTR预测任务特别提出Category-specific CNN (CSCNN)。我们的关键思想是,以一个early-fusion的方式将category知识插入到CNN中。受SE-net、以及CBAM的启发,它会使用一个light-weighted self-attention模块来建模convolutional features间的相互依赖,CSCNN会进一步吸收ad category知识,并执行一个category-specific feature recalibration,如图2所示。更明显地,我们会接着使用category-specific channel和spatial attention modules来强调重要的以及与category相关的features。这些丰富的可视化特征对于CTR预测问题来说有巨大的效果增益。

总之,我们有以下的贡献:

  • 据我们所知,我们是在visual-aware CTR预测中首个对visual和non-visual features的late fusion的负面影响进行强调的。
  • 我们提出了CSCNN,为CTR预测特别设计了一个新的visual embedding模块。关键思想是组织category-specific channel和spatial self-attention来强调重要并且与category相关的特征。
  • 我们通过大量离线实验、以及AB test验证了CSCNN的有效性。我们验证了许多self-attention机制的效果,以及network backbones通过插入CSCNN来进行一致性提升。
  • 我们构建了高度有效地基础设施在real online电商广告系统中来使用CNN。在一天内100亿规模的真实产品数据集上,引入有效加速方法来对CNN完成end-to-end training,并满足在线系统的低时延需求(在CPU上20ms)。CSCNN已经被部署在JD的搜索广告系统中。

2.相关工作

2.1 CTR预测

2.2 CNN中的attention机制

attention机制是一个重要的feature selection方法,它可以帮助CNN来强调feature maps的重要部分,并抑制不重要的部分。spatial attention会告诉你关注where,而channel-wise attention则告诉你focus在what上。

在文献中,许多工作尝试从feature map中学习attention weights,称为“self-attention”。SOTA的算法称为CBAM, SE。除了self attention外,attention weights可以有额外的信息为条件,例如自然语言。成功应用的领域包括:language、image captioning以及可视化问答。

我们的工作受attention机制的启发。而非vision & language,我们设计了新的架构来使用attention机制来解决一个重要但长期忽略的问题:对于vision和non-vision feature的sub-optimal late fusion。我们同时将self-attention和attention conditioned on external information(称为:ad category)两者的优点相结合。作为结果,我们的图片embedding能够强调important和category相关的features。

3. JD中的CTR预测

我们首先review了3.1节中的CTR预测的背景。接着,我们描述了CTR预测系统的架构。我们会进一步挖掘新的visual modeling模块的细节。最终,我们会引入必要的加速策略来进行在线部署。表1中总结了相关概念。

3.1 先决条件

在在线广告工业界,一个ad会在一些contexts下被展示给一个user,该情景被记成一次曝光(impression)。CTR预测的目标是:在发生一次impression(ad, user, contexts)时,预测一次positive feedback(例如:click)的概率。准确的CTR预测直接有益于用户体验和商业效果,这使得该任务对于整个广告工业来说很重要。

CTR预测通常被公式化成二分类问题。特别的,它会从一个training set \(D = \lbrace (x_1, y_1), \cdots, (x_{\mid D \mid}, y_{\mid D \mid} )\rbrace\)中学习一个预测函数f: \(R^d \rightarrow R\),,其中\(x_i \in R^d\)是第i次impression的feature vector,\(y_i \in \lbrace 0,1 \rbrace\)是class label表示一个click是否发生。

目标函数被定义成负的log-likelihood:

\[l(D) = - \frac{1}{|D|} \sum\limits_{i=1}^{|D|} y_i log(\hat{y}_i) + (1-y_i)log(1-\hat{y}_i)\]

…(1)

其中,\(\hat{y}_i\)是predicted CTR,通过sigmoid \(\sigma\)归一化到(0, 1)中:

\[\hat{y}_i = \sigma(f(x_i))\]

…(2)

3.2 CTR预测系统的架构

我们现在描述了我们的CTR预测系统的架构,如图1所示。

图片名称

图1. CTR预测系统的架构。左下角:CSCNN,它会将一个ad image与它的category一起嵌入到一个visual feature vector \(x_v \in R^{150}\)中。注意,CSCNN只在offline下运行。而在online serving系统中,为了满足低时延需求,我们会使用一个高效的lookup table进行替代。右下角:non-visual feature embedding,从(ad, user, contexts)到一个non-visual feature vector \(x_{nv} \in R^{380}\)。TOP:主要架构,一个修改版的DCN,它会采用visual feature \(x_v\)和non-visual feature \(x_nv\)作为inputs。

3.2.1 DCN

DCN网络可以得到可靠的效果,它可以学到有效的特征交叉。这里,我们将DCN修改成两个inputs:

  • 一个non-visual feature vector \(x_{nv} \in R^{380}\)
  • 一个visual feature vector \(x_v \in R^{150}\)

visual feature被包含在deep net中。在layer 1中,我们将non-visual feature转换成1024维,并将它们与visual feature进行concatenate起来:

\[h_1 = [x_v, ReLU-MLP(x_{nv})] \in R^{150 + 1024}\]

…(3)

接着跟两个deep layers:

\[h_{l+1} = ReLU-MLP(h_l), l \in \lbrace 1, 2\rbrace, h_2 \in R^{512}, h_3 \in R^{256}\]

…(4)

cross net用于处理non-visual feature:

\[z_{l+1} = z_0 z_l^T w_l + b_l + z_l\]

…(5)

其中,对于layer \(l \in \lbrace 0, 1, 2\rbrace\),input \(z_0 = x_{nv}\)。

最终,我们会为predicted CTR组合outputs:

\[\hat{y} = \sigma(ReLU-MLP[h_3, z_3])\]

…(6)

3.2.2 Non-visual Feature Embedding

我们现在描述embedding layer会将一次impression(ad, user, contexts)的raw non-visual features转成vector \(x_{nv}\).

我们假设:所有features以categorical的形式进来(例如:binning,预处理后)。通常,一个categorical feature会以one-hot / multi-hot vector \(x_hot \in \lbrace 0,1 \rbrace^v\)的方式编码,其中v是该feature的vocab size。我们以如下方式展示两条样本:

1
2
WeekDay=Web  ==>  [0,0,0,1,0,0,0]
TitleWords=[Summer,Dress] ==> [..., 0,1,0, ..., 0,1,0...]

不幸的是,该one/multi-hot coding不能应用于工业界系统,因为高维稀疏性。我们在我们的系统上采用一个低维的embedding策略:

\[x_{emb} = E_{x_{hot}}\]

…(7)

其中:

  • \(E \in R^{d_e \times v}\)是对于该specific feature的embedding字典
  • \(d_e\)是embedding size

我们接着将\(x_{emb}\)的所有features进行concatenate来构建\(x_{nv}\).

实际上,我们的系统会使用来自用户的95个non-visual features(历史点击/购买,location),ads(category, title, #reviews等)以及rich contexts(query words, visit time等),总共有70亿vocab。设置\(d_e = 4\),总的维度是95 x 4 = 380. 我们将进一步引入features和其它statistics。

3.3 Category-Specific CNN

converntional预测系统大多数使用off-the-shelf CNN来嵌入ad图片。我们将它称为“off-the-shelf”,是因为它原始是用来分类设计的,而不是CTR预测。他们将image category看成是要预测的target,而非inputs。这实际上在电商平台上是一个巨大的浪费,因为:categories会被精准标记,并包含丰富的可视化先验知识,可以用于visual modeling。

我们针对CTR预测通过提出一种新的CNN(Category-Specific CNN)来解决该问题,它会嵌入一个ad图片m,并与ad category \(k \in K\)一起concat到visual feature \(x_v\)上。特别的,category prior knowledge被编码成category embeddings(与CTR模型联合训练),并使用一个conditional attention机制来包含CNN。

理论上,CSCNN可以被用来在任意网络中当做任意的convoluation layer。在我们的系统中,我们插入CSCNN到ResNet18.

3.3.1 单个convolutional layer上的框架

对于每个category k以及每个convolutional layer l,CSCNN会学习一个 tensor \(A_c^k \in R^{1 \times 1 \times C'}\),它会为该layer编码category prior knowledge在channel-wise attention上的影响。我们会出于简洁性,忽略subscript l。框架如图2所示。

图片名称

图2 我们提出的Category-Specific CNN框架。注意CSCNN可以被添加到任意单个convolutional layer上,但出于简单演示,我们只展示了单个layer的细节。TOP:一个将category映射到category prior knowledge的map,它会影响channel-wise & spatial attentions。Bottom:F是当前convolutional layer上的output feature map。通过顺序使用channel-wise和spatial attention进行refined,新的feature map F’‘被当成下一layer的input使用

给定一个intermediate feature map \(F \in R^{H \times W \times C}\),convolutional layer l的output,CSCNN会首先学习一个channel attention map \(M_c \in R^{1 \times 1 \times C}\),它基于当前feature map和category为条件。接着,channel-wise attention会被乘上feature map来获得一个Refined feature map \(F' \in R^{H \times W \times C}\),

\[F' = M_c (F, A_c^k) \odot F\]

…(8)

其中,\(\odot\)表示与\(M_c\)的element-wise product,它沿着spatial维度\(H \times W\)进行广播。

相似的,CSCNN也会学到另一个tensor \(A_s^k \in R^{H \times W \times 1}\),它会为spatial attention \(M_S \in R^{H \times W \times 1}\)对category prior knowledge进行编码。这两个attention模块被顺序用来获得一个3D的refined feature map \(F'' \in R^{H \times W \times C}\):

\[F'' = M_s(F', A_s^k) \odot F'\]

…(9)

其中,spatial attention会在element-wise product之前沿着channel维度进行广播。一个实际的关注点是,在\(A_s^k\)中存在大量参数,尤其是在前几层。为了解决该问题,我们提出只学习一个更小的tensor \(A_s^{'k} \in R^{H' \times W' \times 1}\),其中\(H' << H\)以及\(W' << W\),接着通过线性插件(linear interpolation)将它进行resize到\(A_s^k\)。\(H'\)和\(W'\)的作用会在后面实验结果进行讨论。注意,\(A_s^k\)和\(A_c^k\)会随机初始化并在训练期间学习,除category id外不需要额外的category prior knowledge。

channel-wise和spatial attention两者都被重新定义后,\(F''\)会被fed给下一layer。注意,CSCNN会被添加到任意CNNs上,通过只将input的F替代成next layer的\(F''\)。

3.3.2 category-specific channel-wise Attention

channel-wise attention会告诉要关注”what”。除了之前的inter-channel关系外,我们也会利用category prior knowledge和features间的关系(图3)。

图片名称

图3

为了收集spatial信息,我们首先将F的spatial dimension通过max和average pooling进行挤压(squeeze)。采用两者的优点由CBAM的实验所支持验证。两个squeezed feature maps接着与category prior knowledge \(A_c^k\)进行concatenated一起,并通过一个共享的two layer MLP进行forward传递,将维度从\(1 \times 1 \times (C + C')\)减小到\(1 \times 1 \times C\)上。最终,我们通过element-wise summation进行合并。

\[M_c(F, A_c^k) = \sigma(MLP[Avg P(F), A_c^k] + MLP[MaxP(F), A_c^k])\]

…(10)

3.3.3 Category-specific Spatial Attention

我们的spatial attention module如图3(bottom)。Spaital attention会通过利用features的inter-spatial关系,告诉需要关注哪里。受CBAM的影响,我们首先通过average pooling和max pooling沿着channel的维度聚合feature map \(F'\)的channel-wise信息。为了包含category prior knowledge,这两者接着与\(A_s^k\)进行concatenate一起来形成一个\(H \times W \times 3\)维度的feature map。最终,该feature map通过一个\(7 \times 7\)的convolutional filter进行传递来获得attention weights。

\[M_s(F', A_s^k) = \sigma(Conv_{7 \times 7}(Max P(F'), Avg P(F'), A_s^k))\]

…(11)

3.3.4 复杂度分析

注意,CSCNN实际上是一个轻量级module。特别的,我们在表2中展示了Baseline、CBAM以及我们的算法在参数数目和giga floating-point operations(GFLOPs)上的对比。

我们设轩\(C \in \lbrace 64, 128, 256, 512 \rbrace, C'=20\),瓶颈下降至4, #categories \(\mid K \mid =3310\)(表7中的real production dataset)。在CBAM中的每个convolutional yer中的“shared FC”中,参数数目是\(2 * C * C / 4\)。对于CSCNN,FC中的参数数目和channel category embedding是\(C * C / 4 + (C + C')*C/ 4 + C' * \mid K \mid\)。在channel attention中,参数数目的增加对比CBAM是1个conv layer为67-69k。另外,\(W' = H' = 6\),在spatial attention中的额外参数数目是\(W' * H' * \mid K \mid + 6 * 6 \approx 120k\)。因此,总参数的增加为(120k + 68k) * 16 layers = 3.0M。额外的参数引入是可接受的,对比CBAM,额外计算只有0.03%。

3.4 系统部署

我们在搜索广告系统部署了CSCNN。图4描述了我们在线模型系统的架构。

图片名称

图4

3.4.1 offline training

CSCNN会与整个CTR prediction系统进行jointly train,最近32天收集的100亿规模的直实数据集。在我们之前的调查中,CNN是训练期间的关键计算瓶颈。采用ResNet18 network,它的input pic size为224 x 224,单机4个P40 GPUs只能每天训练1.77亿图片。这意味着在分布式训练中加速CSCNN,我们需要226 P40 GPUs来计算1天内的100亿曝光,这很昂贵。为了加速,我们采用[2]中的sampling strategy。具有相同的ad的大约25个曝光(impressions)会收集成一个batch。一张图片的image embedding只需要管理一次,并在该batch中传播给多次曝光。有了28张P40 GPUs后,训练可以在1天内完成。

3.4.2 Offline inferring

images和categories会被feed到一个well trained CSCNN中来infer那些visual features。Fearures会传到一个lookup table中,接着在predictor memory中加载来替换CSCNN。在维度减小和频控后,一个20GB的lookup table可以覆盖超过下一天曝光的90%。

3.4.3 Online serving

一旦收到请求,visual features会直接从lookup table根据ad id进行发现。predictor会返回一个estimated CTR。在流量高峰中,每秒有超过3亿的items的吞吐量,我们的CPU online serving系统的tp99 latency会在20ms以下。

4.实验结果

参考

Netflix关于cosine相似度的讨论

Netflix团队发了篇paper《Is Cosine-Similarity of Embeddings Really About Similarity?》,对cosine相似度做了相应的研究。# 摘要余弦相似度(cosine similarity)是指两个向量间夹角的余弦...… Continue reading

Meta AdaTT介绍

Published on January 02, 2024

SATrans介绍

Published on December 02, 2023