| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> Multi-GCCF:物尽其用 -> 正文阅读 |
|
[人工智能]Multi-GCCF:物尽其用 |
Multi-GCCF:物尽其用1 一点点引入Multi-Graph convolution collaborative filtering(Multi-GCCF) 属于基于图神经网络的协同过滤算法。 协同过滤算法通常基于这样一个假设:相似的用户往往喜欢同样的item,而具有相似客户的item往往会得到相似的评分。所以,大多数协同过滤算法基于user-item二分网络做出推荐,但由于在实际场景中每个user所对应的item数量是有限的,这就会导致构造出的user-item二分网络非常稀疏。此时,使用图卷积等深度学习算法很难在有限特征信息的基础上生成一个表示能力较强的embedding。 Mutil-GCCF的作者通过考虑user-user的交互信息和item-item的交互信息来缓解这一问题。在二分网络中,节点的类型包括item和user。各节点的一阶邻居为不同类别的节点,而二阶邻居则是同类节点。虽然考虑二阶邻居可以将user-user与item-item的交互关系考虑进去,但作者希望显式地考虑将其考虑进去。于是,构建user-user网络和item-item网络对算法进行了改进。 此外, user节点和item节点的类型不同,在信息聚合阶段使用同样的参数聚合两类不同类型的节点信息是不够合理的。Multi-GCCF在更新节点embedding时使用了两套参数将这两类节点分别聚合和特征转换,考虑user节点与item节点的内在差异。 2 Multi-GCCF一瞥Multi-GCCF主要分为以下三个部分:
总体框架如下: 2.1 Bipartite Graph Convolutional neural networksBipar-GCN层包含forward sampling和backward aggregating两块。其中,forward sampling的作用在于防止节点度幂律分布带来的影响。在采样完模型1到 K K K层的邻居节点之后,采用GCN来聚合邻居信息。 假设为每个节点学习到的初始embedding为 e u e_u eu?和 e v e_v ev?(若初始的节点输入有特征信息,这个初始embedding可以使用MLP学习)。 第
k
k
k层目标user的embedding更新机制如下: A G G R E G A T O R u = σ ( M E A N ( { h v k ? 1 Q u k } ) , v ∈ N ( u ) ) ) {\bf AGGREGATOR}_u=\sigma({\bf MEAN(\{h}_v^{k-1}{\bf Q}_u^k\}),v \in N(u))) AGGREGATORu?=σ(MEAN({hvk?1?Quk?}),v∈N(u))) Q u k {\bf Q}_u^k Quk?为第 k k k层user聚合权重矩阵。 同样地,第
k
k
k层目标item的embedding更新机制如下: h N ( v ) k ? 1 = A G G R E G A T O R v ( h u k ? 1 , v ∈ N ( v ) ) h^{k-1}_{N(v)}={\bf AGGREGATOR}_v({\bf h}_u^{k-1},v \in N(v)) hN(v)k?1?=AGGREGATORv?(huk?1?,v∈N(v)) A G G R E G A T O R v = σ ( M E A N ( { h u k ? 1 Q v k } ) , u ∈ N ( v ) ) ) {\bf AGGREGATOR}_v=\sigma({\bf MEAN(\{h}_u^{k-1}{\bf Q}_v^k\}),u \in N(v))) AGGREGATORv?=σ(MEAN({huk?1?Qvk?}),u∈N(v))) 整体示意图如下: 由上面的公式和示意图可以看出,Multi-GCCF对于user和item的embedding生成是分开的,使用了两组不同的权重。这一操作也就是文中提到的,考虑user节点和item节点的内在差异。 这里对于初始embedding的生成可以深入探讨一下。比如,若没有拿到user和item的特征,使用one-hot作为编码是否可行?根据LightGCN的实验,是否可以将非线性激活和线性特征转换去除?还是说可以用LightGCN做出来的第一层embedding作为Multi-GCCF的初始embedding,能否有效?有兴趣的小伙伴可以相互交流一下~ 不了解LightGCN的小伙伴可以看一下: LightGCN不相信非线性激活与特征转换。 2.2 Multi-Graph Encoding构建user-user网络与item-item网络的目的是为了缓解user-item二分网络的信息不充足,其原因在于大多数用户对应的item数量是有限的,数据会比较稀疏,所以通过构建这两个网络来补充信息。 具体的user-user网络与item-item网络的构建方式为:计算rating/click矩阵行或列的余弦相似性,并根据相似性建立节点之间的连边,其中,相似性阈值的确定是要使得网络的平均度为10。 有了网络之后,节点的embedding生成规则如下: 得到了MGE层的输出后,将其与Bipar-GCN层的embedding拼接。 2.3 Skip-connection由于节点的初始特征在经过多层非线性激活和特征转换之后,其在embedding中的信息有所流失,作者为了在节点表示中保留节点的初始特征,利用一个全连接层对节点初始特征进行转化得到了一个制定维度的embedding与Bipar-GCN层和MGE层的embedding进行连接。 2.4 关于如何拼接如前面提到的,Multi-GCCF会生成三种类型的embedding:
那么如何将这三种embedding进行拼接呢?文章中的作者尝试了element-wise sum、concatenation以及Attention,具体如下: 2.5 损失函数Multi-GCCF所用的损失函数为BPR损失,基本思想是最大化正样本和负样本之间的差距,即用户会购买的商品与用户不会购买的商品之间的概率差距越大越好,具体公式如下: 3 效果如何首先是和baseline对比了一下Recall和NDCG,见下表 由表可知,几乎在所有数据集中,Multi-GCCF的性能都是最好的。 然后测试了Multi-GCCF个组件的贡献,结果如下: 由上表可以看出,三个组成部分都是可以带来性能增益的。 最后,测试了上文提到的不同的embedding拼接方式带来的性能: 4 总结Multi-GCCF给我个人带来的启发有以下几点:
参考资料 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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 5:52:56- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |