Re2:读论文 CS-GNN Measuring and Improving the Use of Graph Information in Graph Neural Networks

article/2025/6/17 14:39:00

诸神缄默不语-个人CSDN博文目录

论文下载地址:https://openreview.net/attachment?id=rkeIIkHKvS&name=original_pdf

代码:yifan-h/CS-GNN: Measuring and Improving the Use of Graph Information in Graph Neural Networks

论文引用方式:Hou, Y.; Zhang, J.; Cheng, J.; Ma, K.; Ma, R. T.; Chen, H.; and Yang, M.-C. 2020. Measuring and Improving the Use of Graph Information in Graph Neural Networks. In ICLR

文章目录

  • 1. 模型构造思路
  • 2. Notation和模型介绍
    • 2.1 Notation
    • 2.2 通用MP系GNN框架
    • 2.3 context+surrounding框架
    • 2.4 smoothness metrics
      • 2.4.1 feature smoothness
      • 2.4.2 label smoothness
    • 2.5 CS-GNN
      • 2.5.1 side information
      • 2.5.2 和其他GNN模型的对比
  • 3. 详细的数学推导和证明
  • 4. 实验结果
    • 4.1 baseline
    • 4.2 数据集
    • 4.3 实验设置
    • 4.4 实验结果
      • 4.4.1 模型指标结果
      • 4.4.2 GNN模型相比非GNN模型的优势性
      • 4.4.3 调整smoothness查看对模型结果的影响
  • 5. 代码实现和复现
    • 5.1 论文官方实现
    • 5.2 PyG官方实现
    • 5.3 我自己写的复现
  • 6. 参考资料

1. 模型构造思路

本文将一个节点能从MP系GNN获得的信息分为来自context(节点自身的信息)和来自surrounding(节点的图拓扑信息,通过其2跳邻居的aggregation得到),并提出了两种smoothness metrics(feature smoothness和label smoothness)来分析不同的图数据上邻居信息的quantity和quanlity(或者说,给节点加上邻居信息,对节点能产生多少正面的信息增益,也就能更好地完成节点表示、节点分类等任务),最后提出CS-GNN模型。
CS-GNN模型是一种使用attention进行加权求和的MP系GNN,利用了两种smoothness metrics来增强模型的表现能力。

这篇论文我就看了个思路,他的原理我就听了个热闹。

我觉得它好就好在它的模型具体运行情况考虑到了数据集的特性。因为我最近的活就是在扒拉一堆数据集,我扒拉出来的经验就是模型在数据集的魔改面前脆弱不堪。所以我觉得跑模型就是要看数据集的特性呢,要不然跑出来的baseline没有一个能过方差检验的不就很扯淡。

我觉得这个结合思路很好,但是怎么结合的我实在是没看懂。而且我总觉得他data leakage了。(见2.4.2部分)

2. Notation和模型介绍

2.1 Notation

context  c v surrounding  s v E 边 集 合 d 节 点 特 征 维 度 I indicator function A 激 活 函 数 \begin{aligned} \text{context}\ &c_v \\ \text{surrounding}\ &s_v \\ \Epsilon\ &边集合 \\ d\ &节点特征维度 \\ \mathbb{I}\ &\text{indicator function} \\ \textit{A}\ &激活函数 \end{aligned} context surrounding E d I A cvsvindicator function
未完待续。

2.2 通用MP系GNN框架

在这里插入图片描述
简单来说就是aggregate+combine结构,先聚合邻居,然后将邻居的聚合向量与中心节点的表示向量结合起来。对这种结构的理解、对文中所提及模型的理解可参考我之前撰写过的cs224w课程笔记系列:cs224w(图机器学习)2021冬季课程学习笔记集合_诸神缄默不语的博客-CSDN博客

2.3 context+surrounding框架

context c v c_v cv:节点 v v v 自身的信息(用节点特征来初始化)
surrounding s v s_v sv:节点 v v v 的邻居节点aggregate后得到的信息(向量)
对2.2中aggregate+combine结构的GNN通用框架,可以用这种体系重写成:
在这里插入图片描述
context向量由true signal( c ˘ \breve{c} c˘)和noise( n ˘ \breve{n} n˘)组成。

这个框架就是对aggregate+combine结构的重写,具体怎么映射成这样的未完待续。
通过我没有看懂的Theorem1,本文指出合适的aggregator(最好的就是mean,pooling方法则根本没有denoise效果)能使某一节点邻居输入中的noise比context的更小。

在这里插入图片描述

pooling没有降噪的作用,sum反而会放大噪声。

引用文字及图源:【AI TIME PhD ICLR】-度量和改进图信息在图神经网络中的使用-侯逸帆_哔哩哔哩_bilibili

2.4 smoothness metrics

衡量图中相邻节点某些指标(本文中是feature和label)之间的相似程度。越大说明越不相似。
可以用来衡量一个数据集适不适用于传统GNN(见实验4.4.1和实验4.4.2)。
我感觉这个指标有点像Assortativity同配性。
同配性的事我以后再研究。

数学原理背景:(这部分我不懂,我flag放在这里,我以后学)
KL散度(或信息增益)

一般是用来衡量两个分布的差异性,这里给出的是另一种定义
注意KL散度是不对称的
本文用以衡量S对C的信息增益(其相似度)

在这里插入图片描述
图源:kl散度度量分布_ICLR 2020丨论“邻里关系”的学问:度量和改进图信息在图神经网络中的使用…_Maqiu467的博客-CSDN博客

本文提出了feature smoothness和label smoothness,前者衡量GNN过程中信息增益的quantity,后者衡量对应的quality。

2.4.1 feature smoothness

衡量图中相邻节点特征之间的相似程度。越大说明越不相似。
(Definition2,没有看懂)如果没有噪音,我们可以得到一个指标来衡量邻居特征信息能给予节点的information gain。但是这个ground truth是不可知的,因此我们可以使用 λ f \lambda_f λf 来估计它(Definition3)。
在这里插入图片描述
feature smoothness越大,就说明图中信息的频率越高,邻居节点的特征越不同,通过surrounding能提供给节点更多的信息。

那个公式,在实现的时候其实平方是在里面的。
就大略类似这样:

result=np.zeros(features.shape[1])
for i in range(features.shape[0]):z=np.zeros(features.shape[1])for j in range(features.shape[0]):if adj[i,j]==1 and i!=j:z+=(features[i]-features[j])*(features[i]-features[j])result+=z
result=np.sum(result)/(features.shape[1]*5429)
print(result)

(但是就是作者自己也说一般因为图太大了所以也不会像这样用邻接矩阵,而会用edge list。但是这个代码是读者问的,而且给的还挺清晰的,所以我觉得很有借鉴意义,我就扒拉出来了)
来源:sorry to bother again。。 · Issue #3 · yifan-h/CS-GNN

数学证明没看懂。总之也列一下我看的讲解内容。
C和S上的KL散度:
在这里插入图片描述

这个是定义在连续数据上的。现实图数据可以看作是真实连续图数据上的采样点。

引用自kl散度度量分布_ICLR 2020丨论“邻里关系”的学问:度量和改进图信息在图神经网络中的使用…_Maqiu467的博客-CSDN博客:

对图上所有节点,算出每个节点与邻居节点的距离之和的平方,然后对所有节点进行加和,取曼哈顿距离,最后除以特征维度和边的数目,得到特征平滑度。数学证明KL散度与特征平滑度成正比,即信息增益的大小与特征平滑度成正相关。
在这里插入图片描述

作者在GitHub的issue中说这个思路来源自graph signal processing,可以参考PyGSP。(some question about Feature smoothness · Issue #2 · yifan-h/CS-GNN)

这部分的视频讲解:
背景:
在这里插入图片描述
在这里插入图片描述

图信号处理后的平滑度
Lambda(傅里叶变换的频率)很小时,表示信号频率和很低,平滑程度很高。
Lambda很大时,表示信号频率很高,表现为很不平滑(平滑度很低)。

在这里插入图片描述

注意这里的KL散度是k=0时的定义,即还没有使用GNN网络时。因为我们的目的是评估图数据,而且定义应该适用于所有GNN模型(实际的aggregator是求均值)

以上视频指的是这个:【AI TIME PhD ICLR】-度量和改进图信息在图神经网络中的使用-侯逸帆_哔哩哔哩_bilibili

2.4.2 label smoothness

衡量图中相邻节点标签之间的相似程度(节点分类任务),即衡量信息增益的质量。越大说明越不相似。

定义 v i ≃ v j v_i\simeq v_j vivj if y v i = y v j y_{v_i}=y_{v_j} yvi=yvj
在这里插入图片描述
label smoothness越大,说明邻居节点之前标签差异越大,说明邻居信息对学习任务会具有越大的干扰,GNN效果越差。


数学原理:
参考视频【AI TIME PhD ICLR】-度量和改进图信息在图神经网络中的使用-侯逸帆_哔哩哔哩_bilibili 讲解,该公式基于标签平移假设:在这里插入图片描述
(然后这部分证明我没太看懂,就是说一个节点的邻居信息可以用indicator function来根据label smoothness进行重新表示,如果分类器的linearity很好(亦即数据线性可分),对标签聚合的方式就可以引起标签同样方式的改变,context就可以转化为y(文中给了这个参考文献:Hongyi Zhang, Moustapha Cisse, Yann N. Dauphin, and David Lopez-Paz. mixup: Beyond empirical risk minimization. In ICLR, 2018.)。从而根据这个重新表示的公式可知与原节点同标签的邻居节点可以使该节点的分类效果更好。)

(但这事真的需要证明吗?MP的假设就是基于同配性的,同配性低的图MP效果差这种事真的用证明吗?从WL test到label propagation,从GCN到APPNP,我们又aggregate又message transformation的不就是看中了图数据的homophily吗?要是没有这东西,节点之间的边存在的意义就跟假设不一样了,那还搞啥?但是感觉如果以后需要再证明这种不用证明的东西可以再过来研究研究这里在说什么以资借鉴(草,我想起那个数学笑话,在数学差的人眼中数学卷子上的证明题只有两种情况:这也用证?这也能证?))

实际计算:
在原论文中使用的数据集里只有BGP数据集有无标签节点,处理方法是去掉了无标签节点(也就是用有标签节点的node-induced subgraph)来算了它的label smoothness,以估算全图的label smoothness。

但问题在于我们划分数据集为train/val/test了,按理来说在训练前是不应该知道整张图上的label的,如果通过整张图来获得label smoothness信息然后借以训练模型,那不就data leakage了吗?整啥呢这是?
我看了一下GitHub,果然大家也有这种困惑,提出问题并得到了作者的回应:sorry to matter you again · Issue #4 · yifan-h/CS-GNN
大致来说,作者回应称feature smoothness是用全图做的,这在transductive任务里面很正常了;至于label smoothness,如果只用训练集数据来计算(就比如只用训练集节点的node-induced subgraph来算),其值就会严重取决于数据划分方法,尤其对半监督学习任务。当然在实际任务中可以只用训练集数据来估算label smoothness。作者对半监督学习任务的建议是用label propagation先搞出伪标签,然后在大点的subgraph上再估算label smoothness。
但是我看了一下代码,感觉作者就直接用全图数据算的。所以我觉得他data leakage了。

2.5 CS-GNN

有点像GAT,aggregator是用attention加权求和,然后concatenation。
k k k 层节点对 i , j i,j i,j 的attention是这么算的:
在这里插入图片描述
在这里插入图片描述
一共 2 ∣ E ∣ 2|\Epsilon| 2E 个attention coefficient:乘性注意力机制。
leveraged(这个词我见好几次了,到底是啥意思?进行过线性转换的意思吗?)representation vector p p p 与邻居节点context向量 q q q v v v 的context representation vector与邻居的leveraged representation vector之差)相点乘(类似cosine相似度),然后应用softmax归一化。

节点与邻居feature差别越大,说明聚合邻居能得到的information gain越多, q q q 就越大, a a a 就越大,即权重越大,反之亦然。

label smoothness用于截断一些邻居之间的信息传递:也就是把attention coefficient小于一个由label smoothness计算得到的比例的置0(相当于把边直接drop掉),label smoothness越大就drop掉越多的边以降噪。但是这个具体的值作者没说是怎么弄出来的。
feature smoothness用于决定隐藏层维度( p p p q q q 的维度),就信息增益越高就让它维度也更高。这个具体值是实证得出来的(按我的经验来说就是调参调出来的意思)。

使用加权求和的方式聚合邻居节点信息:
在这里插入图片描述
分类任务的话就最后再叠一层全连接层:
在这里插入图片描述


视频 【AI TIME PhD ICLR】-度量和改进图信息在图神经网络中的使用-侯逸帆_哔哩哔哩_bilibili 中给出了图示(0和1之间的attention):
在这里插入图片描述
这个 q q q 的计算方式在视频中的解释:
在这里插入图片描述

2.5.1 side information

这部分我没看懂啥意思,大致感觉就是side information就是在节点(context)或边(surrounding)上的特征。
作者参考了GraphWave(Donnat et al., 20181)的方法,每个节点选取一个K跳邻居的node-induced subgraph,用类GraphWave方法就可以得到每个节点的 t v i t_{v_i} tvi(local topology feature vector)。
t v i t_{v_i} tvi 不会在节点聚合过程中变化,所以就不用融合进representation vector。
在attention机制中 t v i t_{v_i} tvi 视作context information的一部分:
在这里插入图片描述
最后的全连接层:
在这里插入图片描述
GraphWave我放个以后要看的flag在这里。

2.5.2 和其他GNN模型的对比

(这里的additive啥意思,这部分除了不用再讲一遍的内容之外都没看懂,下一个)

3. 详细的数学推导和证明

等我学好信息论以后再回来补,下一个。

4. 实验结果

4.1 baseline

本文将baseline分成这样三类:
topology-based methods
featurebased methods
GNN methods

分别对应:

在这里插入图片描述

4.2 数据集

略,待补。

4.3 实验设置

大致来说在节点上的数据集划分是7-1-2(训练集比例好高啊),然后指标是F1-Micro。
其他略,待补。

4.4 实验结果

4.4.1 模型指标结果

在这里插入图片描述
在这里插入图片描述
那个LTF就是local topology feature。主要是用于与GAT对比smoothness指标的效果的(真的吗?我没搞懂,算了)。
其他略,待补。

4.4.2 GNN模型相比非GNN模型的优势性

在这里插入图片描述
注意PubMed是低feature smoothness,BGP是高label smoothness。就这里作者解释了一下为什么会这样,以及CS-GNN在这种数据集上的优势性。
具体略,待补。

4.4.3 调整smoothness查看对模型结果的影响

在这里插入图片描述
调整feature smoothness就是直接propagate特征向量,调整label smoothness就是随机drop一些把不同标签的节点连在一起的边。
用稠密且feature smoothness较大的Amazon数据集来完成这部分实验。
左图右边那几个就是GNN过拟合的后果了嘛。对左图中MLP数据一开始变好的解释是broadcast反而使之获得了跟GNN一样能获得邻居信息的能力。
右图的MLP过度坚挺了以至于显得很搞笑(〃‘▽’〃)

5. 代码实现和复现

5.1 论文官方实现

计算smoothness的代码:CS-GNN/smoothness.py at master · yifan-h/CS-GNN
我看这玩意算label smoothness就是拿所有数据算的,所以我觉得就是有数据泄漏问题。
其中实验4.4.3是用这个实现的:Why to feature_broadcast and label_broadcast? · Issue #7 · yifan-h/CS-GNN
这是我问的,具体解释略,以后再看。
(话说明明作者是说中文的为什么所有issue都是英文,连我都不好意思直接用中文写了)

具体代码没咋看懂,就浏览了一遍:
CS-GNN/utils.py at master · yifan-h/CS-GNN 加载数据的代码
CS-GNN/models.py at master · yifan-h/CS-GNN 模型
CS-GNN/train.py at master · yifan-h/CS-GNN 训练的主代码
CS-GNN/minibatch.py at master · yifan-h/CS-GNN 没看懂咋搞的
CS-GNN/encode.py at master · yifan-h/CS-GNN 应该就是那个用类似GraphWave方法算出来的拓扑向量,就是数据集里的feats_t.npy数据。

具体没看。DGL我也没用过,看不懂。有缘待补。

5.2 PyG官方实现

没有。(这个也不好实现吧,感觉很取决于数据集特征的)

5.3 我自己写的复现

没写。

6. 参考资料

  1. 讲解本论文的博文
    1. kl散度度量分布_ICLR 2020丨论“邻里关系”的学问:度量和改进图信息在图神经网络中的使用…_Maqiu467的博客-CSDN博客
    2. 图神经网络中的消息传递:度量和提升 - 知乎 这一篇简单提了一嘴里面的数学证明,但是因为我没怎么看所以……有缘再看吧。
    3. ICLR20|CUHK及NUS提出两个指标度量与提升图网络消息传递
  2. thesis.pdf 呃这一篇应该是作者的硕士毕业论文(2020年港中文CS专业),是PGE模型和CS-GNN模型。
  3. 作者的讲解视频:【AI TIME PhD ICLR】-度量和改进图信息在图神经网络中的使用-侯逸帆_哔哩哔哩_bilibili

  1. Claire Donnat, Marinka Zitnik, David Hallac, and Jure Leskovec. Learning structural node embeddings via diffusion wavelets. In SIGKDD, pp. 1320–1329, 2018.

    SNAP: Learning Structural Node Embeddings ↩︎


http://chatgpt.dhexx.cn/article/H8UsK08Q.shtml

相关文章

ctfshow re2

打开附件如下 勒索病毒我去上网查了一下,发现是通过加密数据,所以这个题可能和加密有关,除了勒索病毒还有一个enflag.txt打开如下 先不管这个 第一步查壳这个exe程序 无壳。 第二步用ida32位打开这个 shiftf12查看字符 有个充值成功&#xf…

CTFShow re2 (RC4

参考:CTFSHOW re2 本文:跟着大佬的博客一步一步做CTFShow re2的记录 IDA分析 有个比较函数 re一下 s "DH~mqqvqxB^||zllJq~jkwpmvez{" s1 for i in s:s1 chr(ord(i) ^ 0x1f) print(s1)得到 再四处看看 跟进sub_401028 四个sub点进去看看…

2023年天津市逆向re2.exe解析-比较难(超详细)

2023年天津市逆向re2.exe解析(较难) 1.拖进IDA里进行分析2.动态调试3.编写EXP脚本获取FLAG4.获得FLAG1.拖进IDA里进行分析 进入主程序查看伪代码 发现一个循环,根据行为初步判定为遍历输入的字符并对其ascii^7进行加密 初步判断sub_1400ab4ec为比较输入和flag的函数 跟进u…

RE2..

RE2 Simple and Effective Text Matching with Richer Alignment Features Simple and Effective Text Matching with Richer Alignment Features 论文提出了一种快速且高效的文本匹配模型,建议保留三个可用于序列间对齐的关键特征:原始点对齐特征、先前…

RE2正则表达式引擎资料

2019独角兽企业重金招聘Python工程师标准>>> 官网RE2,C正则表达式库实战《自动机理论 语言和计算导论》 转载于:https://my.oschina.net/letiantian/blog/280743

Go与Re2正则

Golang支持Re2正则标准(实际上并不支持全部,只是Re2语法的子集),本文介绍一些Golang正则支持语法的解释。 1、Regex Flags 1、贪婪和非贪婪: 正则匹配的时候一个个字符向后找。贪婪就是即使已经匹配了还会尝试向后找…

【文本匹配】之 RE2论文详解

RE2 - Simple and Effective Text Matching with Richer Alignment Features 这篇论文来自阿里,19年的ACL论文。《Simple and Effective Text Matching with Richer Alignment Features》:https://arxiv.org/abs/1908.00300 Intro 很多深层网络只拥有…

文本匹配、文本相似度模型之RE2

简单有效的文本匹配,具有更丰富的对齐功能 github: https://github.com/daiyizheng/shortTextMatch/blob/master/src/DL_model/classic_models/models/RE2.py 本文作者提出了一种快速、强神经网络的通用文本匹配方法。保持序列间对齐可用的三个关键特征:原始点方向…

RE2,C++正则表达式库实战

RE2简介 RE2是,一个高效、原则性的正则表达式库,由Rob Pike和Russ Cox两位来自google的大牛用C实现。他俩同时也是Go语言的主导者。Go语言中的regexp正则表达式包,也是RE2的Go实现。 RE2是,一个快速、安全,线程友好,PC…

DB9接口定义

注意上表是公头的引脚定义,公头与母头的引脚编号是轴对称的,因此将公头和母头连接时是相同序号的引脚相连接。 作为串口使用时要注意,公头的2号是RXD,因而母头的2号是TXD,公头的3号是TXD,因而母头的3号是RX…

LIN DB9定义

没找到合适的图片所以用上图代替,在LIN中,图中CAN_H(7)为LIN线, GND(3)接地. 实物图如下

DB9串口接口定义

公头 母头 定义不同 连线都是2 3 5 但是 公头 2是RXD 3是Txd 母头 2是TXD 3是RXD而且两者的排列顺序,画pcb时注意 以上是公头接线方法~ 母头原理图接线 交叉 但是上图的db9的原理图是母的画法啊,应该是直接从ad的库中调去的,ad的库中只有着一种画法 例子…

DB9定义图

DB9接口定义图

DB9接口定义 串口接口定义 MAX232电路

我们知道老式电脑主板上面都会有9针的串口,即使到了现在, 很多人还是用串口来通信,这是做嵌入式与工控的一上很好的上位要与下位机通信的方案, 因为他接口简单,编程容易。 我们来讲一下定义: 首先普通主…

计算机九针孔什么接口,db9接口-USBCAN-I设备的DB9针串口头中的针脚是如何定义的-电气资讯 - 电工屋...

db9接口定义RXD和TXD接线的颜色怎么接 1)使用串口直通线。 设计电路时,单片机的RXD连接电路板DB9的TXD,单片机的TXD连接电路板DB9的RXD,具体实现可在232电平转换芯片处反接。 (2)使用串口交叉线。 设计电路时,因为串口线已做交叉&…

RS-232C接口定义(DB9)

RS-232C接口定义(DB9)引脚 定义 符号 1 载波检测 DCD(Data Carrier Detect) 2 接收数据 RXD(Received Data) 3 发送数据 TXD(Transmit Data) 4 数据终端准备好 DTR(Data Terminal Rea…

DB9 ------ 接口定义

下图是母座和公座的接口定义: 特别提醒:以上是公座和母座的接口定义,如果是串口线,RXD就变成TXD,以此类推。 转载于:https://www.cnblogs.com/god-of-death/p/9368120.html