前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【GNN】GCMC:GNN 在推荐系统中的应用

【GNN】GCMC:GNN 在推荐系统中的应用

作者头像
阿泽 Crz
发布2020-07-21 11:25:57
1.7K0
发布2020-07-21 11:25:57
举报

今天学习的是 KDD18 的一篇论文《Graph Convolutional Matrix Completion》,作者是阿姆斯特大学的同学,Thomas N. Kipf 大佬是二作。

前面我们介绍了 Kipf 大佬利用变分自编码器(VGAE)来完成链接预测问题,链接预测问题放在矩阵中可以被认为是矩阵补全。这篇论文在 VGAE 的基础上提出了 GCMC 模型,设计了一个可微的基于消息传递的图自编码框架进行矩阵补全(matrix completion),同时考虑边信息和网络结构,并分析了边信息在推荐系统冷启动的影响。

1.Introduction

先简单介绍下二部图(bipartite graph)。

二部图是一种特殊的图结构,所有的顶点可以被分割为两个互不相交的子集(U,V),并且每条边

e_{ij}

所关联的顶点

i,j

分别属于这两个不同的顶点集合

(i\in U,j\in V)

二部图的应用非常广泛,比如说电影推荐这样的交互数据则可以用一个二部图来表示(user-movie),图的边则是用户对电影的评分,此时的矩阵补全就是预测用户的观看后的评分。

作者在这篇论文中提出的 GCMC 框架是一种对矩阵进行补全的图自编码框架,其利用 user 和 item 的交互信息生成 user 和 item 之间的隐特征,并通过双线性解码器来重建 user 和 item 之间的链接。

这篇论文的主要贡献主要有两点:

  1. 将 GNN 应用于带有 side information 的矩阵补全任务中,并证明基于消息传递的模型比之前的复杂模型具有更好的性能;
  2. 引入了 Dropout 正则化技术:以一定概率删除单个节点的所有传出消息。

2.GCMC

下图为 GCMC 的基本流程,在二部图的矩阵补全任务转换成比链接预测问题,并使用端到端的图自编码器进行建模:

2.1 Graph convolutional encoder

首先来看编码器。

本文针对推荐任务提出了图卷积编码器,其能够有效的利用卷积操作的权值共享。图数据的局部卷积操作只考虑节点的直接邻居,因此可以应用于图数据中的所有位置。

我们也知道,局部图卷积可以看作是一种消息传递,节点的特征值沿着边进行传递和转换。作者设计了一种基于评分等级的转换,从 item j 到 user i 的信息传递被定义为:

\mu_{j\rightarrow i,r} = \frac{1}{c_{ij}} W_r x_j^v \\

其中,

c_{ij}

为正则化常数,可以为左正则化

|N(u_i|

也可以为对称正则化

\sqrt{|N(u_i)||N(u_j)|}

N(u_i)

表示 user i 的邻居集合;

W_r

为基于边类型(评分等级)的参数矩阵;

x_j^v

表示 item j 的特征向量。

从 user 到 item 的消息传递也可以采用类似的方式,这个过程称为图卷积层。

在消息传递完成之后,每一个节点都会对消息进行累积操作:

h_{i}^{u}=\sigma\left[\operatorname{accum}\left(\sum_{j \in \mathcal{N}_{i}\left(u_{i}\right)} \mu_{j \rightarrow i, 1}, \ldots, \sum_{j \in \mathcal{N}_{R}\left(u_{i}\right)} \mu_{j \rightarrow i, R}\right)\right] \\

其中,

\operatorname{accum}(\cdot)

为聚合运算,如 stack、sum 等;

\sigma(\cdot)

为激活函数。

h_i^u

进行转换便能得到 user 的 Embedding:

z_i^u = \sigma(Wh_i^u) \\

其中,W 为参数矩阵。

计算 item 的 Embedding

z_i^v

方法类似,并共享参数矩阵,这个过程称为稠密层。

在实验过程中,堆叠图卷积层并不能提高效果,但是在卷积层后连一个稠密层效果会好很多。

2.2 Bilinear decoder

再来看下解码器。

作者提出了一个双线性解码器(bilinear decode),把用户对物品的评分等级视为多类。

\check M

表示为 user 和 item 之间重构的评分矩阵。解码器可以通过对可能的评分等级进行双线性运算,然后用 softmax 函数生成一个概率分布:

p\left(\check{M}_{i j}=r\right)=\frac{e^{\left(z_{i}^{u}\right)^{T} Q_{r} z_{j}^{v}}}{\sum_{s=1}^{R} e^{\left(z_{i}^{u}\right)^{T} Q_{s} z^v_{j}}} \\

其中,

Q_r \in \mathbb{R}^{H\times H}

是一个可训练的参数共享矩阵(后面进行介绍),H 为节点的隐特征的维度。

预测的评分等级的计算方式为:

\check{M}_{i j}=g\left(u_{i}, v_{j}\right)=\mathbb{E}_{p\left(\check{M}_{i j}=r\right)}[r]=\sum_{r \in R} r\; p\left(\check{M}_{i j}=r\right) \\

2.3 Model train

然后看一下模型训练。

「考虑 Loss Function」

使用交叉熵损失函数:

\mathcal{L}=-\sum_{i, j ; \Omega_{i j}=1} \sum_{r=1}^{R} I\left[M_{i j}=r\right] \log p\left(\check{M}_{i j}=r\right) \\

其中,

I[k=l]

为指示函数,

k=l

是为 1,否则为 0;

\Omega\in{0,1}^{N_u\times N_v}

用来表示链接是否存在,其作用类似 mask;

「考虑 Mini-batch」

  • 对于不同评分类别将进行固定数量的 pair-wise 采样,一来减少训练所需内存,二来达到了正则化的效果;
  • 通过通过实验验证了 mini-batch 和 full-batch 的效果类似;
  • 在大数据集中应用了 mini-batch,而在小数据中应用 full-batch 以获得更快的收敛速度。

「考虑 Node Dropout」

  • 为了泛化模型,作者在训练过程中将以一定概率随机删除节点的所有传出信息;
  • 实验表明,节点 Dropout 比消息的 Dropout 更有效。

「考虑 weight sharing」

  • 考虑 user 对 item 打分的非均匀性,防止权重矩阵
W_r

的列优化不均匀,作者使用了一种在不同评分关系之间进行参数共享的方法:

W_r = \sum_{s=1}^r T_s \\

其中,

T_s

为基础矩阵,评分越高,

W_r

包含的

T_s

数量越多。作者称之为序数权值共享(ordinal weight sharing)。

解码器中的权重矩阵

Q_r

就是采用一组基于基础参数矩阵的线形组合的参数共享矩阵:

Q_{r}=\sum_{s=1}^{n_{b}} a_{r s} P_{s} \\

其中,

n_b

表示基权重矩阵

P_s

的数量;

a_{rs}

为可学习的系数。

为避免过拟合,同时减少参数的数量,基权重矩阵的数量要小于评分级别的数量。

2.4 Feature representation and side information

考虑建模时的除了节点表征外的辅助信息(side info),以 user 节点为例:

z_{i}^{u}=\sigma\left(W h_{i}^{u}+W_{2}^{u, f} f_{i}^{u}\right) \quad \text { with } \quad f_{i}^{u}=\sigma\left(W_{1}^{u, f} x_{i}^{u, f}+b^{u}\right) \\

其中,

W_1^{u,f}

W_2^{u,f}

为可训练的权重矩阵;

b^u

为一个 bias,

x_i^{u,f}

为节点 i 的辅助信息。

item 节点同理,把 u 改成 v 即可。

3.Experiments

简单看一下实验。

先看下数据集:

然后是不同模型在 ML-100K 上的表现,评分标准为 RMSE:

数据集大一点的情况下:

效果不满意再试一下其他数据集:

效果满意了,我们再分析下冷启动:

4.Conclusion

总结:GCMC 利用基于消息传递的图卷积网络将节点特征编码为隐特征,并利用双线形解码器预测未知边的不同评分值的概率评分,并取其期望作为边的预测评分。

5.References

  1. Berg R, Kipf T N, Welling M. Graph convolutional matrix completion[J]. arXiv preprint arXiv:1706.02263, 2017.
  2. [Github:gc-mc]
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 阿泽的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.Introduction
  • 2.GCMC
    • 2.1 Graph convolutional encoder
      • 2.2 Bilinear decoder
        • 2.3 Model train
          • 2.4 Feature representation and side information
          • 3.Experiments
          • 4.Conclusion
          • 5.References
          相关产品与服务
          批量计算
          批量计算(BatchCompute,Batch)是为有大数据计算业务的企业、科研单位等提供高性价比且易用的计算服务。批量计算 Batch 可以根据用户提供的批处理规模,智能地管理作业和调动其所需的最佳资源。有了 Batch 的帮助,您可以将精力集中在如何分析和处理数据结果上。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档