Cross-Batch Negative Sampling for Training Two-Tower Recommenders
https://dl.acm.org/doi/pdf/10.1145/3404835.3463032
1.背景
本文是SIGIR'21上的一篇短文,主要是对召回阶段的双塔模型中的负采样方法的改进。通常用的表多的是batch内(in-batch)负采样,但是直接使用in-batch负采样,需要较大的batch size,而如果batch size太大,GPU就会承受不住,因此负样本的多少会受到GPU的限制。本文主要利用网络模型训练到一定程度后是相对稳定的,从而得到的embedding相差不大。在此基础上将之前batch的embedding存储之后用于后续batch的训练,从而提出了Cross Batch Negative Sampling (CBNS)。
2.方法
双塔模型在这里不做详细介绍,主要就是对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。
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内的和队列中的负样本。
3.结果
在不同召回模型上的实验结果表明所提采样方法能够使Recall和NDCG明显提升,这也说明利用之前的embedding的信息能够进一步促进模型的性能。可以发现由于多了队列,在时间耗费上有所上升,不过上升的不多。