Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

the public share nodes #22

Open
ltm920716 opened this issue Nov 13, 2019 · 12 comments
Open

the public share nodes #22

ltm920716 opened this issue Nov 13, 2019 · 12 comments

Comments

@ltm920716
Copy link

你好,文中提到了有些节点有可能是几个图共有的,请问当前的情况,这种共有节点的两个子图之间是不是只有包含关系,按照论文算法流程并不存在交叉的关系,对么,谢谢

@yl-1993
Copy link
Owner

yl-1993 commented Nov 18, 2019

@ltm920716 不只有“包含关系”,还有“存在交集但不包含”。当用iterative的方式生成proposal时,是包含关系;当取不同阈值或者取不同knn来生成proposal时,大部分是“存在交集但不包含”的子图。

@ltm920716
Copy link
Author

@ltm920716 不只有“包含关系”,还有“存在交集但不包含”。当用iterative的方式生成proposal时,是包含关系;当取不同阈值或者取不同knn来生成proposal时,大部分是“存在交集但不包含”的子图。

@yl-1993 你好,直观的理解,用0.6的阈值切分的子图是不是只是包含用0.7阈值切分的子图,考虑到阈值不断增加的过程,应该还是包含关系,是我这么考虑的不太正确么,是否有比较好的方式来验证呢,还有这个不同knn是指取相同阈值,用不同的knn算法去提取邻接矩阵?这个每次不是要统一的么,理解的不是很透彻,麻烦指点,谢谢

@yl-1993
Copy link
Owner

yl-1993 commented Nov 18, 2019

@ltm920716 关于提到的三个问题:

  • 这是一个动态阈值的切分,流程简单来说是这样的:取一个边权的基础阈值,切分成多个联通域,如果联通域超过了size的阈值,则增大边权的阈值,直到所有联通域都满足size的阈值。所以0.6的阈值不一定所有proposal都包含0.7的proposal。
  • 验证方式很简单,可以对算法跑出来的proposal计算一下包含的关系
  • 不同的knn指的是用同样的knn算法,但取不同数目的k

@ltm920716
Copy link
Author

@ltm920716 关于提到的三个问题:

  • 这是一个动态阈值的切分,流程简单来说是这样的:取一个边权的基础阈值,切分成多个联通域,如果联通域超过了size的阈值,则增大边权的阈值,直到所有联通域都满足size的阈值。所以0.6的阈值不一定所有proposal都包含0.7的proposal。
  • 验证方式很简单,可以对算法跑出来的proposal计算一下包含的关系
  • 不同的knn指的是用同样的knn算法,但取不同数目的k

@yl-1993 好的,感谢回复,我先验证一下看看结果,谢谢

@ltm920716
Copy link
Author

@ltm920716 关于提到的三个问题:

  • 这是一个动态阈值的切分,流程简单来说是这样的:取一个边权的基础阈值,切分成多个联通域,如果联通域超过了size的阈值,则增大边权的阈值,直到所有联通域都满足size的阈值。所以0.6的阈值不一定所有proposal都包含0.7的proposal。
  • 验证方式很简单,可以对算法跑出来的proposal计算一下包含的关系
  • 不同的knn指的是用同样的knn算法,但取不同数目的k

@yl-1993 你好,根据提示,进行了简单的测试,利用提供的 patr1_test 数据集,k=80,生成两个阈值0.7和0.75的proposals,查看两个阈值下有没有重叠部分,简单代码如下
image

结果如下
image

通过这两个同k值不同阈值的proposal对比,并没有出现你说的 大部分是“存在交集但不包含”的子图 这个情况,而且是一个都没有,个人分析,不同阈值和不同的k值其实表示的意义差不多,即使是不同的k值,在做连通域的时候,如果是相近的依然会连在一起,即使是阈值动态增加,这里没有对不同k值的proposal进行重叠验证,个人分析,只有经历 gcn-s 这个过程,才有可能出现 交叉的情况,不知道我分析的对不对

另外,我想用自己数据重新训练模型,请问一下关于训练部分,论文里用的 proposal 是0.6,0.65,0.7,0.75结合不同k值,得到8个组合么,是否进行了proposal的迭代呢,感谢

@yl-1993
Copy link
Owner

yl-1993 commented Nov 22, 2019

@ltm920716 谢谢尝试。抱歉之前回复草率,在此做一下更正:

  • 当用iterative的方式生成proposal时,或者相同k取不同阈值时是包含关系;当取不同的K来生成proposal时,存在“交集但不包含”的子图。(当K发生变化时,graph的结构发生了变化,因此会出现“交集不包含”的proposals。例如可以尝试k=80,th=0.7和k=30,th=0.7这两种proposals,我用程序验证了一下,其中存在“交集但不包含“的proposal。)
  • 上面提到的“包含”或者“交集不包含”关系都是针对节点而言,如果将“包含”定义为“点和边都是子集”,取不同的K时,满足包含关系的proposal就会少很多。
  • 在论文中的ablation的第一部分,分析了不同proposal数量,iteration次数和性能的关系,一般来说越多的proposal会得到越好的训练结果,当proposal的增多已经无法增加训练的性能,就可以加入proposal的迭代。如果想自己训练模型,建议可以先尝试少量的proposal策略看是否有提升,再按需增加计算量来获取更好的精度。

对上述第一点中阈值变化的情况,可以有个简短的证明:考虑两个阈值th_1和th_2下有交集的proposal_1和proposal_2,不失一般性,假设th_1 > th_2,
(1) 由定义可知,proposal_1的所有边阈值大于th_1,proposal_2的所有边大于th_2;
(2) 由(1)可知,proposal_1中所有边都满足proposal_2的条件;
(3) 因为th_1 > th_2,说明|proposal_1| <= |proposal_2|;
(4) 因为proposal_2满足大小的限制,因此proposal_1也满足大小的限制。

综合前面四点,可知proposal_1中的点和边是proposal_2的点和边的一个子集。

@ltm920716
Copy link
Author

ltm920716 commented Nov 22, 2019

@yl-1993 非常感谢你的回复,看到如此负责任的回复,能看出你对学术以及生活的严谨负责态度,相信以后的学术、生活、工作肯定会大有收获

最后还有一个小问题,还希望能帮助简单解答一下:
代码用用的 BCubed 评价指标, 源码中计算精度和召回公式的 n*n 这个分子理解不是很透彻(为什么是平方,计算占比么),能否简单讲解一下原理,或者有相关的文档介绍

正在考虑添加 GCN-S的部分,顺便想看一下整体代码结构,流程上很棒,但是mmcv这个框架的接口没有详细的参考文档,网上的api说明很草率,例如 runner 等,只能跳到源码里看,不是很方便,请问有相关接口的文档可以共享么,想学习一下

最后再次感谢,祝一切顺利

@ltm920716
Copy link
Author

ltm920716 commented Nov 22, 2019

@yl-1993
hello,刚刚仔细分析了一下你验证的关于交叉但不包含的情况 -- 《当K发生变化时,graph的结构发生了变化,因此会出现“交集不包含”的proposals。例如可以尝试k=80,th=0.7和k=30,th=0.7这两种proposals,我用程序验证了一下,其中存在“交集但不包含“的proposal》

-- 设定阈值,当k=30的时候,从一个点 q 出发,对其30个邻居中符合阈值的点迭代求解连通域,得到满足阈值的 proposal Q;

-- 设定阈值,当k=80的时候,从一个点 p 出发,对其80个邻居中符合当前阈值的点迭代求解连通域,得到满足阈值的 proposal P;

-- 如果 Q 和 P 中有交点 I,那么不管 P 和 Q 的阈值如何,I 点作为交点联通其大于等于阈值的邻居,那 P 和 Q 当前的情况总是包含关系(即如果 P和Q阈值相同,那么只要有一个交点,那么两侧的阈值都是满足的;如果P和Q设置阈值不同,那么从交点出发,阈值小的总向包含阈值大的部分延申)

-- 现在我们考虑 P(假设 P 中节点数大于 Q)在生成超顶点的时候由于当前proposal内顶点数量大于设置最大数量限制,然后增加阈值导致裂解生成子图中某个 P’‘ 是否会与 Q 有交叉。P 与 Q 中共有顶点 I 为其两部分阈值限制的边界,即 I 与 P 中的连接点阈值满足 P 阈值要求但不满足 Q 中点连接阈值要求,裂解的时候对于 P ,其裂解的部分与 Q 有交集的部分任然属于 Q

以上是我考虑的所有情况,可能有漏的,还麻烦有时间帮忙分析一下,如果可以的话可以分析一下你验证得到的情况发生的原理,感谢

@yl-1993
Copy link
Owner

yl-1993 commented Nov 25, 2019

@ltm920716 谢谢回复。

@ltm920716
Copy link
Author

@ltm920716 谢谢回复。

收到,感谢回复,我仔细研究一下这两篇论文

如果有机会,还麻烦帮忙分析一下之前的问题,再次感谢
image

@yl-1993
Copy link
Owner

yl-1993 commented Nov 25, 2019

@ltm920716 谢谢细致的分析。
不妨考虑如下这种情况:有5个节点,sim(A, B)=0.9, sim(A, C)=0.7, sim(B, D)=0.8, sim(D, E)=0.9,除此之外,两两之间相似度为0。

  • 当K=1, th=0.7, step=0.05, max_size=4时,存在两个连通域: P1 = {A, B, C}, P2 = {D, E}。此时每个节点只和自己最近的节点相连,自然形成两个连通域,所有边都大于等于阈值。
  • 当K=2, th=0.7, step=0.05, max_size=4时,存在两个连通域: P3 = {A, B, D, E}, P4 = {C}。此时因为K=2,5个节点都连接在一起,但是超出了max_size的限制,所以会将阈值提高为th=0.75,断开A和C之间的连接,形成这两个满足要求的proposal。
  • P1和P3属于交叉但不包含的情形。

@ltm920716
Copy link
Author

@yl-1993
感谢耐心回复,确实是由于 K 值的关系可以出现交叉不包含的情况,是我考虑的不够细致

再次感谢对我所有问题的耐心细致回复,祝一切顺利 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants