轻量级图卷积网络LightGCN介绍和构建推荐系统示例
推荐系统是当今业界最具影响力的 ML 任务。从淘宝到抖音,科技公司都在不断尝试为他们的特定应用程序构建更好的推荐系统。而这项任务并没有变得更容易,因为我们每天都希望看到更多可供选择的项目。所以我们的模型不仅必须做出最优推荐,而且还必须高效地做出推荐。今天介绍的这个模型被称作:Light Graph Convolution Network 或 LightGCN¹。
让我们将用户和项目想象成二分图中的节点,其中用户与已经选择的项目相连。所以寻找最佳推荐项目的问题就变成了链接预测问题。
示例数据集
作为一个实际示例,我们所说的用户是搜索音乐艺术家(“项目”)的音乐听众。原始数据集可在 ³ 获得。
该数据集包含 1824 位用户、6854 位艺术家和 20,664 个标签。一个普通艺术家与大约 3 个用户相关联,而一个普通用户与大约 11 个艺术家相关联,因为在这个特定数据集中,艺术家的数量大大超过了用户。这个数据集的一个特点是可以看到每个新连接的创建时间,这对我们来说非常的重要,因为可以通过连接时间将数据分成训练集(最早时间)和测试集(最新时间)³。我们的目标是想要创建一个推荐系统模型来预测未来形成的新标签/连接。
基于嵌入的模型
LightGCN 是一个基于嵌入的模型,这意味着它试图为用户和项目找到最佳嵌入(向量)。除此以外,它还在寻找最优评分函数 f,这个函数为新的用户-项目进行评分,分数高的则会被推荐。
对于嵌入向量,具有相似偏好的用户的嵌入会相似,而偏好不同的用户的嵌入会更加不同。
在继续研究 lightGCN 之前,首先简单介绍一下的基于嵌入的模型,矩阵分解法在传统的推荐系统中已被应用多年,并且效果一直都很好,所以它将作为我们的基线模型:
上图是矩阵分解(MF)过程与原始图以及嵌入矩阵²的关系。
这里我们将矩阵分解模型作为基线与 LightGCN 模型进行比较。这里的评分函数 f 只是两个嵌入和模型通过最小化矩阵 (R - HW) 的 Frobenious 范数来训练的标量积,其中矩阵 R 是用户-项目邻接矩阵,而矩阵 H 包含用户嵌入,W 包含项目嵌入²。评分函数 f 在 lightGCN 的情况下是一样的,但是为了直观地理解模型,首先要考虑 lightGCN 模型的性能优化目标是什么。
但是如何衡量性能呢?
一种流行的性能度量是从测试集中获取所有实际的新用户边并计算考虑模型的前 K 个预测(意味着具有最高分数 f(用户,项目))。这个分数是为每个用户计算的,然后对所有用户的分数进行平均以获得最终分数,称为 Recall @ K²。
但是Recall@K度量是不可微的,这意味着需要设计一个可微的损失函,这样lightGCN模型的训练才能利用梯度找到最优值。
设计这个损失函数的最主要的目标是:未来正边的计分函数结果是一个较大的数字,而未来负边的计分函数结果是一个较小的数字²。所以结合这两个问题的一个比较好的方法是:希望用户u的给定未来正边和用户u的给定未来负边之间的差值是一个较大的数字:
在使用 sigmoid 函数将两个分数的差异映射到区间 [0, 1]后,就能够将分数视为概率。因此对于一个给定用户u,可以将给定的所有正边和负边对的分数组合起来输入损失函数中。然后在所有用户中平均这些损失²以获得最终的损失,这称为贝叶斯个性化排名 (Bayesian Personalized Ranking BPR) 损失:
LightGCN
下面进入本文的正题,虽然矩阵分解方法仅捕获图的一阶边连接结构(仅来自给定节点的直接邻居的信息),但我们希望模型能够捕获更高阶的图结构。所以使用 LightGCN 来做这件事,它从用矩阵分解初始化的节点嵌入开始训练:
嵌入初始化后, LightGCN 使用 3 层来完成嵌入的训练,在每一层中,每个节点通过组合其邻居的嵌入来获得新的嵌入。这可以被认为是一种图卷积(参见下面与图像卷积的比较):
图像卷积(左)可以看作是图卷积(右)的一个特例。图卷积是一种节点置换不变的操作。
上图所示,与卷积层类似堆叠更多层意味着来自给定节点的信息能够获得离该节点更远的节点的信息,这样可以根据需要捕获更高阶的图结构。但是在每次迭代 k 中,嵌入究竟是如何组合成一个新的嵌入的呢?下面举两个例子:
完整文章:
https://www.overfit.cn/post/4e217d5a562f40f9a5efc4a2b5300b09