Graph Learning笔记 - 长尾分布问题
分享四篇论文入门图神经网络时的学习笔记。
SL-DSGCN
论文:Investigating and Mitigating Degree-Related Biases in Graph Convolutional Networks
来源:2020CIKM
概要
- GCN在图的半监督学习上能取得良好表现,但训练难度大
- 当标签数据有限,GCN在low-degree nodes的更新信息不足,预测表现不佳
- 提出SL-DSGCN(Self-Supervised-Learning Degree-Specific GCN),从模型和数据上减轻关于度的偏差
- 在数据集中验证了SL-DSGCN提高了自我训练GCN能力和低度节点的准确性。
分析问题
-
考虑如何捕捉不同层之间节点的复杂关系 / 如何为低度节点提供信息。
-
使用了 Cora, Citeseer, Pubmed, Reddit 四个数据集,通过可视化分析可以发现预测准确率随着节点度数的变化分布。
-
度数在数据集中并非独立同分布,而度数越大的点往往容易与带标签邻居相邻,可以频繁参与优化过程,这也是GCN在度数大的点性能好的原因之一。
实现过程
Degree-Specific GCN Layer
- SL-DSGCN的核心部分,用来捕捉不同度数节点的差异和相似性
- 传统GCN使用与相邻节点的加权平均来计算特征,该结构将节点的度考虑在内,使度不同的节点在传递消息和更新特征过程有所不同。(也许是特征拼接之后再进行图卷积操作)
- 该层参数由RNN生成,大概是因为度不同的节点通过同一个RNN可以获得不同的度的特征信息,从而在性质相似的点中,特征由度来决定。
Self-Supervised-Training with Bayesian Teacher Network
- Pre-training with the Annotator
teacher-student Network是用一个更宽更复杂,但已经训练好的神经网络(teacher)去训练另一个窄而深的网络(studen)。这篇论文就是使用这种方法生成软标签和不确定分数。
论文里提出带Bayesian teacher network的子监督训练,大概步骤:(1)使用图注释器为未标记的节点生成伪标签。
(2)使用生成的伪标签作为额外的监督,在有标签和无标签的数据上训练学生网络。
(3)使用训练好的学生网络,对图中的所有节点进行预测。
(4)在学生网络产生的预测上训练贝叶斯教师网络。
(5)使用训练好的贝叶斯教师网络来完善由图注释器生成的伪标签。
(6)重复步骤2-5,直到收敛。
- Fine-tuning Student with Uncertainty Scores
训练好的Bayesian teacher network可以计算每个节点的不确定分数,这东西可以给损失函数加权优化收敛,这样可以更好地利用未标记数据来训练。
Training Algorithm
一些思考
- RNN部分应该可以用更优秀的结构来代替了?比方说LSTM和Transformer啥的。
- 在稠密图的表现如何?感觉准度应该差不了多少但是计算会比较慢吧,所以感觉应该要先判断图的性质再考虑是否进入SL-DSGCN结构。
Meta-tail2vec
论文:Towards Locality-Aware Meta-Learning of Tail Node Embeddings on Networks
来源:2020CIKM
GitHub - smufang/meta-tail2vec: Implementation of meta-tail2vec published in CIKM 2020 paper “Towards Locality-Aware Meta-Learning of Tail Node Embeddings on Networks”.
摘要
-
提出meta-tail2vec 方法来优化尾部节点嵌入问题
- 对于尾部节点的嵌入问题,采用重建的回归模型来计算。
- 对于网络的局部感知位置问题,提出删边和元学习的方法局部调整
-
在公共数据集中进行大量实验,验证了meta-tail2vec的性能提升
背景
- network embedding
- GNN
分析问题
- 对于没有 丰富结构链接/低度数 的节点,嵌入性能较差
- 一节点的度在网络中变化很大,不是独立同分布
- 某些网络的节点度的特点为长尾分布,即相当一部分节点处于尾部且度数非常低
- 如何在有限的结构信息中学习有效的尾部节点的嵌入向量??
问题的难点
- 尾部节点提供的信息非常少
- 嵌入时需要考虑每个节点的结构位置,在于无法适应每个节点(链接很少的尾部节点),否则会过拟合。
方法
-
对于尾部节点信息稀缺的问题,考虑利用头部节点的嵌入(Oracle embeddings)来训练回归模型并且通过自监督学习重建(视为一个few-shot问题)。利用该模型,可以预测尾部节点的嵌入使其逼近Oracle embeddings。同时,通过删边操作模拟尾部节点的有限信息。
- 在邻居随机选k个(支持集合)断掉,那样尾部节点嵌入学习就可以变成一个few-shot
- 使支持集合来更新先验知识,再用查询节点更新回归模型
- 回归模型可以用来预测尾部节点的嵌入向量,由嵌入器和回归其组成
- 嵌入器将每个节点降维,回归器则将嵌入向量映射到目标值。
-
针对每个节点结构位置问题,采用元学习范式,采用模型无关的MAML(Model-Agnostic Meta-Learning)元学习框架。
- 通过在多个任务上进行梯度下降来学习通用初始化参数,使这些参数快速适应新任务
- 更新后的参数在查询集上预测从而得到嵌入向量。
-
实验是在3个公共数据集上做节点分类和链路预测任务
一些思考
- 这篇论文陌生用的方法好像有点多,有点看不过来,像文中提到的SDNE、ARGA、DDGCN等一系列嵌入方法都没来得及细究,不过大致就是元尾部嵌入要比这些都好就是了
- 关于few-shot的部分有点像直接用了掩码的思想,总之就是把邻居mask掉去训练。虽然文章的方法是把询问节点的k个邻居mask掉,但我觉得直接在整个图上按度数贡献到概率上再随机mask也是可以的。
TNGNN
论文:Tail-GNN:Tail-Node Graph Neural Networks
来源:2021KDD
摘要
- 针对长尾效应提出Tail-GNN模型
- 提出transferable neighborhood translation的概念,捕获节点与邻居的传递关系
- 在五个公共数据集上进行实验,Tail-GNN取得了SOTA成绩
背景
- 图数据集的普遍特征:长尾分布
- 最近的GNN模型虽然很好地学习了节点表示,但是不能针对处理尾部节点
- 尾部节点的结构信息缺失影响节点分类和链路预测等任务
分析问题
- 如何发现尾节点缺失的邻域信息?
- 尾部GNN使用可转移邻域转换的新概念来模拟目标节点与其邻居之间的变量联系。这允许它预测尾节点缺失的邻域信息,并补充它们的邻域聚合。
- 如何在保持节点间通用性的同时,对每个尾节点的缺失信息进行局部定位?
- 使用一种可转移的邻域转换形式,可以进一步本地化以适应每个节点的本地上下文。这使得Tail-GNN在保持节点间通用性的同时,仍然能够适应局部环境,并为缺失的邻域信息提供准确的预测。
方法
Neighborhood translation
- contrastive strategy
- localizing strategy
neighborhood aggregation
- for head nodes: directly aggregate over the observed neighborhood
- for tail nodes: h v l + 1 = M ( h v l , { m v l } ∪ h i l : i ∈ N v ; θ l + 1 ) h_v^{l+1}=\mathcal M(h_v^l,\{m_v^l\}\cup {h_i^l : i\in \mathcal{N_v};\theta^{l+1}} ) hvl+1=M(hvl,{mvl}∪hil:i∈Nv;θl+1)
Overall loss
- task loss
- loss for missing information constraint
- loss for adversarial constraint
O v e r a l l l o s s : M i n Θ ( M a x θ d ( L t + μ L m − η L d ) ) Overall\quad loss:Min_{\Theta}(Max_{\theta_d}(\mathcal L_t +\mu\mathcal L_m -\eta\mathcal L_d))\\ Overallloss:MinΘ(Maxθd(Lt+μLm−ηLd))
一些问题
- 消融实验好像没有讨论到超参数对Tail-GNN的影响,在源码里可以继续通过设置一下超参数观察结果去分析。
- 随机缺失信息应该会导致每一次的准确率不太一样?通过固定随机种子可以做到在相同环境下填充一样的缺失信息,多次运行取平均值和标准差可近似代表准确率。
Cold Brew
论文:Cold Brew:Distilling Graph Node Representations with Incomplete or Missing Neighborhoods
来源:2022 ICLR
摘要
- 提出Cold Brew方法解决SCS(孤立点Strict Cold Start)节点的噪声邻居问题
- 提出FCR(特征贡献比 Feature Contribution Ratio)度量GNN中节点特征对预测结果的贡献程度
- 使用Teacher-Student Distilling提高SCS的泛化能力
- 在GNN层添加独立的结构嵌入来缓解节点过平滑问题
- 再公开数据集专有电子商务数据集上表现优异
问题分析/方法
-
跟前几篇文章类似,度数的幂律分布、传统GNN只能学习已知节点的嵌入表示等通病
-
经过之前度过的文章,有很多通解,半监督/自监督/元学习之类的,而本文的Cold Brew
用了Teacher-Student模型,所以大概是用类似半监督学习的思想来解决的。
-
-
如何有效地提炼Teacher模型的信息,以便进行SCS泛化
- SE(Structural Embedding,结构嵌入):在Teacher GNN训练时额外增加一个结构来学习结构信息,可以通过梯度反向传播。因每个阶段嵌入不同而且都参与了特征转换,缓解过度平滑的问题(Oversmoothing)。
-
如何让Student模型利用这些信息
- 学习从节点特征到该结构的映射,而不需要知道教师模型所使用的图结构(解决了MLP无法吸收结构信息的弊端),对于SCS来说可以找到一组虚拟邻居。
-
传统方法SCS只能用MLP映射到标签上缺忽略图的结构信息
- 教师模型可以学习到图结构信息,并嵌入到低维空间,而学生模型是MLP模型,但可以从教师模型中蒸馏出图结构信息。
-
使用FCR作为度量指标来衡量节点学习的难度来优化模型架构设计
- 因为我们的标签信息来自于节点本身特征和邻接结构,然后文章说前者用MLP映射,后者用LP(Label Propagation)来映射(嵌入了邻居信息)。FCR是按照他们有关两者信息的比值的公式来定义的(5a/5b)。
一些思考
- Cold Brew只对SCS Work吗?对Low-Degree-Node同样很有效,补充与TailGNN的比较:https://openreview.net/forum?id=1ugNpm7W6E
- FCR是根据直觉定义的,考虑了节点特征和图结构两种因素,在某种程度上也表示了图节点/特征的重要性。不过感觉计算方式有改进空间。