【Graphormer阅读笔记、实验与刷榜】《Do Transformers Really Perform Bad for Graph Representation?》

Graphormer阅读笔记 —— Huixuan Chi (AML@ByteDance)

Graphormer主要策略

在这里插入图片描述

1. Transformer结构

主要有Transformer layer组成,每一层包括MHA(多头自注意)和FFN(前馈)模块,并增加了LN。
h ′ ( l ) = MHA ( LN ( h ( l − 1 ) ) ) + h ( l − 1 ) h ( l ) = FFN ( LN ( h ′ ( l ) ) ) + h ′ ( l ) h^{'(l)} = \text{MHA}(\text{LN}(h^{(l-1)})) + h^{(l-1)}\\ h^{(l)} = \text{FFN}(\text{LN}(h^{'(l)})) + h^{'(l)} h(l)=MHA(LN(h(l1)))+h(l1)h(l)=FFN(LN(h(l)))+h(l)
Graphormer主要是在MHA模块内进行了改动,Transformer原始的self-attention如下:
Q = H W Q , K = H W K , V = H W V , A = Q K ⊤ d K , a t t n ( H ) = s o f t m a x ( A ) V , Q = HW_Q,\quad K = HW_K,\quad V = HW_V,\\ A = \frac{QK^\top}{\sqrt{d_K}}, \quad attn(H) = softmax(A)V, Q=HWQ,K=HWK,V=HWV,A=dK QK,attn(H)=softmax(A)V,
原始的 H ∈ R n × d H \in R^{n \times d} HRn×d​,最后算出来的 a t t n ( H ) ∈ R n × d attn(H)\in R^{n \times d} attn(H)Rn×d​​。

缺点,Transformer是全局视野,不能有效的使用图的结构信息。

2、图结构信息编码

2.1 degree centrality

在输入层中,将节点特征x和由入读和出度索引的可学习的embedding相加。
h i ( 0 ) = x i + z deg − ( v i ) − + z deg + ( v i ) + , h_i^{(0)} = x_i + z^-_{\text{deg}^{-}(v_i)} + z^+_{\text{deg}^{+}(v_i)}, hi(0)=xi+zdeg(vi)+zdeg+(vi)+,

# init
self.in_degree_encoder = nn.Embedding(512, hidden_dim, padding_idx=0)
self.out_degree_encoder = nn.Embedding(512, hidden_dim, padding_idx=0)
# degree encoder
# in_degree, out_degree = batched_data.in_degree, batched_data.in_degree
node_feature = node_feature + self.in_degree_encoder(in_degree) + self.out_degree_encoder(out_degree)  

所有节点的度embedding是共享的,由度的数值进行索引。

2.2 spatial encoding

self-attention模块内,公式里面A可以视为节点相互之间的边权重(相似程度)。元素值 A i j A_{ij} Aij代表节点i到节点j之间的边权重。
A i j = ( h i W Q ) ( h j W K ) T d + b ϕ ( v i , v j ) , A_{ij}=\frac{(h_iW_{Q})(h_jW_{K})^T}{\sqrt{d}} + b_{\phi(v_i,v_j)}, Aij=d (hiWQ)(hjWK)T+bϕ(vi,vj),
Spatial encoding是 b ϕ ( v i , v j ) b_{\phi(v_i,v_j)} bϕ(vi,vj),它作为bias加到原始值上面。 ϕ ( v i , v j ) \phi(v_i,v_j) ϕ(vi,vj)表示节点i到节点j之间的最短路径(SPD), b ϕ ( v i , v j ) b_{\phi(v_i,v_j)} bϕ(vi,vj)​有所有层共享,由SPD索引,输出一个可学习的标量。这样做的优点是可以自适应的和不同距离的节点进行消息传递。

多源最短路径使用Floyd算法求解,得到shortest_path矩阵。

2.3 edge encoding

对edge feature进行编码,
A i j = ( h i W Q ) ( h j W K ) T d + b ϕ ( v i , v j ) + c i j ,  where  c i j = 1 N ∑ n = 1 N x e n ( w n E ) T , A_{ij}=\frac{(h_iW_{Q})(h_jW_{K})^T}{\sqrt{d}} + b_{\phi(v_i,v_j)} + c_{ij},\ \text{where}\ c_{ij}=\frac{1}{N}\sum_{n=1}^{N} x_{e_n}(w^{E}_{n})^T, Aij=d (hiWQ)(hjWK)T+bϕ(vi,vj)+cij, where cij=N1n=1Nxen(wnE)T,
编码信息 c i j c_{ij} cij(标量)​的计算,取节点i到节点j的最短路径SPD上所有(edge feature ⊙ \odot ​ 可学习的embedding)的平均值,可学习的embedding由序号n来索引。

3. 图分类Tricks

3.1 Virtual Node (VN)

新增一个虚拟节点和所有节点相连,最终图表示的结果就是虚拟节点的嵌入表示。

3.2 FLAG

对抗性数据增强方法(Adversarial Train)。

实验

主要在化学分子图数据集中进行。

  • PCQM4M-LSC
  • OGBG-MolPCBA
  • OGBG-MolHIV

Graphormer消融实验

1. OGB-LSC(PCQM4M-LSC)

200个epoch,OGB-LSC的test没有对外公布,只有valid数据。

Degree EncodingSpatial EncodingEdge EncodingValid MAE
----0.1298
----0.1279
----0.1361
0.1294
Adj.Adj.0.1297
----Adj.Adj.0.1307

SPD换成Adj.好像差的不是很大。去掉Spatial Encoding效果居然还要好一点?
官方给出的LSC上的简化版(为节省计算资源)Graphormer消融实验结果。
在这里插入图片描述

2. OGBG-Molhiv

  • 在OGB-LSC上进行预训练,保存checkpoints (seed=1, ../../checkpoints/epoch=200-step=298886.ckpt
    • 预训练模型包含3种encoder
    • 为节省时间和磁盘空间,每个run跑200个epoch,(实际应该跑300个),和原文结果有一些偏差
    • Tesla V100 * 8
  • 在OGBG-Molhiv上进行fine-tuning (seed=1)
    • 对3种encoder进行消融实验
    • 5个epoch进行微调
    • Tesla V100 * 1

2.1. Version 1 (在LSC上正常预训练,实际上是不对的)

Degree EncodingSpatial EncodingEdge EncodingValid AUC (%)Test AUC (%)
------------78.4967.43
--------72.3963.40
--------61.6236.88
--------78.1177.31
----76.5675.53
----76.4978.35
----46.0130.12
79.7079.68
Adj.Adj.79.7877.14

一个有趣的现象,有Spatial Encoding、无Edge Encoding,效果要比什么都不加差。

用Adj替换SPD矩阵,test auc下降不是很多,但是减少了Floyd( O ( N 3 ) O(N^3) O(N3))的计算量。从消融实验中可以发现,基于SPD的edge encoding与spatial encoding配合使用是比较有用的,单独使用degree encoding是比较有效的。edge encoding对于auc的提升影响是很大的。

2.2. Version 2 (预训练时就进行消融)

Degree EncodingSpatial EncodingEdge EncodingValid AUC (%)Test AUC (%)
----
----78.1977.80
----83.9774.89
79.7079.68
Adj.Adj.
----Adj.Adj.

2.3. GCN/GIN + Degree Encoding

ModelTest ROC-AUCValid ROC-AUC
GCN+Vn+FLAG76.8381.76
GCN+VN+FLAG+DE71.2881.83
GIN+Vn+FLAG77.4884.38
GIN+VN+FLAG+DE76.2982.24

加上Degree Encoding (DE),Test auc震荡的很厉害,并且表现也并不好。

2.4. Graphormer + FPs

ModelTest ROC-AUCValid ROC-AUCParametersHardware
Graphormer (without pre-train)72.6072.9447085378Tesla V100 (32GB)
Graphormer80.51 ± 0.5383.10 ± 0.8947183040Tesla V100 (16GB)
Graphormer + FPs82.25 ± 0.0183.96 ± 0.0147085378Tesla V100 (32GB)

OGB冲榜

test auc提升2%左右,榜三(但标准差更小),前三名差距比较小。

在这里插入图片描述

3. MLP+C&S复现和OGB冲榜

代码:https://github.com/ytchx1999/PyG-ogbn-products/tree/main/spectral%2Bmlp%2Bcs
论文:https://arxiv.org/abs/2010.13993
排行榜:https://ogb.stanford.edu/docs/leader_nodeprop/#ogbn-products

在这里插入图片描述

  • 9
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值