ICT-GIMLab / SeHGNN

94 stars 16 forks source link

关于实验部分对HGB邻居注意力的讨论 #12

Closed OnlineWaAndRe closed 10 months ago

OnlineWaAndRe commented 10 months ago

您好,请问您在做HGB(去除邻居注意力)的实验中,是将目标节点的一阶邻居的注意全都平均成一个固定的值吗?还是说,先将邻居分成不同的类型,然后每个类型的注意力都一样,不同类型注意力不一样? image 比如说,在这个例子中,S类型的注意力设置成a, A类型的注意力设置成b,还是说不管类型,全部设置成一个固定的注意力值c? (P不是 P的一阶邻居 )

Yangxc13 commented 10 months ago

后者(将邻居分成不同的类型,然后每个类型的注意力都一样)

As mentioned in the Motivation section, "we can average them (attention values) within each relation which equals removing neighbor attention".

OnlineWaAndRe commented 10 months ago

那我还是有些疑惑,第一种是不分类型对邻居做gat,第二种是分类型对邻居做gat。这两种效果一样吗?单纯的考虑这两种邻居注意力,第二种邻居注意力能说明第一种邻居注意力也不需要吗?

Yangxc13 commented 10 months ago

不好意思,没有搞明白您的意思,可以进一步说明一下吗?

在初始题干中提到了两种方法:

在追问中,貌似提及了两种完全不同的方法:

从我的理解看来,上面总共提及了4种不同的方法。追问中的两种方法和初始题干的两种方法完全不同。所以暂时没有理解最后的问题具体是指哪方面?

OnlineWaAndRe commented 10 months ago

不好意思,是我没有表达清楚。那现在重新梳理一下,在您的论文中不是说分类型对结点做gat,然后发现同类型结点的注意力分数都相差无几; 这种不是分类对邻居做gat吗?每种类型做一次也就是HGB的方法(方法一)。(方法二)将整个图看成同质图, 不考虑类型,对目标结点的 邻居做gat。您已经说了方法一分类型gat邻居聚合类似分类型平均,然后得出邻居注意力不是必须的只需要平均就好了。那么 我想问第一种方法能说明第二种方法也无用吗?

 

------------------ 原始邮件 ------------------ 发件人: "ICT-GIMLab/SeHGNN" @.>; 发送时间: 2023年11月14日(星期二) 下午3:17 @.>; @.**@.>; 主题: Re: [ICT-GIMLab/SeHGNN] 关于实验部分对HGB邻居注意力的讨论 (Issue #12)

不好意思,没有搞明白您的意思,可以进一步说明一下吗?

在初始题干中提到了两种方法:

将目标节点的一阶邻居的注意全都平均成一个固定的值 -- 相当于mean aggreagtion,GraphSage

将邻居分成不同的类型,然后每个类型的注意力都一样,不同类型注意力不一样

在追问中,貌似提及了两种完全不同的方法:

第一种是不分类型对邻居做gat -- 相当于 GAT,或者说是 HGB 论文中的方法

第二种是分类型对邻居做gat -- 相当于 relational-GAT

从我的理解看来,上面总共提及了4种不同的方法。追问中的两种方法和初始题干的两种方法完全不同。所以暂时没有理解最后的问题具体是指哪方面?

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>

Yangxc13 commented 10 months ago

不好意思,感觉还是没有完全理解您的意思。要不我先阐述一下当时的论文撰写思路,您可以将我的思路和您的想法对照一下。

论文在两个部分提及了关于注意力的实验。

首先是Motivation章节,这里我们把注意力分成了两种,一种是每种边类型/元路径类型内部的注意力(neighbor attention within neighbors of the same relation),反映的是同种类型的邻居之间,哪些邻居更重要;另一种是不同边类型/元路径类型之间的注意力(semantic attention among different relations),反映的是哪种边类型/元路径类型更重要。

在HAN中(作为metapath-based methods的代表),这两种注意力的计算是分离的,所以比较容易移除任一注意力的影响。但在HGB中(作为metapath-free methods的代表),因为不同类型的一阶邻居的注意力是同时算出的,所以我们采用了一些手段,以达到类似的效果。对每个目标节点,如果我们对于每种类型,把该类型内部的一阶邻居的注意力平均化,相当于同种类型的邻居注意力相同,可等价于移除neighbor attention;如果我们对于每种类型,把该类型内部的一阶邻居的注意力进行normalization操作,也就是让它们的和为1,相当于每种类型总的注意力和都相同是1,可等价于移除semantic attention。

在Appendix章节,也就是题干中图的来源,主要是起一个彩蛋作用,介绍正文中实验想法的来源。首先回顾了HGB提出的方法的公式,是把edge embedding也纳入到了gat的注意力的计算中。我们复现HGB中实验时发现,HGB中已经出现了“每个类型内部的注意力类似,不同类型注意力差距较大”类似的现象(论文中图4)。这是因为在一个训练好的HGB模型中,edge embedding几乎总会dominate注意力的生成。换句话说,src node embedding和tgt node embedding对gat的注意力的影响极小,最后基本是边类型决定了生成的注意力的值。

所以,尽管HGB中没有特殊的设计,但是很神奇,模型训练好后,总是会出现类似于移除neighbor attention的效果。这就是Motivation章节对比实验的来源。 在HGB中,我们额外加的“将每种类型内部的一阶邻居的注意力平均化”操作,其实只是将原来就已经非常相近的neighbor attention values,进一步保证它们完全相同罢了。 所以当时实验做之前就能预料到最终效果,也确实实验做出来后和我们的预期一致。

在这个实验的基础上,我们提出的SeHGNN就完全移除了neighbor attention计算模块。同时这个模块的移除,也使得neighbor aggregation可以从训练阶段提前到预处理阶段,neighbor aggregation的结果可以在不同的training epoch之间复用,从而实现训练的巨大加速。

希望以上介绍对您有用。如果有其他问题,请进一步追问。

OnlineWaAndRe commented 10 months ago

不好意思,我还是没明白您所说的意思。HGB我记得是将异质图根据不同的关系切片成同质图的。您论文中说,不同类型的邻居注意力不同,但是同类型的邻居注意力是差不多的,然后这跟元路径做平均p-s, p-a是差不多的。那我举个例子 image 在这个图中,目标节点的一阶邻居有三个A,2个S,照你的说那我们就没必要对目标节点P做gat了,是吗? image 还是说我们没必要对于p-s关系没必要做邻居注意力,类似的,对于p-a关系没必要做gat?

OnlineWaAndRe commented 10 months ago

不好意思,感觉还是没有完全理解您的意思。要不我先阐述一下当时的论文撰写思路,您可以将我的思路和您的想法对照一下。

论文在两个部分提及了关于注意力的实验。

首先是Motivation章节,这里我们把注意力分成了两种,一种是每种边类型/元路径类型内部的注意力(neighbor attention within neighbors of the same relation),反映的是同种类型的邻居之间,哪些邻居更重要;另一种是不同边类型/元路径类型之间的注意力(semantic attention among different relations),反映的是哪种边类型/元路径类型更重要。

在HAN中(作为metapath-based methods的代表),这两种注意力的计算是分离的,所以比较容易移除任一注意力的影响。但在HGB中(作为metapath-free methods的代表),因为不同类型的一阶邻居的注意力是同时算出的,所以我们采用了一些手段,以达到类似的效果。对每个目标节点,如果我们对于每种类型,把该类型内部的一阶邻居的注意力平均化,相当于同种类型的邻居注意力相同,可等价于移除neighbor attention;如果我们对于每种类型,把该类型内部的一阶邻居的注意力进行normalization操作,也就是让它们的和为1,相当于每种类型总的注意力和都相同是1,可等价于移除semantic attention。

在Appendix章节,也就是题干中图的来源,主要是起一个彩蛋作用,介绍正文中实验想法的来源。首先回顾了HGB提出的方法的公式,是把edge embedding也纳入到了gat的注意力的计算中。我们复现HGB中实验时发现,HGB中已经出现了“每个类型内部的注意力类似,不同类型注意力差距较大”类似的现象(论文中图4)。这是因为在一个训练好的HGB模型中,edge embedding几乎总会dominate注意力的生成。换句话说,src node embedding和tgt node embedding对gat的注意力的影响极小,最后基本是边类型决定了生成的注意力的值。

所以,尽管HGB中没有特殊的设计,但是很神奇,模型训练好后,总是会出现类似于移除neighbor attention的效果。这就是Motivation章节对比实验的来源。 在HGB中,我们额外加的“将每种类型内部的一阶邻居的注意力平均化”操作,其实只是将原来就已经非常相近的neighbor attention values,进一步保证它们完全相同罢了。 所以当时实验做之前就能预料到最终效果,也确实实验做出来后和我们的预期一致。

在这个实验的基础上,我们提出的SeHGNN就完全移除了neighbor attention计算模块。同时这个模块的移除,也使得neighbor aggregation可以从训练阶段提前到预处理阶段,neighbor aggregation的结果可以在不同的training epoch之间复用,从而实现训练的巨大加速。

希望以上介绍对您有用。如果有其他问题,请进一步追问。

作者您好,请问,你说的”我们复现HGB中实验时发现,HGB中已经出现了“每个类型内部的注意力类似,不同类型注意力差距较大”类似的现象(论文中图4)“ 这个是普遍现象 ,还是 说有一点是这样的?

Yangxc13 commented 10 months ago
  1. “HGB我记得是将异质图根据不同的关系切片成同质图的”

HGB没有切片成同质图的的步骤。HGB除了把edge-type embedding加入到了attention的计算,以及一些residual相关的trick之外,其余与GAT完全一样。

  1. “在这个图中,目标节点的一阶邻居有三个A,2个S,照你的说那我们就没必要对目标节点P做gat了,是吗?还是说我们没必要对于p-s关系没必要做邻居注意力,类似的,对于p-a关系没必要做gat?”

不必纠结于HGB,可能从metapath-based方法比如HAN出发,更容易理解。HAN会在切片出的不同元路径子图上分别做GAT,换句话说,每个元路径子图有独享的dgl.nn.pytorch.GATConv layer。把这些层改为mean aggregation或者GraphSage layer即可

  1. “你说的”我们复现HGB中实验时发现,HGB中已经出现了“每个类型内部的注意力类似,不同类型注意力差距较大”类似的现象(论文中图4)“ 这个是普遍现象 ,还是 说有一点是这样的?”

是普遍现象。可以做实验看一下。

OnlineWaAndRe commented 10 months ago
  1. “HGB我记得是将异质图根据不同的关系切片成同质图的”

HGB没有切片成同质图的的步骤。HGB除了把edge-type embedding加入到了attention的计算,以及一些residual相关的trick之外,其余与GAT完全一样。

  1. “在这个图中,目标节点的一阶邻居有三个A,2个S,照你的说那我们就没必要对目标节点P做gat了,是吗?还是说我们没必要对于p-s关系没必要做邻居注意力,类似的,对于p-a关系没必要做gat?”

不必纠结于HGB,可能从metapath-based方法比如HAN出发,更容易理解。HAN会在切片出的不同元路径子图上分别做GAT,换句话说,每个元路径子图有独享的dgl.nn.pytorch.GATConv layer。把这些层改为mean aggregation或者GraphSage layer即可

  1. “你说的”我们复现HGB中实验时发现,HGB中已经出现了“每个类型内部的注意力类似,不同类型注意力差距较大”类似的现象(论文中图4)“ 这个是普遍现象 ,还是 说有一点是这样的?”

是普遍现象。可以做实验看一下。

  1. “HGB我记得是将异质图根据不同的关系切片成同质图的” 不好意思,刚刚重看了代码发现,确实没有分片。
  2. 现在也就是说,对于目标节点来说不管是元路径的邻居还是普通的一阶直接相连的邻居,都不用做gat了是吗?
Yangxc13 commented 10 months ago

“现在也就是说,对于目标节点来说不管是元路径的邻居还是普通的一阶直接相连的邻居,都不用做gat了是吗?”

SeHGNN里面是没有gat的。只有预处理阶段的mean aggregation,和训练阶段的semantic fusion

OnlineWaAndRe commented 10 months ago

“现在也就是说,对于目标节点来说不管是元路径的邻居还是普通的一阶直接相连的邻居,都不用做gat了是吗?”

SeHGNN里面是没有gat的。只有预处理阶段的mean aggregation,和训练阶段的semantic fusion

好的,非常感谢,现在还有一个题外的问题。我想在一个数据集(如ACM)上分批次训练,但是我好像没有看到过那种使用工具库的实现代码(看的太少, dgl库里面的实现看的有点晕),所以想求助一下,希望您能分享一些批次训练的标准化代码。

Yangxc13 commented 10 months ago

你好。本仓库提供的代码本身就是mini-batch的训练形式,可以尝试修改运行时参数 --batch-size 的值(默认为10000)。

OnlineWaAndRe commented 10 months ago

好的 感谢