SIGIR'21「华为」双塔模型中的CBNS负采样方法

Cross-Batch Negative Sampling for Training Two-Tower Recommenders

https://dl.acm.org/doi/pdf/10.1145/3404835.3463032


ef86586a8b538d0663b90698a4bae0a4.png

1.背景

本文是SIGIR'21上的一篇短文,主要是对召回阶段的双塔模型中的负采样方法的改进。通常用的表多的是batch内(in-batch)负采样,但是直接使用in-batch负采样,需要较大的batch size,而如果batch size太大,GPU就会承受不住,因此负样本的多少会受到GPU的限制。本文主要利用网络模型训练到一定程度后是相对稳定的,从而得到的embedding相差不大。在此基础上将之前batch的embedding存储之后用于后续batch的训练,从而提出了Cross Batch Negative Sampling (CBNS)。

e05bcf7ac059991134ff9721b2898a37.png

2.方法

803b4bcd9b87b4660cd6c5f87b13f8ee.png双塔模型在这里不做详细介绍,主要就是对user和item的embedding求相似度从而得到推荐分数,最终进行召回。得分或者说概率计算方式如下,这里用到的是sampled softmax。其中N表示负采样的样本,而u,v分别表示user和item的embedding。最后采用交叉熵损失函数计算损失。

负采样用的比较多的是in-batch负采样方式,如图1.a所示。即,除了当前的正样本,把同一batch中的其他样本作为负样本。其中负样本的分布符合一元模型分布(unigram distribution),即和样本出现的频率有关,频率越高的越有可能被选为负样本。采用in-batch的负采样方式,并根据sampled softmax的含义,可以将其上式改写为下式,可以发现不同点在于,log用于矫正采样偏差。in-batch的采样方式使得负采样的数目和batch size是呈线性关系的,会受到batch size的限制。而batch size太大GPU的内存就会承受不住。

2.1CBNS

2.1.1Embedding Stability

在训练模型的时候,我们通常只考虑当前batch的信息,而忽略了前面batch的信息。本文所提的CBNS方法就是利用之前batch中的信息来帮助训练。文中用下式来衡量特征偏移,其中gv表示将item编码的函数,表示其参数。表示训练轮次和轮次差。

如下图所示,通过youtube DNN在in-batch上的实验,作者发现在训练前期,特征偏移是非常大的,也就是说特征的在不同轮次中的变化是很大的,但是随着lr的降低,在训练了轮后,embedding就相对稳定了。因此作者希望采用“embedding stability”这一现象来提升采样效率。但是直接使用之前batch的embedding会给梯度带来误差,作者在文中证明了误差的影响很小,详细证明可以看文中的3.3.1。6c4a9962954b11af88d80c5c95f8a4a2.png

2.1.2FIFO Memory Bank

正如2.1.1中所说的embedding stability的稳定是需要在一定的轮次之后,因此在前期作者依旧是使用in-batch,而是在相对稳定之后采用CBNS。存储之前batch的embedding,文中采用先进先出的大小为M的队列组,其中表示item 在一元模型分布下的的采样概率。具体结构如图1.b。最后sampled softmax改写为:

在每次迭代后,把当前batch的embedding和采样概率存入队列中,并将最早的embedding出队。在计算sampled softmax的时候可以用到batch内的和队列中的负样本。

9d646fecf2dc5fb177913beb256bc40a.png

3.结果

在不同召回模型上的实验结果表明所提采样方法能够使Recall和NDCG明显提升,这也说明利用之前的embedding的信息能够进一步促进模型的性能。可以发现由于多了队列,在时间耗费上有所上升,不过上升的不多。f046a0229c874931559886a1247c77da.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值