IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 论文阅读:LightGCN: Simplifying and Powering Graph Convolution Network for Recommendation -> 正文阅读

[人工智能]论文阅读:LightGCN: Simplifying and Powering Graph Convolution Network for Recommendation

论文阅读:LightGCN: Simplifying and Powering Graph Convolution Network for Recommendation

?paper:https://arxiv.org/abs/2002.02126
?code:https://github.com/kuandeng/LightGCN

NGCF和LightGCN模型展示对比

何向南老师组的两大必读论文NGCF和LightGCN,分别发在SIGIR19’和SIGIR20’。

LightGCN模型的总体思路就是:
(1)先将用户和项目节点的邻域聚合
(2)使用三层卷积层分别生成每层的嵌入
(3)将节点的原始输入与生成每层新的嵌入做一个加权和
(4)将用户和项目最终的生成节点表示做内积生成预测的分数

?

图NGCF ????

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???图LightGCN

NGCF主要遵循标准GCN变形得到,包括使用非线性激活函数和特征变换矩阵w1和W2。然而作者认为实际上这两种操作对于CF并没什么大用,理由在于不管是user还是item,他们的输入都只是ID嵌入得到的,即根本没有具体的语义(一般在GCN的应用场景中每个节点会带有很多的其他属性),所以在这种情况下,执行多个非线性转换不会有助于学习更好的特性;更糟糕的是,它可能会增加训练的困难,降低推荐的结果。

所以将非线性激活函数non-linear和特征变换矩阵feature transformation都去掉,只增加一组权重系数来邻域聚集weighted aggregate不同gcn层输出的嵌入为最终的嵌入,大大简化了模型。即在LightGCN中,只采用简单的加权和聚合器,放弃了特征变换和非线性激活的使用,所以公式变为(只剩下):

?

而且从上式可以看到它只聚合连接的邻居,连自连接都没有。最后的K层就直接组合在每个层上获得的嵌入,以形成用户(项)的最终表示:

?

其中αk设置为1/(K+1)时效果最好。其余的部分就和NGCF一模一样。

为什么要组合所有层?

  1. GCN随着层数的增加会过平滑,直接用最后一层不合理

? ? ?2. 不同层的嵌入捕获不同的语义,而且更高层能捕获更高阶的信息,结合起来更加全面

? ???3. 将不同层的嵌入与加权和结合起来,可以捕获具有自连接的图卷积的效果,这是GCN中的一个重要技巧

LightGCN的缺陷:

?

上式所示为LightGCN的每一层的计算方式,它直接聚合这些节点而不采用可学习权重和激活函数。其中u表示用户,i表示item,N(u)表示用户邻接的item集合,N(i)表示item邻接的user的集合,d表示节点的度。

?

LightGCN是通过多层layer堆叠进行多层次的消息传递,从而进行节点之间的聚合,最后将两者的embedding求内积。但是这种堆叠的方式会影响基于GCN的推荐系统的训练效率和效果。以第L层为例,将上面lightgcn的定义中的item和user的embedding做内积可以计算得到下式,其中他u,v表示用户;i,k表示item。从下式可以发现做完内积后,模型在多个维度上进行了建模,包括用户-用户,用户-item,item-item。通过挖掘这些关系使得基于图的协同过滤方法能够起到好的效果。

  1. LightGCN对于给定的用户u,在更新node时item k和item i对应的权重不一样,即在聚合时的开方号不一致,这并不合理。
  2. LightGCN多层堆叠进行消息传递,但未捕捉到重要性,可能会引入噪声。
  3. 多层堆叠消息传递可以捕获高阶信息,但实际上LightGCN只能堆叠2,3层就过平滑了,高阶信息很难捕捉。这种多层堆叠的显式消息传递是否必要?

模型核心代码:

def _create_lightgcn_embed(self):

????????if self.node_dropout_flag:

????????????A_fold_hat = self._split_A_hat_node_dropout(self.norm_adj)

????????else:

????????????A_fold_hat = self._split_A_hat(self.norm_adj)

????????

????????ego_embeddings = tf.concat([self.weights['user_embedding'], self.weights['item_embedding']], axis=0)

????????all_embeddings = [ego_embeddings]

????????

????????for k in range(0, self.n_layers):

????????????temp_embed = []

????????????for f in range(self.n_fold):

????????????????temp_embed.append(tf.sparse_tensor_dense_matmul(A_fold_hat[f], ego_embeddings))

????????????????

????????????#归一化已经在A里面得到A_hat了,所以这里直接聚合就完了

????????????side_embeddings = tf.concat(temp_embed, 0)

????????????ego_embeddings = side_embeddings

????????????all_embeddings += [ego_embeddings]

????????all_embeddings=tf.stack(all_embeddings,1)#然后拼一起

????????all_embeddings=tf.reduce_mean(all_embeddings,axis=1,keepdims=False)

????????u_g_embeddings, i_g_embeddings = tf.split(all_embeddings, [self.n_users, self.n_items], 0)

????????return u_g_embeddings, i_g_embeddings

总结:

LightGCN将传统的GCN中的特征转换和非线性激活去除,并且在CF上取得了很好的效果,同时,在聚合邻域时,LightGCN以层组合方式代替了传统GCN中的自连接。总之LightGCN易于训练,泛化能力强,效率高。

学习计划:

  1. 论文阅读:Ultra Simplification of Graph Convolutional Networks for Recommendation
  2. 对比总结一下GCN的三个模型NGCF、LightGCN、ULtraGCN。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-03-06 13:02:47  更:2022-03-06 13:04:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 17:42:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码