SelfCF论文阅读笔记

Abstract

讲述现存的挑战,现有的方法通常采用负抽样来区分不同的项目,也就是观察到的用户-项目对被视为正实例,未观察到的对被称为负实例,并且在一个定义的分布下进行采样以进行训练。在大数据集上进行负采样的计算成本高,所以负项目应该在定义的分布下仔细的进行抽样,避免在数据集中观察到积极的项目。但是不可避免的是从训练数据集中抽样的一些负样本在测试集中可能是正的。于是提出了一个自监督的协同过滤框架(SelfCF)

SelfCF的主要思想是增加由主干网络生成的潜在嵌入,而不是用户/项目id的原始输入,提出了三种嵌入扰动的技术。该框架支持学习没有负样本的用户和项目的信息表示

Introduction

现有的CF模型严重依赖于负抽样技术来区分不同的项目,因为负样本不是自然可用的

负抽样技术也存在一些局限性,首先是引入了额外的计算和内存成本。而且即使为用户选择了非冲突的阴性样本,这些样本也可能属于用户未来的阳性项目,因为未观察到的交互可能是真正的负面实例,也可能是缺失的值,将落在测试集中的抽样对表示为假阴性样本。

总结一下,也就是说用户没有交互的物品不一定是用户不想要的,如果把当前用户没有交互的物品当成负样本会出问题

目前我们希望能在不进行负抽样的情况下训练模型

然后介绍一下自监督学习,说基本思想是Siamese网络(连体网络)的一种变体,最大化从样本的不同扰动版本中获得表示的相似性,然后介绍一下连体网络,连体网络通常包括两个对称网络(即在线网络和目标网络),用于输入比较。然后介绍了一下只有正采样的问题,会导致崩溃的解。

Siamese网络的结构如下:

pFuAb0f.png

没有负样本的SSL的学习范式与现有的使用负样本来学习表示的范式略有不同。没有负样本的SSL打算学习一个具有增强不变表示的编码器,也就是说,它们基于连体网络结构,最小化两个正样本之间的距离。

本文提出了一个自监督协同过滤的框架,对用户和项目的潜在嵌入进行后验扰动,以获得一个对比对。在架构设计上,我们只使用了一个编码器。此外我们没有在编码前扰动输入,而是使用后验嵌入扰动生成不同但不变的对比视图。后验扰动的一个好处是框架可以将封装的主干的内部实现作为黑盒。

本文的贡献如下:

  • 我们提出了一个新的框架,SelfCF,仅仅基于观察到的积极交互来学习用户/项目的潜在表示。该框架使用后验输出扰动来生成相同用户/项目嵌入的不同增强视图,用于对比学习
  • 设计了三种扰动技术,历史嵌入,嵌入dropout和边缘剪枝来对backbone的输出进行损坏

Method

模型的大体结构如下:

pFuAcm6.png

我们的框架部分继承了SimSiam的网络结构,在我们的框架SelfCF中,目标是学习仅基于积极的用户-项目交互的用户和项目的信息性表示。用户和项目的潜在嵌入都是从在线网络中学习到的。与卷积类似,这是一种成功的归纳偏差,权重共享连接网络可以对更复杂的转换(比如数据增强)建模不变性。SelfCF中的在线网络和目标网络使用相同的参数副本以及主干来建模表示不变性。但是因为去掉了动量编码器,所以在线网络和目标网络将产生相同的输出,使得损失完全消失。

正用户-项目对在保持其表示不变性的同时很难被扭曲。我们使用嵌入扰动技术来达到同样的效果。

通过输出扰动来增强数据

SelfCF框架增强了用户和项目的输出嵌入,以生成两个对比视图,提出了三种方法来在框架中引入嵌入扰动,三种方式的表示如下:

pFuZq76.png

损失函数

用户项目对最初由一个主干网中的编码器网络f进行处理,然后将编码器的输出复制到目标网络中进行嵌入扰动。然后我们将来自在线网络的编码器的输出表示为\((e_u,e_i)=f(u,i)\)。最后使用线性预测器将输出转换为\((\dot{e}_u,\dot{e}_i)=h(e_u,e_i)\),并将其与其他视图的扰动嵌入相匹配\((\tilde{e}_u,\tilde{e}_i)=g(e_u,e_i)\)。最后损失函数为:

\(\mathcal{L}=\frac12C(\dot{e}_u,\widetilde{e}_i)+\frac12C(\tilde{e}_u,\dot{e}_i)\)

上式中的C为:

\(C(e_u,e_i)=-\frac{(e_u)^Te_i}{||e_u||_2||e_i||_2}\)

从损失函数可以看出,我们打算最大化对给定的一个用户u的扰动项目i的预测

最后我们在目标网络上停止梯度,并只在在线网络上强制反向传播损失。我们遵循停止梯度算子sg,并通过更新损失函数来实现该算子

\(\mathcal{L}=\frac12\left(C(\dot{e}_u,sg(\widetilde{e}_i))+C(sg(\widetilde{e}_u),\dot{e}_i)\right)\)

使用停止梯度算子,目标网络不接收来自\((\tilde{e}_u,\tilde{e}_i)\)的梯度。然而,在线网络中的编码器f接收\((\dot{e}_u,\dot{e}_i)\)的梯度,并将其参数化到全局最优。相反,去掉该操作符会导致在线网络学习的不稳定。我们还在在线嵌入和预测器上加入了正则化惩罚,最终的损失函数为:

\(\mathcal{L}=\frac12\left(C(\dot{e}_u,sg(\tilde{e}_i))+C(sg(\tilde{e}_u),\dot{e}_i)\right)+\lambda_1\cdot(|||e_u||_2^2+||e_i||_2^2)+\lambda_2\cdot(||h||_1^2)\)

SelfCF的伪代码如下:

pFueXbq.png

Top-K 推荐

在SSL中,我们最小化每个正交互作用之间的预测损失。直观的说,我们基于交叉预测任务来预测未来的交互得分。也就是说我们预测了项目i与u的交互概率和用户u与i的交互概率

推荐评分的计算方法为:

\(s(e_u,e_i)=h(e_u)\cdot(e_i)^T+e_u\cdot h(e_i)^T\)

由于编码器f在在线网络和目标网络之间是共享的,所以我们使用从在线网络中获得的表示来预测每个用户的前k项

posted @ 2024-01-28 17:19  ANewPro  阅读(60)  评论(0编辑  收藏  举报