facebook在《MEMORY NETWORKS》中提出了memory networks:

摘要

我们描述了一种称为”memory networks”的新学习模型。memory networks会让inference components与一个long-term meory component进行组合;他们会学习如何使用这些联合机制。其中:long-term memory可以读取和写入,我们的目标是使用它进行预估。我们会在QA场景对该模型进行研究,其中,long-term memory会有效扮演着一个动态的knowledge base,输出是一个textual response。我们会在一个大规模QA任务上对它们进行评估,并从一个仿真世界生成一个很少并且复杂的toy task。在后者,我们展示了这些模型的强大之处,它们会将多个支持的句子串联来回答需要理解动词强度的问题.

1.介绍

大多数机器学习模型缺少一种简单方式来读取和写入long-term memory component的部分,并将它与inference进行无缝组合。因而,他们不能利用现代计算机的最大优势。例如,考虑这样一个任务:告诉一个关于事实(facts)或故事(story)的集合,接着回答与该主题相关的问题。通常这会通过一个语言建模器(language modeler,比如:RNN)来达到。这些模型会被训练成:当读取一个words流后,预测并输出下一个word(s)或者集合。然而,它们的memory(通过hidden states和weights进行encode)通常很小,没有被分得足够开来准确记住来自过往知识的事实(知识会被压缩到dense vectors中)。RNNs很难执行记忆,例如:简单的copying任务:读入一个句子输出相同的句子(Zaremba 2014)。其它任务也类似,例如:在视觉和音频领域,需要long-term memory来watch一个电影并回答关于它的问题。

在本工作中,我们介绍了一种新的模型,称为memory networks,它会尝试解决该问题。中心思想是:通过将成功的学习策略(其它机器学习文献中)进行组合,使用可读可写的memory component进行inference。该模型接着会被训练来学习如何有效操作memory component。我们引入了第二节中的通用框架,并提出一个在文本领域关于QA的指定实现。

2.Memory Networks

一个memory network包含了:

  • 1个memory: m(一个通过使用\(m_i\)索引的objects的数组)
  • 4个components:I、G、O、R

图片名称

其中:

  • I(input feature map): 将incoming input转换成内部的feature representation
  • G(generalization): 给定new input更新旧的memories。我们称该genrealization为:在该stage,对于该network存在一个机会来压缩和泛化该memories,以便后续进一步使用
  • O(output feature map):给定new input和当前memory state,生成一个新的output(在feature representation space中)
  • R(response):将output转化成期望的response format。例如,一个文本reponse或一个action response。

给定一个input x(例如:一个input character,word或sentence,一个image或一个音频信号),该模型的flow如下:

  • 1.将x转换成一个interal feature representation:\(I(x)\)
  • 2.给定new input,更新memories \(m_i\):\(m_i = G(m_i, I(x), m), \forall i\)
  • 3.给定new input和该memories,计算output features o:\(o = O(I(x), m)\)
  • 4.最终,将output features o解码给出最终的response: \(r = R(o)\)

该过程会同时被应用到train和test时,但在这样的过程间存在差别,也就是说,memories会在test time时已经被存储下来,但I、G、O、R模型参数不会被更新。Memory networks会覆盖许多种可能实现。I、G、O、R的components可以潜在使用任何机器学习文献的思想:例如:使用你最喜欢的模型(SVMs,或者decision trees等)

I component

component I可以使用标准的预处理:例如:关于文本输入的解析、共指、实体解析。它可以将input编码成一个internal feature representation,例如:将text转换成一个sparse或dense feature vector。

G component

G的最简单形式是,将I(x)存储到在memory中的一个”slot”上:

\[m_{H(x)} = I(x)\]

…(1)

其中:\(H(.)\)是一个slot选择函数。也就是说,G会更新关于index \(H(x)\)对应的m,但memory的其它部分不会动。G的许多复杂变种可以回溯并基于当前input x的新证据来更新更早存储的memories。如果input在character和word级别,你可以将inputs(例如:将它们分割成 chunks)进行group,并将每个chunk存储到memory slot中

如果memory很大(例如:考虑Freebase或Wikipedia),你需要将memories进行合理组织。这可以通过使用前面描述的slot choosing function H来达到:例如,它可以被设计、或被训练、或者通过entity或topoic来存储记忆。因此,出于规模上的效率考虑,G(和O)不需要在所有memories上进行操作:他们可以只在一个关于候选的恢复子集上进行操作(只在合适主题上操作相应的memories)。在我们的实验中,我们会探索一个简单变种。

如果memory满了(full),会有一个“遗忘过程(forgetting)”,它通过H来实现,它会选择哪个memory需要被替换,例如:H可以对每个memory的功率(utility)进行打分,并对用处最少的一个进行覆盖写。我们不会在该实验中进行探索。

O和R components

O组件通常负责读取memory和执行inferenece,例如:计算相关的memories并执行一个好的response。R component则通过给定O来生成最终的response。例如,在一个QA过程中,O能找到相关的memories,接着R能生成关于该回答的实际wording,例如:R可以是一个RNN,它会基于output O生成。我们的假设是:如果在这样的memories上没有conditioning,那么这样的RNN会执行很差。

3.文本的MEMNN实现

一个memory network的特殊实例是:其中的components是neural networks。我们称之为memory neural networks(MemNNs)。在本节中,我们描述了关于一个MemNN的相对简单实现,它具有文本输入和输出。

3.1 基础模型

在我们的基础结构中,I模块会采用一个input text。我们首先假设这是一个句子:也可以是一个关于事实的statement,或者待回答的一个问题(后续我们会考虑word-based input sequences)。该text会以原始形式被存储到下一个提供的memory slot中,例如:S(x)会返回下一个空的memory slot N:\(m_N = x, N = N+1\)。G模块只会被用来存储该新的memory,因此,旧的memories不会被更新。更复杂的模型会在后续描述。

inference的核心依赖于O和R模块。O模块会通过由给定的x寻找k个supporting memories来生成output features。我们使用k直到2,但该过程可以被泛化到更大的k上。对于k=1,最高的scoring supporing memory会被检索:

\[o_1 = O_1(x, m) = \underset{i=1,\cdots,N}{argmax} \ s_O(x, m_i)\]

…(2)

其中:\(s_O\)是一个打分函数,它会对在sentenses x和\(m_i\)的pair间的match程度进行打分。如果k=2,我们会接着找到一个second supporting memory,它基于前一迭代给出:

\[o_2 = O_2(x, m) = \underset{i=1,\cdots,N}{argmax} \ s_O([x, m_{o_1}], m_i)\]

…(3)

其中,候选的supporing memory \(m_i\)现在分别由原始的input和第一个supporting memory进行打分,其中:方括号内表示一个list。最终的output o是\([x, m_{o_1}, m_{o_2}]\),它是module R的输入。

最终,R需要生成一个文本response r。最简单的response是返回\(m_{o_k}\),例如:输出我们检索的之前公开的句子。为了执行真实的句子生成,我们可以采用一个RNN来替代。在我们的实验中,我们也会考虑一个简单的评估折中方法,其中,我们会通过将它们排序,将文本响应限制到单个word(输出的所有words会在模型中被见过):

\[r = \underset{w \in W}{argmax} \ s_R([x, m_{o_1}, m_{o_2}], w)\]

…(4)

其中:W是字典中所有words的集合,并且\(S_R\)是一个关于match程度的得分函数

图片名称

图1

一个示例任务如图1所示。为了回答该问题:x = “where is the milk now?”,O module会首先对所有memories进行打分,例如:所有之前见过的句子,与x相反来检索最可能相关的事实:该case中的\(m_{o_1}\)=”Joe left the milk”。接着,它会由给定的\([x, m_{o_1}]\)再次搜索该memory来找出第二可能的fact,也就是 \(m_{o_2}\)=”joe travelled to the office”(Joe在倒掉牛奶之前到过的最后的地方)。最终,R module使用等式(4)对给定的\([x, m_{o_1}, m_{o_2}]\)的words进行打分,并输出 r = “office”。

在我们的实验中,scoring functions \(S_O\)和\(S_R\)具有相同的形式,一个embedding model:

\[s(x, y) = \phi_x(x)^T U^T \phi_y(y)\]

…(5)

其中:U是一个\(n \times D\)的矩阵(D是features的数目,n是embedding的维度)。\(\phi_x\)和\(\phi_y\)的角色是,将原始文本映射到D维feature space中。最简单的feature space是选择一个BOW的representation,我们为\(s_O\)选择 \(D = 3 \mid W \mid\),例如,在字典中的每个word会具有三个不同的representations:一个是为\(\phi_y(.)\),另一个是为\(\phi_x(.)\),依赖于关于input arguments的words是否来自于实际的input x或者来自于supporting memories,以便他们可以不同方式建模。相似的,我们会为\(S_R\)使用\(D=3\mid W \mid\)。\(S_O\)和\(S_R\)会使用不同的weight矩阵\(U_O\)和\(U_R\)。

training 我们以一个fully supervised setting方式训练,其中给定想要的inputs和responses,supporting sentences会在训练数据中被标记(在test data中,我们只输了inputs)。也就是说,在训练期间,我们知道在等式 (2)和(3)中的max functions的最佳选择。训练会接着使用一个margin ranking loss和SGD来执行。特别的,对于一个给定的question x,它具有true response r,supporting sentences \(m_{o_1}\)和\(m_{o_2}\)(当k=2),我们会通过模型参数\(U_O\)和\(U_R\)进行最小化:

\[\sum\limits{\bar{f} \neq m_{o_1}} max(0, \gamma - s_O(x, m_{o_1}) + s_O(x, \bar{f})) + \\ \sum\limits{\bar{f}' \neq m_{o_2}} max(0, \gamma - s_O([x, m_{o_1}], m_{o_2}) + s_O([x, m_{o_1}, \bar{f}'])) + \\ \sum\limits{\bar{r} \neq r} max(0, \gamma - s_R([x, m_{o_1}, m_{o_2}], r) + s_R([x, m_{o_1}, m_{o_2}], \bar{r}))\]

…(6)(7)(8)

其中,\(\bar{f}, \bar{f}', \bar{r}\)是对比正确labels所有其它选择,\(\gamma\)是margin。在SGD的每个step,我们会抽样\(\bar{f}, \bar{f}', \bar{r}\),而非计算每个训练样本的总和。

在我们的MemNN中,采用一个RNN作为R component,我们会使用在一个语言建模任务中的标准log likelihood来替换最后一项,其中RNN会被feed序列\([x, o_1, o_2, r]\)。在test time时,我们会根据给定的\([x, o_1, o_2]\)输出prediction r。对比起最简单的模型,使用k=1并输出localted memory \(m_{o_1}\)作为response r,只会使用第一项进行训练。

下面章节我们会考虑扩展基础模型。

3.2 WORD序列作为input

如果input是word级别,而非sentence级别,那就在流中到达的words(例如,使用RNNs),并且还未被分割成statements和questions,我们需要将该方法进行修改。接着我们添加一个“segmentation” function,它会输入关于words的至今未被分割的最近序列。当该segmenter触发时(表示当前序列是一个segment)我们会将该序列写到memory中,接着如之前方式进行处理。segmenter会与其它组件相似建模,以一个embedding model的形式:

\[seg(c) = W_{seg}^T U_S \phi_{seg} (c)\]

…(9)

其中,\(W_{seg}\)是一个vector(实际上在embedding space中一个线性分类器的参数),并且c是input words序列,表示成使用一个独立字典的BOW。如果 \(seg(c) > \gamma\),其中\(\gamma\)是margin,接着,该序列会被识别成一个segment。这种方式下,我们的MemNN在它的写操作中具有一个学习组件。我们将该segmenter考虑成概念的第一个证明:当然,你也可以设计得更复杂。附录B中给出了训练机制的详情。

3.3 通过Hashing方式的高效memory

如果存储的memories集合非常大,将等式(2)和等式(3)中所有内容进行打分会非常昂贵。作为替代,我们会探索hashing tricks来加速lookup:将input I(x)进行hash到一或多个buckets中,接着只有在相同buckets中的memories \(m_i\)会进行打分score。我们会研究hashing的两种方式:

  • i) 采用hashing words
  • ii) 将word embeddings进行聚类

对于(i)我们会考虑许多buckets,它们是字典里的words,接着对于一个给定的句子,我们将所有对应words hash到相应的buckets中。(i)的问题是:一个memory \(m_i\)只会考虑,它与input I(x)是否只共享至少一个word。方法(ii)尝试通过聚类方式解决该问题。在训练完embedding matrix \(U_O\)后,我们会运行K-means来将word vectors \(U(O)_i\)进行聚类,并给出K个buckets。我们接着将一个给定的句子中每个单独的word都落到各自的buckets中。由于word vectors趋向于与它们的同义词更近,他们会聚在一起,我们接着对这些相应的memories进行打分。input和memory间完全精准匹配则会通过定义进行打分。K的选择用于控制speed-accuracy间的trade-off。

3.4 建模write time

我们扩展我们的模型,来说明当一个memory slot是何时被写入。当回答关于确定事实的问题时(比如:“what is the capital of France?”),这并不重要。但当回答关于一个story的问题时(如图1),这就很重要。一种明显的方式是,添加额外的features到representations \(\phi_x\)和\(\phi_y\)中,它们会编码一个给定memory \(m_j\)的index j,假设:j会遵循write time(例如:没有memory slot rewriting)。然而,这需要处理绝对时间,而非相对时间。对于后续过程我们具有更成功经验:通过替代scoring input,与s的候选pairs,我们会在三元组 \(s_{O_t}(x, y, y')\)上学习一个funciton:

\[s_{O_t} (x, y, y') = \phi_x(x)^T U_{O_t}^T U_{O_t} (\phi_y(y) - \phi_y(y') + \phi_t(x, y, y'))\]

…(10)

\(\phi_t(x, y, y')\)使用三个新features,它会采用值0或1: 不管x是否大于y,x是否大于y’, y大于y’。(也就是说,我们会将所有\(\phi\) embeddings的维度扩展到3,并在当没有使用时将这三个维度设置成0)。现在,如果\(s_{O_t}(x, y, y') > 0\),该模型会偏爱y胜过y’,如果\(s_{O_t}(x, y, y')<0\)则它偏好y’。等式(2)和(3)的argmax会通过在memories i=\(1, \cdots, N\)上的一个loop进行替换,在每个step时将胜出的memory(y或y’)保持住,并且总是将当前的胜者与下一memory \(m_i\)进行对比。在当time features被移除之前,该过程等价于argmax。更多细节由附录C给出。

3.5 建模之前未见过的words

对于那些读了很多text的人来说,新的words仍会持续引入。例如:word “Boromir”第一次出现在《指环王》中。那么机器学习模型如何处理这些呢?理想的,只要见过一次就能work。一个可能的方法是使用一个language model:给定邻近词语,预测可能的word,并且假设新的word与它们相似。我们提出的方法会采用该思想,但将它组装到我们的网络\(s_O\)和\(s_R\)中,而非一个独立的step。

具体的,对于每个见过的word,我们会存储共现过的BOW,一个bag用于左侧context,另一个用于右侧context。任意未知的word可以被这样的features进行表示。因而,我们会将我们的feature representation D从\(3 \mid W \mid\)增加到\(t \mid W \mid\)来建模这样的contexts(对于每个bag有\(\mid W \mid\) features)。我们的模型会在训练期间使用一种“dropout”技术来学习处理新words: d%的可能性我们会假装没有见过一个词,因而对于那个word来说不会有一个n维embedding,我们会使用context来替代表示它。

3.6 精准匹配和unseen words

embedding models不能有效使用exact word matches,因为维度n过低。一种解决方法是,对一个pair x,y使用下式进行打分:

\[\Phi_x(x)^T U^T \Phi_y(y) + \lambda \Phi_x(x)^T \Phi_y(y)\]

也就是说,“bags of words”会将得分与学到的embedding score进行茶杯。另外,我们的建议是,保留在n维embedding space中,但使用matching features扩展feature representation D,例如:每个word一个。一个matching feature表示着:一个词是否在x和y中同时出现。也就是说,我们会使用\(\Phi_x(x)^T U^T \Phi_y(y, x)\)进行打分,其中:\(\Phi_y\)实际基于x的条件构建:如果在y中的一些words与在x中的words相匹配,我们会将这些matching features设置为1。unseen words可以被相似建模,基于它们的context words使用matching features。接着给出一个feature space \(D = 8 \mid W \mid\)。

#

阿里在《Real Negatives Matter: Continuous Training with Real Negatives for Delayed Feedback Modeling》中提出了一种延迟建模方式:

抽要

CVR预估的一个难点是:转化会有延迟,并且在点击完较长时间后才发生。这种延迟反馈会提出一个新挑战:新数据会对连续训练(continuous training)有益,但在训练时并不会具有完整的label信息。为了平衡模型的新鲜度(freshness)和label确定性(label certainty),之前的方法会设置一个较短的等待窗口(waiting window),或者甚至不用等转化信号。如果转化发生在等待窗口外,该样本将被复制,带上一个postive label,并被吸收到training pipeline中。然而,这种方法具有一些问题:

  • 首先,他们假设:观察到的feature分布仍与实际分布是相同的。但该假设不会成立,因为有重复样本
  • 第二,转化动作的确定度(certainty)在商业系统中是稀疏的。

这些问题会在延迟反馈建模期间引入bias。在本paper中,我们提出了DElayed FEedback modeling with Real negatives(DEFER)方法来解决这些问题。提出的方法会吸收真负样本到training pipeline中。真负样本能确保观察到的feature分布与实际分布等价,从而减少bias。真负样本的加入,也会带来更多关于转化的确定信息。为了纠正分布偏移(distribution shift),DEFFR会采用importance sampling来对loss function进行加权。工作数据集上的实验结果,验证了DEFFR的优越性。DEFFR会在阿里的展示广告系统上部署,并在多个场景下在CVR上获得了6%的提升。本paper中的代码和数据是开源的。

1.介绍

2.相关工作

一些之前的工作主要关注于delayed feedback问题【13】,这些方法并不是连续训练的,会忽略掉被错误标记的负样本。例如,如果模型在30天数据上进行训练,归属窗口(attribution window)是7天(在一个点击和一个转化间的延迟可能从不会超过7天),接着最近7天中的负样本的labels可能会不正常,因为转化可能发生在未来。注意,如果点击刚发生,negative label很有可能是不正确的。

2.1 Delayed Feedback Models

在展示广告中,因为活跃的advertisers、ad campaigns和users的变化,分布是动态变化的。例如,当新的ad campaigns被添加到系统中时,基于过去数据构建的模型可能会对其它新的ad campaigns表现不好。为了捕获数据中的变化,机器学习模型会持续进行更新来保持新鲜。最终,在训练期间,会设置一个等待窗口(waiting window):转化被归属到在该等待窗口中发生的一个点击。接着,新的样本会被持续训练(continuous training)的训练算法所吸收。然而,由于窗口较短,持续学习方法可能会引入许多被错误标记的负样本(假负:fake negatives)。为了纠正由fake negatives引入的bias,【2,26】提出了delayed feedback models。延迟反馈建模(delayes feedback modeling)首先由DFM[2]提出。在DFM中,一个负样本会被看成是一个unlabeled样本,因为转化还未发生。除了预估CVR以外,CFM也会引入第二个模型,它会捕获在点击和转化间的期望延迟(expected delay),假设延迟分布遵循指数分布。这两个模型的训练是联合训练的(jointly)。注意,delayed feedback modeling也与存活时间分析(survival time analysis)紧密关联,它会研究存活时间的分布。在实际上,可能违反指数假设。为了解决该问题,Yoshikawa等【26】提出了一个无参数的delayed feedback model来进行CVR预估,它可以在没有假设一个参数分布的情况下,表示time delay的分布。

Ktena【12】采用一个持续训练的模式,通过初始使用一个负样本来包含所有样本。如果一个正向的engagement发生,该样本会复制上正标记(postive label),并在第二次时被包含在训练算法中。这里,这种有偏观察数据分布包含了来自实际数据分布会被标记为负样本的所有样本,以及原始正样本。为了学习来自bias分布的模型,ktena[12]提出了两个loss function FNW和FNC,它会利用importance sampling来处理分布偏移(distribution shift)。除了在初始将所有样本标记成负样本外,Yasui[25]提出了一种feedback shift importance weighting算法,在该算法中,模型会在一个特定时间间隔中的真实转化。然而,它不会允许数据纠正(data correction),例如,重复的正样本(当未来发生一个转化时)。为了发现在模型训练中的延迟与假负样本率(fake negative rate)间的一个tradeoff,ESDFM【24】会建模在观察到的转化分布和真实化分布间的关系。

图片名称

图2 真负样本、假负样本、正样本的图示。这里,waiting window指的是在点击时间和在样本被取到训练pipeline间的时间间隔。

  • 一个真负样本指的是:样本没有发生转化。
  • 一个假负样本指的是:样本的转化发生在waiting window外,但仍在attribution window内。
  • 一个正样本指的是:样本的转化发生在waiting window内

2.2 Delayed Bandits

存在一些bandit算法[10,18,22],它们会研究延迟反馈建模。这些bandit算法的目标是,做出顺序决策,以便最小化累积遗忘(cumulative regret)。Joulani[10]分析了在在线学习算法的regret的延迟影响,并表明:延迟会以乘法方式增加在对抗问题(adversarial problems)中的regret,以加法方式增加在随机问题(stochastic problems)的regret。Pike【18】研究了带延迟的bandits问题,会聚合anonymous feedback。Vernade【22】则研究了随机延迟bandit设置,并提供了一个在假设延迟分布是已知下的完全分析。

3.前提

我们首先给出一个关于在线CVR建模的简单介绍。接着我们会引入之前的方法是如何解决CVR预估的延迟反馈的。

3.1 背景

在CVR预估中,模型会将输入看成是:\((x,y) \sim (X, Y)\),

其中:

  • x是feature,
  • $y \in \lbrace 0, 1\rbrace $是转化标签(conversion label)

CVR预估的目标是:学习一个具有参数$\theta$的函数f,它会最小化从数据分布中抽样的样本的泛化错误(genrealization error):

\[E_{(x,y) \sim (X,Y)} [l(x,y; f_{\theta}(x))]\]

…(1)

其中:

  • l是loss function。

由于转化可能延迟,一些样本会通过传统的监督学习方法被不正确标记成负样本。

  • z:在转化和点击期间的duration我们将它标记为z。如果该样本没有实际转化,$z = +\infty$。
  • $w_1, w_2$分别分别是等待窗口和归属窗口的长度,并且$w_2 > w_1$。

如图2所示,在延迟反馈建模中存在三种类型的样本:

  • 真负样本(Real negatives):$z > w_2$。真负样本是没有发生转化的样本
  • 假负样本(Fake negatives):$w_1 < z < w_2$。假负样本是在训练时没有发生转化并且被误标记为负样本的样本,因为它的等待时间(waiting window)太短了。
  • 正样本(Positives):$z < w_1$。正样本指的是在等待窗口中具有转化动作的样本

注意,假负样本也是正样本,但转化并没有发生在等待窗口中。一种naive strategy是,等待一个足够长的窗口来确保大多数labels会是正确,来减小假负样本的数目。然而,在展示广告系统中,数据分布是动态变化的,例如:新的ad campaigns会添加到系统中。为了捕获数据的最新变化,CVR模型会持续更新。这样,它需要对模型新鲜度(model freshness)和标签确定度(label certainty)间进行权衡。之前的方法会通过设置一个短的等待窗口等待立即转化(immediate conversions)来解决该问题。为了纠正label噪声,假负样本会在当engagement发生时会复制一个正标记(postive label)【12】。这个重复的样本会被包含到训练管线中(training pipeline)。这里如图1(a)所示,观察到的分布包含了4部分:真负样本、正样本、假负样本、重复样本(带正标签的假复样本拷贝)。由于直接使用假负样本训练,会误导最优化的方向,之前的方法开发了多种方式来纠正分布偏移问题。

图片名称

图1 (a) 之前的在线延迟反馈方法的data pipeline,它会复制具有positive labels的假负样本 (b) 提出的方法的data pipeline。提出的方法会复制正样本和真负样本。在复制后,特征分布与实际分布仍保持一致

3.2 假负样本加权(Fake Negative Weighted)

由于在观察分布与实际分布间的不一致(disparity),会采用importance sampling来纠正分布偏移(distribution shift)。Ktena【12】提出了假负样本加权(FNW:fake negative weighted)方法。

CVR预估的loss function可以被写成:

\[\begin{align} L = E_{(x,y) \sim p} l(x,y; f_{\theta}(x)) \\ = \int \int p(x) q(y | x) \frac{p(y|x)}{q(y|x)} l(x,y; f_{\theta}(x)) dxdy \\ \approx \int \int q(x) q(y | x) \frac{p(y|x)}{q(y|x)} l(x,y; f_{\theta}(x)) dxdy \\ = E_{(x,y) \sim q} \frac{p(y|x)}{q(y|x)} l(x,y; f_{\theta}(x)) \end{align}\]

…(2)

其中:

  • q是有偏观察分布(biased observed distribution)

由于包含重复正样本,观察到的特征分布q(x)不等于实际特征分布p(x)。FNW假设:\(p(x) \approx q(x)\),它会引入额外的bias到延迟反馈建模中。

在FNW中,没有设置waiting window,样本会立即看成是带负标签的负样本。一旦用户与ad有交互,相同的数据点使用一个正标签传给模型。这里,我们可以获得:

\[q(x \mid y = 0) = p(x), q(x \mid y = 1) = p(x \mid y = 1)\]

其中:

  • $q(y=0) = \frac{1}{1+p(y=1)}$

在有偏分布中观察到的一个转化的概率为:

\[q(y = 1 | x) = \frac{q(y = 1)q(x | y = 1)}{q(y = 1)q(x | y = 1) + q(y = 0)q(x | y = 0)} \\ = \frac{p(y=1)}{1+p(y=1)} \cdot \frac{p(x | y = 1)}{p(x | y = 1) + \frac{1}{1+p(y=1)}p(x)} \\ = \frac{p(y = 1|x)}{1 + p(y = 1|x)}\]

同样,观察到负样本在有偏分布中的概率可以计算为:

\[q(y=0 | x) = \frac{1}{1+p(y=1|x)}\]

…(4)

通过替换在等式(2)中的等式3和等式4,loss function可以重写为:

\[L = -\sum\limits_{x,y} y(1+p(y=1|x))log f_{\theta}(x) + (1-y)p(y=0|x) ((1+p(y=1|x)) log(1-f_{\theta}(x))\]

…(5)

由于\(p(y=1 \mid x)\)不能被访问,FNW会将它替代为模型估计\(f_{\theta}\),并在训练期间通过它对梯度传播进行stop。

3.3 假负样本校准(Fake Negative Calibraiton)

Fake negative calibration(FNC)会学习一个函数,它直接估计有偏分布q。接着FNC会通过以下calibration来获得函数\(p(y=1 \mid x)\):

\[p(y=1 | x) = \frac{q(y=1 | x)}{1 - q(y=1 | x)}\]

…(6)

4.使用真负样本进行延迟反馈建模

在本节中,我们会详细介绍DEFER:DElayed FEedback modeling with Real negatives。我们:首先引入在DEFER中的数据流,它会复制真负样本(real negatives)来纠正分布漂移。基于设计好的数据流,DEFER会使用importance sampling来纠正分布漂移。其它方法也会使用真负样本进行训练,我们会派生出相应的loss function。最终,我们会共享我们的商业平台的部署经验,以及不同的转化归属机制、生产环境预算等。

4.1 数据流

如上所述,之前的持续训练方法会包含假负样本,以便在有噪声信号开销下捕获新鲜度(freshness)。为了引入更多确定的转化信息,会包含重复样本,我们使用importance sampling来纠正分布漂移。然而,这些方法都具有一些问题:

  • 首先,重复样本会改变特征分布。该近似\(q(x) \approx p(x)\)会引入额外偏差。
  • 再者,所有关于转化动作的特定信息会来自于正样本,这在CVR预估中是不足的。这使得模型很难学习并且仍表现良好。

为了减少bias,并且不伤害新鲜度,我们会包含重复正样本以及重复真负样本到训练pipeline中

具体的,在重新设计过的数据pipeline中,我们让每个样本都具有一个waiting window $w_1$来等待转化信号。waiting window对于所有样本或者指定样本(sample-specific)来说是相同的。使用一个指定样本的窗口(sample-specific window)的原因是,不同的商品具有不同的延迟分布。例如,对比起便宜商品,昂贵的商品会具有较长的期望转化次数(expected conversion times),因而需要一个更长的窗口来等待转化信号。设置sample-specific window的一个策略是:定义多个window长度,来训练一个multi-class分类模型 $P_{length}(w_1 \mid x)$并预测waiting window长度:

\[w_1 = \underset{w}{argmax} P_{waiting} (w | x)\]

…(7)

在该窗口中具有转化的样本,会被标记成正样本;没有转化的样本会是假负样本或者真负样本。对于那些假负样本,如果之后在归属窗口中发生转化,我们会将这些样本带上正标签包含到pipeline中。对于那些最终不会发生转化的真负样本,我们也会进行复制,并将它们包含到训练pipeline中。这种重复会带来关于转化信号的更多确定信息。因而,在提出的方法中存在4种样本,如图1(b)所示,真负样本、正样本、假负样本、带真实label的重复样本(可以是正label,也可以是负label)。

4.2 Loss function

由于在观测到的分布与实际分布间的不一致,提出的方法会使用importance sampling来纠正分布偏移。有了重复样本的包含,我们可以获得:\(q(x) = p(x)\),以及联合概率 \(q(x,y=0)\)可以被计算为:

\[q(x,y = 0) = p(x, y=0) + \frac{1}{2} p (x, y=1, z > w_1)\]

…(8)

条件概率$q(y=0 \mid x)$可以被写成:

\[q(y=0 | x) = \frac{q(x,y=0)}{q(x)} \\ = \frac{p(x,y=0)+\frac{1}{2} p(x,y=1, z > w_1)}{p(x)} \\ = p(y=0 | x) + \frac{1}{2} p_{dp}(x)\]

其中:

  • $p_{dp}(x) = p(x, y=1, z>w_1 \mid x)$是x是一个假样本的概率。

相似的,$q(y=1 \mid x)$可以被写成:

\[q(y=1 | x) = p(y=1 | x) - \frac{1}{2} p_{dp}(x)\]

…(10)

接着,根据等式(2),我们可以为x计算importance sampling:

\[\frac{p(y=0 | x)}{q(y=0 | x)} = \frac{p(y=0 | x)}{p(y=0|x) + \frac{1}{2} p_{dp}(x)} \\ \frac{p(y=1 | x)}{q(y=1 | x)} = \frac{p(y=1 | x)}{p(y=1|x) + \frac{1}{2} p_{dp}(x)}\]

…(11)

因而,importance weighed CVR loss funciton可以被公式化为:

\[L = - \sum\limits_{x,y} y \frac{p(y=1 | x)}{p(y=1|x) - \frac{1}{2}p_{dp}(x)} log f_{\theta}(x) \\ + (1-y) \frac{p(y=0 | x)}{p(y=0 | x) + \frac{1}{2} p_{dp}(x)} log(1-f_{\theta}(x))\]

…(12)

由于\(p(y=1 \mid x), p(y=0 \mid x)\)不能被访问,我们可以使用模型估计\(f_{\theta}(x)\)和\(1 - f_{\theta}(x)\)来分别替代\(p(y=1 \mid x), p(y=0 \mid x)\)。对于\(p_{dp}(x)\),我们会训练一个分类器\(f_{dp}\)来预测x是一个假负样本的概率。如【12】所示,我们会通过importance weight来停止梯度传播。因此,等式(13)可以被重写成:

\[L = -\sum_{x,y} y [\frac{f_{\theta}(x)}{f_{\theta}(x) - \frac{1}{2} f_{dp}(x)}] log f_{\theta}(x) \\ + (1-y) [\frac{1 - f_{\theta}(x)}{1 - f_{\theta}(x) + \frac{1}{2} f_{dp}(x)}] log(1 - f_{\theta}(x))\]

其中\([\cdot]\)意味着停止梯度操作。

4.3 变种

对于其它方法(像FNW和FNC),重复的真负样本可以被包含来提升学习。我们为FNW和FNC来派生相应的loss function。

4.3.1 FNW

对于FNW,我们有:

\[q(y=1 | x) = \frac{p(y=1 | x)}{1 + p(y=1 | x) + p(y=0 | x)} = \frac{p(y=1 | x)}{2} \\ q(y=0 | x) = \frac{1 + p(y=0 | x)}{1 + p(y=1 | x) + p(y=0 | x)} = \frac{1 + p(y=0 | x)}{2}\]

…(14)(15)

接着我们有:

\[\frac{p(y=1 | x)}{q(y=1 | x)} = 2 \\ \frac{p(y=0 | x)}{q(y=0 | x)} = \frac{2 p(y=0 | x)}{1 + p(y=0 | x)}\]

…(16)

最终,loss function可以重新公式化为:

\[L = - \sum\limits_{x,y} 2y log f_{\theta}(x) + (1-y) p(y=0 | x) (\frac{2p(y=0|x)}{1+p(y=0|x)}) log(1 - f_{\theta}(x))\]

…(17)

4.3.2 FNC

相似的,对于FNC,我们有:

\[p(y = 1 | x) = 2q(y=1 | x)\]

…(18)

4.4 真负样本的生产环境设定

在展示公告中,不同的商业场景根据不同的用户行为,经常会设置不同的归属窗口。例如,在阿里巴巴,一些业务场景会将归属窗口设置为1天,而一些业务场景则会将归属窗口设置为7天。需要注意的是,真负样本的延迟时间等于正样本的最大延迟时间,并且模型新鲜度不可能受真负样本所大大影响,但会带来更多的确定label来训练算法。对于一个长转化窗口的业务场景,重复样本的引入,会增加维持数据缓存的额外的基础设施开销。因而,对于长转化窗口场景,我们会通过设置一个较短的窗口\(w_3 (w_1 < w_3 < w_2)\)。在\(w_3\)之前没有转化的样本,可以被近似为真负样本并直接放到训练算法中。对于具有短归属窗口的业务场景,我们不会采用近似,会包含真负样本。换句话说,我们将在线延迟反馈建模划分成2个settings:短的归属窗口和长归属窗口。对于首者,我们直接使用模型。对于第二个,我们假设:真负样本会在一个时间窗口\(w_3(w_1 < w_3 < w_2)\)之后被获取。相似的,\(w_3\)对于所有样本来说都是固定的,或者通过一个多分类模型进行预测:

\[w_3 = argmax_w P_{attribution} (w | x)\]

…(19)

4.5 离线训练方法

对于商业平台来说会使用离线训练,我们也提出了一个方法,它在许多场景被证明是有用的。

图片名称

图3

如图3所示,我们提出的离线方法,会使用多任务学习(multi-task learning)通过利用在转化时间内包含的信息来提升泛化性。具体的,模型在shared bottom layers的top上具有N+1个heads。其中的一个head会预测:点击是否会被实际转化的概率,表示为\(p(y=1 \mid x)\)。其它heads会预测转化是否会在预定义的time window \(w_1, w_2, \cdots, w_N\)内发生:

\[p(z < w_n, y=1 | x) = p(z < w_n | y=1, x) * p(y=1 | x)\]

…(20)

\(y_n\)表示样本在\(w_n\)是否具有转化的概率,loss function可以被写成:

\[L = - \sum_n \sum_x y_n log p(z < w_n, y=1 | x) \\ - \sum_n \sum_x (1-y_n) log(1 - p(z < w_n, y=1 | x)) \\ - \sum_x y log p(y=1|x) - \sum_x (1-y) log(1-p(y=1 | x))\]

由于接近训练天数末尾的样本,可能具有所有的N+1个labels,我们只会根据观察到的labels更新相应的参数。对于一个样本来说,如果预定义的\(w_n, \cdots, w_N\)窗口还未到达,我们只会通过\(p(y=1, z<w_1 \mid x), \cdots, p(y=1, z<w_{n-1} \mid x)\),当其它heads的参数在阻断时使用观察到的labels来来更新参数。注意,\(p(y=1 \mid x)\)也会通过\(p(y=1, z<w_1 \mid x), \cdots, p(y=1, z< w_{n-1} \mid x)\)的梯度进行更新。例如,5天作为第三个时间窗口。如果在从过去的第4天有样本点击,我们只会从\(p(z < w_1, y=1 \mid x), p(z<w_2, y=1\mid x)\)来更新参数。对于从过去的第7天前有过样本点击,那所有参数会同时更新。

5.实验

Momenta公司在《Squeeze-and-Excitation Networks》提出了一种SENet的结构。我们来看下paper介绍:

1.介绍

CNNs已经被证明在解决许多视觉任务中是有用的模型。在CNN网络中的每个conv layer上,所使用的filters的集合可以用来表示:沿着input channels—的相邻空间连接模式(neighbourhood spatial connectivity patterns)——会在局部感受野(local receptive fields)内将空间信息channel-wise信息融合(fusing)在一起。通过使用非线性激活函数和下采样操作符,与一系列conv layers进行交叉,CNNs可以生成图片表示(image representations),同时能捕获层级模式并获得global theoretical receptive fields。计算机视觉研究的一个中心主题是:关于许多强大的representations探索,只会对于一个给定任务,通过捕获一张图片的最显著属性来提升效果。对于视觉任务广泛使用的模型族来说,新的NN结构设计的发展,是一个前沿领域。最近研究表明,由CNNs生成的representations可以通过将学习机制(learning mechanisms)集合到网络中的方式来得到增强,可以捕获features间的空间相关性。这样的研究有:Inception家族,它会包含multi-scale过程到网络模块中,来达到效果提升。最近一些研究工作则会更好地建模空间依赖,并将spatial attention包含到网络结构中。

在本paper中,我们研究了【network设计-—channels间的关系】的不同方面。我们会引入一个新的结构单元,术语称为“Squeeze-andExcitation (SE) block”,它会通过显式建模convolutional features间的相互依赖,生成的representations会提升quality。为了这个结果,我们提出了一个机制,它允许该网络执行特征再校准(feature recalibration),尽管它可以学习使用全局信息来选择性地增强有信息量的features,并消除更少信息量的features。

SE building block的结构如图1所示。对于任意给定的transformation \(F_{tr}\),会将input X映射到feature maps U上,其中:\(U \in R^{H \times W \times C}\),例如:一个convolution,我们可以构建一个相应的SE block来执行feature recalibration

  • squeeze operation(\(F_sq(\cdot)\)):首先features U会通过一个squeeze operation进行传递,它会通过将沿着它们的空间维度(H X W)的feature maps进行聚合来生成一个channel descriptor。该descriptor的函数会生成一个关于channel-wise feature responses的全局分布,他允许来自该网络的global receptive field的信息通过所有它的layers来被使用。
  • excitation operation(\(F_ex(\cdot,W)\)):接着跟一个excitation operation来进行聚合,它会采用一个简单的self-gating机制的形式,会将该embedding作为input,并生成一个关于per-channel modulation weights的集合。该weights会被应用到feature maps U来生成SE block的output,它可以被直接feed到该network的后续layers上。

图片名称

图1 一个Squeeze-and-Excitation block

通过简单地将一个关于SE blocks的collection进行stacking,可以构造一个SE network(SENet)。另外,在网络结构的深度范围内,这些SE blocks可以被用来作为一个对于original block的简易替换(drop-in replacement)。而该building block的模板是通用的,它会在不同的depths上进行执行,而非贯穿该network。在更早的layers中,它会以一个分类不可知(class-agnostic)的方式来激发有信息量的features,增强共享的low-level representations。在更后的layers中,SE blocks会变得更专业,来以一个高度class-secific的方式响应不同的inputs。因此,通过SE blocks进行feature recalibration的好处是:效果可以通过network进行累积

新的CNN结构的设计和开发是一个非常难的工程任务,通常需要许多新超参数以及layer配置的选择。相反的,SE block的结构非常简单,可以直接用在state-of-the-art的结构中,通过将组件替换成SE部分即可,其中:效果可以被有效增强。SE blocks的计算非常轻量,只会在模型复杂性和计算开销上引入一个轻微的增加。

为了提供证据,我们开发了许多SENets,并在ImageNet dataset上进行评估。我们的方法在ILSVRC 2017分类比赛中得到第一。在top-5 error上达到了2.251%的提升。

2.相关工作

3. SQUEEZE-AND-EXCITATION BLOCKS

一个Squeeze-and-Excitation block是一个计算单元,它可以在一个transformation \(F_{tr}\)上构建,该转换会将一个input \(X \in R^{H' \times W' \times C'}\)映射成feature maps \(U \in R^{H \times W \times C}\)。接着,我们将\(F_{tr}\)看成是一个convolutional operator,并使用\(V = [v_1, v_2, \cdots, v_C]\)来表示关于filter kernals的learned set,其中:\(v_c\)指的是:第c层filter的参数。我们接着将outputs写为 \(U = [u_1, u_2, \cdots, u_C]\),其中:

\[u_c = v_c * X = \sum\limits_{s=1}^{C'} v_c^s * x^s\]

…(1)

其中:

  • \(*\)表示convolution
  • \(v_c = [v_c^1, v_c^2, \cdots, v_c^{C'}], X = [x^1, x^2, \cdots, x^{C'}], u_c \in R^{H \times W}\)。
  • \(v_c^s\)是一个2D spatial kernel,表示\(v_c\)的一个单通道(single channel),扮演着X的相应channel。

为了简化该概念,bias项会被忽略。由于该output会通过一个关于所有channels的总结来生成,channel dependencies会隐式地嵌入在\(v_c\)中,但会与由filters捕获的local spatial correlation牵连在一起。通过convolution建模的channel relationships,天然就是隐式(implicit)和局部的(local),除了在top-most layers上。我们期望,convolutional features的学习可以通过显式建模channel间的相互依赖性来进行增强,因此,该network可以增加对informative features的感知,它们可以通后续的转换所利用。因此,我们希望在两个steps中提供访问全局信息和对filter responses进行recalibrate:squeeze和excitation,在它们被feed到下一transformation前。SE block的结构如图1所示。

3.1 Squeeze: Global Information Embedding

为了解决利用channel dependencies的问题,我们首先考虑在output features中每个channel的信号。每个learned filters会与一个local receptive field进行操作,相应的,该transformation output U的每个unit不能利用在该区域外的contextual information。

为了消除该问题,我们提出将全局空间信息(global spatial information)进行压缩(squeeze)到一个channel descriptor中。通过使用global average pooling来生成channel-wise statistics的方式来达到。正式的,一个statistic \(z \in R^C\)通过对U在它的空间维度\(H \times W\)上进行收缩(shrinking)来生成,以使z的第c个element可以被计算:

\[z_c = F_{sq}(u_c) = \frac{1}{H \times W} \sum\limits_{i=1}^H \sum\limits_{j=1}^W u_c(i, j)\]

…(2)

讨论:transformation U的output可以被解释成一个关于local descriptors的集合,它的statistics对于整个image来说表达力强。利用这样的信息在之前的feature engineering工作中很盛行。我们选择最简单的聚合技术,global average pooling,注意:最复杂的策略在这也可以使用。

3.2 Excitation:自适应再校准(Adaptive Recalibration)

为了利用在squeeze操作中聚合的信息,我们会接着使用一个二级操作符(second operation),它的目标是完全捕获channel-wise dependencies。为了满足该目标,该函数必须满足两个准则:首先,它必须是灵活的(特别的,它必须能学习一个在channels间的非线性交叉);第二,它必须学习一个非相互排斥(non-mutually-exclusive)关系,由于我们会确保:多个channels会被允许强调(非而强制一个one-hot activation)。为了满足这些准则,我们选择采用一个使用sigmoid activation的简单gating机制:

\[s = F_{ex}(z, W) = \sigma(g(z, W)) = \sigma(W_2 \sigma(W_1 z))\]

…(3)

其中,\(\sigma\)指的是ReLU function,\(W_1 \in R^{\frac{C}{r} \times C}\)和\(W_2 \in R^{C \times \frac{C}{r}}\)。为了限制模型复杂度,以及aid generalisation,我们会对gating机制进行参数化,通过在非线性周围构建一个具有两层FC layers的瓶颈来达到:例如,一个具有reduction ratio为r的降维层(dimensionality-reduction layer)(该参数选择可以在第6.1节中讨论)、一个ReLU、接着一个增维层(dimensionality-increasing layer),它会返回transformation output U的channel维度。该block的最终output可以通过使用activations s,并对U进行rescaling来获得:

\[\bar{x}_c = F_{scale}(u_c, s_c) = s_c u_c\]

…(4)

其中,\(\bar{X} = [\bar{x}_1, \bar{x}_2, \cdots, \bar{x}_C]\)以及\(F_{scale}(u_c, s_c)\)指的是在标量\(s_c\)和feature map \(u_c \in R^{H \times W}\)间的channel-wise乘法。

讨论:excitation operator会将input-specific descriptor z映射到一个关于channel weights的set上。就这一点而言,SE blocks内在会基于input上引入动态性(dynamics),它会被看成是在channels上的一个self-attention function,它的关系会受限于convolutional filters所响应的local receptive field。

3.3 实例化

SE block可以被集成到如VGGNet的标准结构中,在每个convolution的非线性之后通过插方式实现。再者,SE block的灵活性意味着,它可以被直接应用到在标准卷积之外的转换上。为了说明这一点,我们开发了SENets,通过将SE blocks包含到许多更复杂结构的实例中,来描述。

我们首先考虑,对于Inception networks上SE blocks的构建。这里,我们简单地将transformation \(F_{tr}\)看成是一整个Inception module(如图2所示),并且通过对于在结构上的每个module做出这种变更,我们可以获得一个SE-Inception network。SE blocks可以被直接与residual networks一起使用(图3描述了SE-ResNet module的schema)。这里,SE block transformation \(F_{tr}\)被看成是一个residual module的非正定分支(non-identity branch)。Squeeze和Excitation会在使用identity branch进行归纳前同时起作用。更进一步,使用ResNeXt、Inception-ResNet、MobileNet和ShuffleNet集成SE blocks的变种,可以通过遵循相应的schemes来构建。对于SENet结构的具体示例,如表1有给出:SE-ResNet-50、SE-ResNeXt-50的详细描述。

图片名称

图2

图片名称

图3

SE block的灵活性的一个结果是,有许多变种方式,可以很容易集成到其它结构中。因此,为了对所使用的集成SE blocks到网络结构中的策略评估敏感性,我们可以提供消融实验(ablation experiments)来探索关于block的不同设计。

4.模型和计算复杂度

对于提出的SE block设计,它必须提供一个在效果和模型复杂度间的较好tradeoff。为了说明与module相关的计算开销,我们会考虑在ResNet-50和SE-ResNet-50间的一个对比作为示例。ResNet-50在单个forward pass上对于一个224 x 224 pixel input image上需要~3.86 GFLOPs。每个SE block会在squeeze阶段利用一个global average pooling操作符,而在excitation阶段会使用两个小的FC layers,接着跟一个昂贵的channel-wise scaling操作。在聚合时,当设置reduction ratio r到16时,SE-ResNet-50需要~3.87 GFLOPs,对比起原始ResNet50,对应有一个0.26%的相对提升。除了增加轻微的额外开销外,SE-ResNet-50的accuracy要超过ResNet50,可以达到一个更深的ResNet-101网络的效果,而它需要~7.58 GFLOPs(表2)。

在实际项中,通过ResNet-50的单个pass forwards和backwards会花费190ms…

阿里在《One Model to Serve All: Star Topology Adaptive Recommender for Multi-Domain CTR Prediction》中提出了一种思路来解决不同模块使用同一模型的思路:

1.介绍

传统CTR模型关注于single-domain的prediction,其中ctr模型会服务于单个业务domain,它基于从该domain中收集到的样本进行训练。每个业务domain是一个特定位置(items被展示给移动端app或PC 网站)。在大的商业公司(比如:阿里和亚马逊),经常有许多业务domains需要进行CTR预估来增强用户满意度和提升商业回报。例如,在阿里,商业domains的范围有: 猜你喜欢、Banner、以及其它domains。图1展示了在阿里的一些业务domains。

图片名称

图一

  • Banner:在banner中,会在taobao主页的top banner上展示items。这些item可以是一个商品、商店、或一个品牌。
  • 猜你喜欢:在该模块中,items都是商品,在左或右列被展示给用户

由于不同业务domains会有重叠的用户组(user groups)和items,在这些domains间会存在共性,允许信息共享对于学习每个domain的CTR模型来说是有益的。然而,特定的user group可能会不同,用户行为也会在多个domains内变化。这些差异会导致domain-specific数据分布简单将所有data进行混合并训练单个共享的CTR模型不能很好地在所有domains上工作良好

除了混合数据并训练一个shared model外,另一种简单解法是,为每个商业domain构建一个独立的模型。这种方式也会有一些缺点:

  • (1) 一些业务domains会比另一些domains具有更少的数据。将数据进行分割会忽略domain共性,并造成更少的训练数据,使得模型很难学习
  • (2) 维护多个模型会造成资源大量消耗,并需要更多的人工开销。当商业domains的数目达到上百个时会相当麻烦

本paper的目标是学习一个有效和高效的CTR模型来同时处理多个domains。我们将multi-domain CTR prediction公式化成:recommender需要为M个商业domains \(D_1, D_2, \cdots, D_M\)作为CTR预测。该模型可以将input作为(x, y, p),其中:

  • x是公共特征(像:历史用户行为、用户profile特征、item feature、context feature等),会被多个商业domain使用
  • \(y \in \lbrace 0, 1\rbrace\)是点击label
  • p是domain indicator:它表示该样本是在哪个domain上被收集

注意:(x,y)从domain-specific分布\(D_p\)上抽取得到,分布会随着不同的domains有所不同。multi-domain CTR预测的目标是:构建一个有效且高效的模型,它会为每个domain给出精准的CTR预测,并在资源消耗上开销不大,该模型可以充分利用domain共性,并能捕捉domain间的差异。

一种用于提升学习的可能策略是,使用domain进行多任务学习。如图3所示,multi-domain CTR预测与多任务学习间的不同之处是:multi-domain CTR预测是在不同的domains上解决相同的任务(都是CTR 预测任务),不同domains的label spaces是相同的,数据分布有所不同。作为对比,大多数多任务学习方法则在相同的domain上解决不同的任务,其中label space会不同,例如:联合估计CTR和CVR。由于任务的异构性,已存在的多任务学习方法则关注于在bottom layers上的共享信息,但会在task-specific output layers上保持独立。直接在multi-domain CTR预测上采用multi-task方法可能不会充分利用上在label space上的domain关系,并且会忽略不同domains上不同数据分布。

图片名称

图3 multi-task learning与multi-domain learning的对比。大多数多任务学习方法关注在单个domain内处理不同任务。作为对比,multi-domain learning会为多个domains作出预测来解决相同的任务,例如:ctr预测,其中,label spaces是相同的。直接采用multi-task方法来进行multi-domain CTR预测不能充分利用在label space中的domain关系,并忽略不同domains上的不同数据分布

为了充分利用domain关系,我们提出星形拓朴自适应推荐(STAR Topology Adaptive Recommender: STAR)来进行multi-domain CTR预估。提出的STAR模型是星形拓朴,如图4所示。STAR包含了共享的中心参数,以及domain-specific参数的多个集合。每个domain的最终模型通过将共享中心参数(shared centerd params)和domain-specific参数进行组合来获得。中心参数(centered parameters)被用于学习在所有domains间的总行为,其中公共知识可以被学习到以及在所有domains间转移。domain-specific参数会捕获在不同domains间的特定行为来提升更加refined的CTR预估。star topology会利用跨多个domains间的有效信息转换,来学习domain公共性和差异。该paper会实现STAR模型,它使用在每个layer上对weights做element-wise product来作为组合策略。由于embedding layers会在工业界推荐器上贡献大多数参数量,添加的domain-specific参数对于总参数量来说可被忽略。因此,使用STAR模型来serve多个domains只需要添加少量计算和内存开销,就能达到更好的效果。

主要的贡献如下:

  • STAR:
  • 不同domains具有不同的数据分布,当使用batch normalization时,这会生成不准确的统计。我们提出Partitioned Normalization(PN),它会为不同domains上的样本进行独立normalization来解决该问题。PN会在domain内生成更准确的moments,它会提升model效果。
  • 在mulit-domainCTR预测中,描绘domain信息的features是很重要的。我们提出一个auxiliary network,它会直接将domain indicator作为input,并学习描绘该domain的有embeddings。该embedding会feed给auxiliary network,它比原始network更简单。这会使得domain indicator以一种直接方式影响最终预测。
  • 我们会在工业产品数据集上评估STAR,并将它部署在2020的阿里展示广告系统上。持续的收益验证了STAR的效果。直到现在,STAR的部署带来了6%的CTR和8%的RPM提升。它可以泛化到其它场景上。

2.相关工作

图片名称

图2 (a)对于所有domains的single shared model,方形nodes表示共享模型 (b) 每个domain一个模型,每个模型独立学习。圆形节点表示domain-specific model (c) 提出的STAR,其中每个domain具有特定的参数,也会共享一个公共centered model。边意味着center shared参数与domain-specific参数的组合

3.提出的方法

在本节中,我们首先提出一个关于multi-domain CTR预估的简洁背景介绍。接下是提出方法multi-domain的CTR预估的架构总览。接着我们详细介绍STAR,包括提出的STAR topology network,partitioned normalization以及auxiliary network。

3.1 Multi-domain CTR预估

在序列推荐系统中,推荐会采用用户历史行为、user profile特征、target item feature以及其它features(比如:context feature)作为input。一个用户u在一个item m上点击的预估CTR(\(\hat{y}\))可以计算如下:

\[\hat{y} = f( E(u_1), \cdots, E(u_i); E(m_1), \cdots, E(m_j); E(c_j), \cdots, E(c_k))\]

其中:

  • \(\lbrace u_1, \cdots, u_i \rbrace\)是user features的集合,包括:用户历史行为,user pfofile feature。
  • \(\lbrace m_1, \cdots, m_j \rbrace\)是target item feature的集合
  • \(\lbrace c_1, \cdots, c_k \rbrace\)是其它features的集合
  • \(E(\cdot) \in R^d\)表示embedding layer,它会将sparse IDs映射到可学习的dense vectors上

在将raw feartues映射到低维embeddings上后,惯例是将这些embeddings聚合来获取固定长度的vectors。可以部署不同类型的聚合方法(42, 43)来聚合这些embeddings来抽取用户兴趣并获取固定长度的presentation。获得的representation接着feed到下面的DNN中(例如:一个multi layer fully-connected network)来获得最终的CTR预测。

传统的CTR模型(6,13,23,42,43)通常从一个单一商业domain上获取数据进行训练。然而,真实推荐通常会处理不同的商业domains。推荐系统需要为M个domains \(D_1, D_2, \cdots, D_M\)同时作为CTR预测。该模型会将(x,y,p)作为input,其中:

  • x是在多个domains中用到的公共featrure(比如:用户历史行为、user profile、target item feature);
  • \(y \in \lbrace 0, 1\rbrace\)是点击的label
  • \(p \in \lbrace 1,2, \cdots, M\rbrace\)是domain indicator,它会表示样本来自哪个domain。

注意(x,y)是从domain-specific分布\(D_p\)上抽样得到,该分布对于不同domains会不同。multi-domain CTR预估的目标是:构建单个CTR模型,它可以给出准确的CTR预估,并以较低资源和开销进行serve。

3.2 架构总览

如上所示,忽略domain indicator p,学习单个共享CTR模型会忽略domain的差异性。这会导致次优的模型参数。另一方面,对于不同domain训练不同模型会更差,因为将domains进行分隔,每个模型会得到更少的数据。由于资源开销以及人力开销,在生产环境中为每个domain维护一个独立的模型是不可行的。

最后,我们提出STAR来进行multi-domain CTR预估,它可以更好使用不同domains间的相似性,并能捕获domain上的差异。如图4所示,STAR包含了三个主要部分:

  • (1) partitioned normalization(PN):它会为不同domains间的样本进行单独normalization
  • (2) star topology FC network (star topology FCN)
  • (3) auxiliary network:它会将domain indicator看成是input featrure,并能学到它的语义embeddings来捕获domain差异性

图片名称

图4 single-domain CTR预测以及STAR的对比。在STAR中,partitioned normalization(PN)会为不同domains的样本进行nomalization。被归一化的features接着作为input来feed给下面的star topology FCN中。star topology FCN包含了共享的centered FCN以及多个domain-specific FCNs。每个domain的最终组合模型通过

在训练期间,domain indicator p会首先被抽样,接着会使用一个B个mini-batch实例:

\[(x_1, p), (x_2, p), \cdots, (X_B, p)\]

会从该domain中抽样。STAR会首先将这些input features通过一个embedding layer进行嵌入作为低维vectors。在工业推荐系统中,该模型通常会使用数十亿features(15)进行训练,embedding的参数通常要比其它部分的参数更多。这使得它在不同domains上使用有限数据来学习domain-specific embedding很难。例如:对于在日常任务中用到的模型,embeddings参数要比FC layers上超过10000倍。因此,在STAR模型中,我们将所有domains共享相同的embedding layer,例如:在不同domains上的相同ID features会共享相同的embedding。共享的embedding layer会跨不同的domains,可以极大减少计算和内存开销。

该embeddings接着被pooled和concatenated,来获得B个固定长度的reprensentations。在这之后,B个抽取的representations会通过PN(patitioned normalization) layer进行处理,接着为不同domains进行独立的normalization statistics。normalizated vectors接着作为input被feed到star topology FCN中来获取output。star topology FCN包含了共享的centered FCN以及多个domain-specific FCNs。每个domain的最终模型通过将shared centered FCN和domain-specific FCN进行组合获得

在multi-domain CTR预估中,描述domain信息的features很重要。在STAR模型中,auxiliary network会将domain indicator作为input,并使用描述该domain的其它features来feed到auxiliary network中。auxiliary network的output 会被添加到star topology FCN的output中,来获取最终的prediction。我们让auxiliary network比star topoology FCN更简单,便得让模型以一个直接和简单方式来捕获domain差异。接着我们描述这些组件。

3.3 Partitioned Normalization

如上,raw featrures会首先转换成低维embeddings,接着进行pool和aggregation来获得中间表示。尽管一个实例的中间表示为z,为了训练deep networks更快和更稳定,一个标准的惯例是应用normalization layer到中间表示z上。在所有的normalization方法之间,batch normalization(BN)是一个表示方法,它对于训练非常深的DNN很重要(14,31)。BN会为所有样本使用一个全局的normalziation,它会累积normalization moments,并学习跨多个样本的共享参数。具体的,BN的训练归一化给定如下:

\[z' = \gamma \frac{z-u}{\sqrt{\sigma^2 + \epsilon}} + \beta\]

其中:

  • z’是output
  • \(\gamma\)和\(\beta\)是可学习的scale和bias参数
  • \(\mu, \sigma^2\)是当前mini-batch的均值(mean)和方差(variances)

在testing期间,在所有样本上的均值E和方差Var的移动平均统计,使用如下:

\[z' = \gamma \frac{z-E}{\sqrt{Var + \epsilon}} + \beta\]

…(2)

换句话说,BN会假设:所有样本是独立同分布(i.i.d)的,并在所有训练样本上使用共享的statistics。

然而,在multi-domain CTR预估中,样本假设是在一个特定domain上是局部i.i.d的。在testing期间在BN layers上共享全局的monents和参数,会牺牲domain差异性,并导致模型效果的降级。为了捕获每个domain上唯一的数据特性,我们提出partitioned normalization(PN), 它会为不同domains上单独对statistics和parameters做normalization。具体的,在training期间,假设当前的mini-batch是会第p个domain上抽样得到,我们会计算当前mini-batch的均值(mean)和方差(variances),并将feature进行归一化:

\[z' = (\gamma * \gamma_p) \frac{z - \mu}{\sqrt{\sigma^2 + \epsilon}} + (\gamma + \gamma_p)\]

…(3)

其中:

  • \(\gamma, \beta\)是全局的scale和bias
  • \(\gamma_p, \beta_p\)是domain-specific scale和bias参数

对于每个mini-batch,它会接受最终scale,通过将共享的\(\gamma\)与domain-specific \(\gamma_p\)进行element-wise相乘作为final scale,例如:PN会根据domain indicator自适应地对representation进行缩放。相似的,PN的bias也可以根据domain自适应地计算,它可以通过global bias \(\beta\)和domain-specific bias \(\beta_p\)求和来实现。注意:通过对比BN,PN也会在training期间使用当前mini-batch的moments,但PN会引入domain-specific scale和bias \(\gamma_p, \beta_p\)来捕获domain差异。

除了在scale和bias上的修改外,PN也会让不同domains进累计domain-specific的均值\(E_p\)和方差\(Var_p\)的移动平均。在testing期间,PN会将第p个domain的实验z进行转换:

\[z' = (\gamma * \gamma_p) \frac{z - E_p}{Var_p + \epsilon} + (\gamma + \gamma_p)\]

…(4)

从等式(4)来说,我们可以看到,PN会使用domain-specific的平均\(E_p\)和方差\(Var_p\)来归一化中间表示z。因而,PN会根据domain indicator为条件自适应更改中间表示来捕获差异特性。

3.4 Star Topology FCN

在PN layer之后,表示\(z'\)会被作为input来feed到下面的star topology multi-layer FCN上。如图5所示,提出的star topology FCN会为每个domain包含一个共享的centerd FCN和独立FCNs,因而,FCN的总数是M+1. 第p个domain的最终模型可以通过对shared centered FCN和domain-specific FCN组合来得到,其中,centered参数会学习在所有domains上的通用行为,domain-specific参数会捕获在不同domains上的指定行为,来帮助更多的fefined CTR预测。

图片名称

图5 STAR如何为不同domains生成FCN的参数。STAR包含了一个共享的centered FCN和独立的每个domain的FCNs。对于每个domain,一个neural network layer的最终weights会通过将shared FCN与domain-specific FCN进行element-wise乘法来获得。共享参数会通过所有示例的梯度进行更新,而domain-speciific参数只会通过在该domain下的样本进行更新。

特别的,假设:

  • W和b:分别表示shared FCN对应是NN layer上的weights和bias。
  • \(W_p\)和\(b_p\):分别表示第p个domain的specific FCN上相应layer上的weights和bias。
  • 我们将input维度表示为c,output维度表示为d,(例如:\(W, W_p \in R^{c \times d}, b, b_p \in R^d\))

第p个domain的最终的weights \(W_i^*\)和bias \(b_i^*\)可以通过以下获得:

\[W_p^* = W_p \otimes W, b_p^* = b_p + b\]

…(5)

其中:

  • \(\otimes\)表示element-wise乘法

假设:

  • \(in_p \in R^{c \times 1}\)表示来自第p个domain该neural network layer的输入,
  • \(out_p \in R^d \times 1\)表示最终的output

\(output_p\)给定如下:

\[out_p = \phi((W_p^*)^T in_p + b_p^*)\]

…(6)

其中:

  • \(\phi\)表示该layer的activation function

shared param和在domain-specific param的组合可以在所有layers上使用。通过这种方式,STAR可以对它的参数基于domain为条件进行调节。

注意,我们会对shared centerd FCN和domain-specific FCN进行组合策略,它的实现是:将每个layer上的weights进行element-wise乘,将bias进行加得到;也可以尝试研究其它策略。shared参数会通过对所有样本的梯度进行更新,而domain-specific参数则只会在使用该domain的样本时才会被更新。如上所示,工业推荐系统的大多数参数,会由embedding layer来贡献,STAR只会增加M个FCNs,量级很少。

3.5 Auxiliary Network

在CTR建模的传统方式下,所有features会被同等看待,并被feed给复杂的模型。在multi-domain CTR预测时,对于模型来说自动学习domain差异是很难的。我们会讨论一个好的multi-domain CTR模型应该具有以下几个特性:

  • (1) 具有考虑上domain特性的信息特征
  • (2) 这些featrures可以很容易并直接影响final CTR预估

背后的直觉是,描述domains的features很重要,因为它可以减少模型难度来捕获domains间的不同。

最后,我们提出一个auxiliary network来学习domain差异。为了讨论与domain特性相关的信息特征,我们将domain features直接看成是ID feature input。domain indicator会首先映射到embedding vector上,并与其它features进行concate。auxiliary network接着会根据concatenated features分别计算forward pass,来获得一维output。

  • \(s_m\):表示star topology FCN的一维output
  • \(s_a\):表示auxiliary network的output

\(s_m\)和\(s_a\)会被相加来获得最终logit。接着使用sigmoid来获得CTR预测:

\[Sigmoid(s_m + s_a)\]

…(7)

在我们的实现中,auxiliary network会比主网络更简单,它是一个二层FCN。这种简单结构可以使得domain features可以直接影响final prediction

另外,

  • \(\hat{y}_i^p\)表示在第p个domain的第i个样本上的预测概率
  • \(y_i^p \in \lbrace 0, 1\rbrace\)是ground truth

我们会在所有domains上对cross-entropy loss function进行最小化:

\[min \sum\limits_{p=1}^M \sum\limits_{i=1}^{N_p} - y_i^p log(y_i^p) - (1 - y_i^p) log(1 - \hat{y}_i^p)\]

…(8)

4.实验

参考

JD在《DADNN: Multi-Scene CTR Prediction via Domain-Aware Deep Neural Network》提了一种domain-aware DNN介绍。

1.介绍

2.模型结构

图片名称

图2 模型结构展示(fts-features)。(a) DNN model,它仅会考虑单个场景 (b) DADNN-MLP model,它会进一步考虑对于每个单独场景裁减出的差异特性。routing layer会使用关于scene id的一个wide input来区分场景。KT表示在多个场景间的内部知识迁移(internal knowledge transfer) (c)DADNN-MMoE model,它引入了multi-gage mixture-of-experts来替换hard shared-bottom block。gate的weights允许为每个单独scene进行差异化representations

C.Routing & Domain Layer

如果遵循相同的分布,独立场景的数据很少。为了减小跨场景的domain shift,routing layer会将通过场景来将样本划分给各自的domain layer,这样,对于对于每个独立的场景可以进行裁减出差异的representations。routing layer会通过一个scene id的wide input来区分场景。当在线进行serving时,对于每个场景来说只有一个domain layer会激活。routing和domain layer如图2(b)和图2(c)所示。更特别的,每个场景具有一个domain layer,它只会使用它自己的数据来调整模型参数。为了这个目的,domain layer可以来缓解引入多个数据分布带来的效果退化。给定一个dataset \(D = \lbrace (x_i, y_i) \mid i = 1,2,\cdots, N \rbrace\),我们的模型的objective function定义如下:

\[\underset{W_d}{argmin} L_d (W_d; D)\]

…(5)

其中:\(L_d\)是在training set的total loss。它的公式为:

\[L_d(W_d; D) = \sum\limits_{k=1}^K \alpha_k L_{d_k}\]

…(6)

其中:

  • \(L_{d_k}\)是第k个场景的loss
  • \(\alpha_k\)是它相应的weight
  • K是场景号

通过我们的探索,我们发现,当将\(\alpha_k\)动态地设置为第k个场景的样本百分比时效果最好。特别的,\(L_{d_k}\)通常定义为cross-entropy loss function:

\[L_{d_k} = - \frac{1}{N_k} \sum\limits_{i=1}^{N_k} (y_i log p(x_i) + (1-y_i) log(1-p(x_i)))\]

…(7)

其中:

  • \(N_k\)是第k个场景样本的size
  • \(y_i\)是第i个实例的ground truth
  • \(p(x_i)\)是第k个domain layer的output,它表示样本\(x_i\)被点击的概率

D. Knowledge Transfer

尽管routing和domain layer可以缓和domain shift,domain layer对于流量有限的场景可能会训练得不够充分。另外,在我们的实验中,这些场景都是特定比较相似的feeds。为了这个目的,我们提出了一个knowledge transfer模块,它位于每两个场景间,允许综合知识交互(knowledge interactions)和信息共享(information sharing),如图2(b)和图2(c)所示。一旦这些来自teacher domain classifier的knowledge被生成,它可以通过其它cross-entropy loss来指导其它domain layers。另外,我们会描述我们提出的knowledge transer方法。给定一个dataset \(D = \lbrace i=1, 2, \cdots, N \rbrace\),我们的模型的objective function如下所定义:

\[\underset{W_d, w_{kt}}{argmin} L_d(W_d; D) + L_{kt}(W_{kt}; D)\]

…(8)

特别的:\(L_{kt}\)是knowledge matching loss,它表示由[14]扩展而来的pairwise probabilistic prediction mimicking loss,它的定义如下:

\[L_{kt} = \sum\limits_{p=1}^K \sum\limits_{q=1, p \neq q}^K u_{pq} L_{pq}\]

…(9)

\[L_{pq} = - \frac{1}{N_p} \sum\limits_{k=1}^{N_p} (p(x_i) logq(x_i) + (1 - p(x_i)) log(1-q(x_i)))\]

…(10)

其中:

  • \(p(x)\)和q(x)分别表示teacher network和student network。
  • \(u_{pq}\)是classifier p到q的weight,\(N_p\)是teacher样本的size。在我们的实验中,我们设置\(u_{pq}\)为0.03。

特别的,我们只会使用在teacher network中的场景数据来更新student network。我们会开发gradient block scheme来阻止teacher net恶化,它在【16】中有使用。

4.实验

在本节中,我们会详细描述我们的实验。我们会在从公司中的在线广告系统中收集到的数据集来进行实验。另外,我们设计实验来验证routing和domain layer,MMoE模块和knowledge transfer的的效果。最后,我们会共享在线serving的结果和技术。

A.Metrics

AUC是在线CTR预估领域广泛使用的metrics。它表示:一个CTR predictor对于随机选择一个postive item高于一个随机选择negative item的概率。由于私有场景的数据分布通常是多样的,我们会使用一个派生自GAUC的metric,它表示了一个通过将每个场景的样本group计算而来的weighted average AUC。一个基于impression的GAUC计算如下:

\[GAUC = \frac{\sum\limits_{i=1}^K impression_i \times AUC_i}{\sum\limits_{i=1}^K impression_i}\]

…(11)

其中,weight是每个场景的曝光数。该metric会measures intra-scene order的好坏,并表明了在广告系统中的在线效果更相关。特别的,我们使用calibration metric来measure模块稳定性,因为CTR的accurate prediction对于在线广告的成功来说是必要的。它是average estimated CTR和empirical CTR之间的ratio:

calibration = pCTR / CTR

…(12)

calibration与1的差异越小,模型越好。

B.datasets和实验setup

参考