SimpleX: A Simple and Strong Baseline for Collaborative Filtering (CIKM’21)
人大高瓴、华为诺亚方舟和清华深圳院的工作。清华前一阵开源了一个CF的baseline,这篇文章就是基于这个库。
看了上面两篇文章 (UltraGCN、GF-CF),再结合SGL,我觉得可以设计一个对比学习loss,不需要数据扩增,正例是正样本,负例就是负样本,因为点积就等价于cosine相似度。这样可以利用LightGCN的smoothness (GF-CF),防止负样本over-smoothing (UltraGCN)。果然这篇文章已经这样做了,并且还设计了一个margin,更加make sense。
这篇文章强调,现有的推荐模型都专注于设计复杂庞大的interaction encoder,忽略了loss function和negative sampling。这篇文章实验对比了六种loss的效果和不同负采样比例,并提出了一个cosine contrastive loss (CCL),在11个数据集上对比了29个现有的模型。
Motivation
现有的工作都专注于设计复杂庞大的interaction encoder,确实,为了模型能够建模各种关系,提取各种兴趣,模型复杂度越来越高。但是这样的模型是不利于工业场景的。现有的工作一般都不重视loss函数和负采样比例,一般都是用个BPR loss,负采样比例设为1。文章认为一个合适的loss函数和一个合适的负采样比例要比选什么模型更重要。文章就实验研究了各种loss函数和不同的负采样比例。
文章说的也比较好听,不是批评之前的工作,而是提供一个更强更简单的baseline SimpleX 以便后续的研究工作。好话都让他说了。
SimpleX with CCL
设计的cosine contrastive loss (CCL):
L
C
C
L
(
u
,
i
)
=
(
1
−
y
^
u
i
)
+
w
∣
N
∣
∑
j
∈
N
max
(
0
,
y
^
u
j
−
m
)
\mathcal{L}_{C C L}(u, i)=\left(1-\hat{y}_{u i}\right)+\frac{w}{|\mathcal{N}|} \sum_{j \in \mathcal{N}} \max \left(0, \hat{y}_{u j}-m\right)
LCCL(u,i)=(1−y^ui)+∣N∣wj∈N∑max(0,y^uj−m)
即正样本的余弦相似度越像越好,最好为1;负样本的余弦相似度越不像越好,但也不至于为0 (为0就是普通的negative sampling了),不要超过阈值
m
m
m。
这个margin loss有个好处就是,可以过滤掉信息量小的负样本,优化信息量大的难样本!比如同样是负采样1000个样本,普通负采样对所有的负样本一视同仁,但这会导致数据不平衡,淹没掉有用的梯度,模型难以收敛。CCL对于信息量小的负样本(余弦相似度本来就很低的样本)直接放过,难以区分的hard negative 样本才会被优化。
这个 w w w 也很重要,实验结果看对模型效果影响无比巨大。文章说这个 w w w 类似于WRMF的weight。
设计的模型SimpleX结合了YouTubeNet那一派系的模型设计,利用了用户行为:
Aggregation可以是pooling、self-attention 或者user-attention,但效果影响不大。
选Cosine作为loss的原因还有,先对向量做L2正则化再做点积,有利于缓解Popularity Bias ❓ 文章这里没有展开解释,我没有理解。
实验结果刷爆AmazonBook
在MF上六种loss函数效果对比,可以看出BPR并不是最优的:
在MF上不同负采样比例效果对比。首先提高负采样比例是有用的,但是对于对BPR、PHL、MSE loss效果提升有限:
但是值得注意的是,在Gowalla数据集并没有比LightGCN好: