【论文分享】GNN+小样本文本分类方法:Meta-GNN: On Few-shot Node Classification in Graph Meta-learning

  • 题目:Meta-GNN: On Few-shot Node Classification in Graph Meta-learning
  • 会议:CIKM (CCF-B)
  • 链接:https://dl.acm.org/doi/pdf/10.1145/3357384.3358106
  • 源码:https://github.com/AI-DL-Conference/Meta-GNN
  • 时间:2019年11月
  • 摘要:用GNN来实现小样本分类,运用元学习的策略来训练模型。用到的gnn模型是SGC 和 GCN ,没有对gnn模型任何创新性的改造,但是将gnn上的元学习实验过程描述得很清楚,并且提供了各种baseline的代码,对gnn+小样本的实验有参考价值,总体而言比较基础。

介绍

贡献:

  1. 提出了一种新的基于图的节点分类学习模式。与之前的工作不同的是,本文的目标是从新的类中分类节点,每个节点只有很少的样本。
  2. 提出了一个解决少样本节点分类的通用框架,该框架可以很容易地与任何流行的gnn模型结合,为graph分析开辟了一个新的视角。
  3. 三个基准数据集上,证明了该方法优于几种最先进的gnn模型。

方法

问题定义

定义无向图: G = ( V , E , A , X ) \mathcal{G}=(V, E, \mathbf{A}, \mathbf{X}) G=(V,E,A,X)

  • V:结点集合
  • E:边集合
  • A:邻接矩阵
  • X:特征矩阵

问题定义:

  • 训练目标:给定少量的训练数据,分类训练集中未曾出现的新样本。
  • 训练集: D test  \mathcal{D}_{\text {test }} Dtest 
  • 测试集: D train  \mathcal{D}_{\text {train }} Dtrain 
  • 训练集与测试集不相交

GNN

  • GNN结合图结构信息和节点特征X来学习结点的向量表示hv,通常采用邻域聚合的方法。

  • 下图展示了一个结点聚合的例子,在图通过GNN的第一层时,红色节点对节点1、2和3的信息进行聚合,在第二层之后,红色节点对节点5和节点6的信息进行聚合。
    【论文分享】GNN+小样本文本分类方法:Meta-GNN: On Few-shot Node Classification in Graph Meta-learning_第1张图片

  • 因此第l层定义为:

  • a v ( l ) = h v ( l − 1 ) ⋅  AGGREGATE  ( l ) ( { h u ( l − 1 ) : u ∈ N ( v ) } ) h v ( l ) = h v ( l − 1 ) ⋅ COMBINE ⁡ ( l ) ( a v ( l ) ) \begin{aligned} \mathbf{a}_{v}^{(l)} &=\mathbf{h}_{v}^{(l-1)} \cdot \text { AGGREGATE }^{(l)}\left(\left\{\mathbf{h}_{u}^{(l-1)}: u \in \mathcal{N}(v)\right\}\right) \\ \mathbf{h}_{v}^{(l)} &=\mathbf{h}_{v}^{(l-1)} \cdot \operatorname{COMBINE}^{(l)}\left(\mathbf{a}_{v}^{(l)}\right) \end{aligned} av(l)hv(l)=hv(l1) AGGREGATE (l)({hu(l1):uN(v)})=hv(l1)COMBINE(l)(av(l))

  • h v ( l ) \mathbf{h}_{v}^{(l)} hv(l) :第l层 结点v的特征向量

  • 初始化 h ( 0 ) = X \mathbf{h}^{(0)}=\mathbf{X} h(0)=X

  • N ( v ) \mathcal{N}(v) N(v) 表示结点 v 的邻居节点集合

  • AGGREGATE 和 COMBINE 操作的选择对任务性能至关重要

此处graphSAGE为例子,介绍一下 聚合和组合的思想。
补充学习 graphSAGE

  • basic GNN: h v k = σ ( W k ∑ u ∈ N ( v ) h u k − 1 ∣ N ( v ) ∣ + B k h v k − 1 ) \mathbf{h}_{v}^{k}=\sigma\left(\mathbf{W}_{k} \sum_{u \in N(v)} \frac{\mathbf{h}_{u}^{k-1}}{|N(v)|}+\mathbf{B}_{k} \mathbf{h}_{v}^{k-1}\right) hvk=σ(WkuN(v)N(v)huk1+Bkhvk1)

  • graphSAGE : h v k = σ ( [ A k ⋅ AGG ⁡ ( { h u k − 1 , ∀ u ∈ N ( v ) } ) , B k h v k − 1 ] ) \mathbf{h}_{v}^{k}=\sigma\left(\left[\mathbf{A}_{k} \cdot \operatorname{AGG}\left(\left\{\mathbf{h}_{u}^{k-1}, \forall u \in N(v)\right\}\right), \mathbf{B}_{k} \mathbf{h}_{v}^{k-1}\right]\right) hvk=σ([AkAGG({huk1,uN(v)}),Bkhvk1])

【论文分享】GNN+小样本文本分类方法:Meta-GNN: On Few-shot Node Classification in Graph Meta-learning_第2张图片
在basic GNN中对邻居的聚合采用的是取平均的操作,对邻居结点和当前结点特征的融合采用的是直接相加的方式。为了进一步提升模型的表达能力,graphSAGE提出了AGGREGATE 和 COMBINE 的方法。

  • COMBINE :邻居结点和当前结点特征的融合采用拼接方式
  • AGGREGATE :一种聚合算法,将邻居结点的多个特 征向量聚合起来。论文中主要提出了三种聚合方式(Mean,Pool,LSTM)。
    【论文分享】GNN+小样本文本分类方法:Meta-GNN: On Few-shot Node Classification in Graph Meta-learning_第3张图片

最后论文挑选了SGC 和 GCN 来实现Meta-GNN模型。

Meta-GNN

  • 梯度更新方法:MAML
    【论文分享】GNN+小样本文本分类方法:Meta-GNN: On Few-shot Node Classification in Graph Meta-learning_第4张图片

抽取训练样本

步骤:
在这里插入图片描述

  • 从所有训练数据的类别中,随机抽取C2个类,形成Dc。(训练数据中可以有众多类别,但是每一个小任务只随机抽取C2个类别参与元训练)
  • 从第一步选中的Dc中,每一个类别都随机抽取K个样本,将这K x C2 个样本构成支持集S。
  • 从剩下的Dc中随机抽取P个结点作为查询集Q
  • 每一个任务都重复抽取支持集和查询集,共重复M次。

元训练

训练步骤:

  • 对于每一个小任务,将支持集送入Meta-GNN,计算交叉熵损失。

  • L T i ( f θ ) = − ( ∑ x i s , y i s y i s log ⁡ f θ ( x i s ) + ( 1 − y i s ) log ⁡ ( 1 − f θ ( x i s ) ) ) \mathcal{L}_{\mathcal{T}_{i}}\left(f_{\boldsymbol{\theta}}\right)=-\left(\sum_{\boldsymbol{x}_{i s}, y_{i s}} y_{i s} \log f_{\boldsymbol{\theta}}\left(\boldsymbol{x}_{i s}\right)+\left(1-y_{i s}\right) \log \left(1-f_{\boldsymbol{\theta}}\left(\boldsymbol{x}_{i s}\right)\right)\right) LTi(fθ)=(xis,yisyislogfθ(xis)+(1yis)log(1fθ(xis)))

  • 然后我们执行参数更新,在任务Ti中使用一个或几个步骤的简单梯度下降(为了简单起见,后续只描述一个梯度更新)

  • θ i ′ = θ − α 1 ∂ L T i ( f θ ) ∂ θ \theta_{i}^{\prime}=\theta-\alpha_{1} \frac{\partial \mathcal{L}_{\mathcal{T}_{i}}\left(f_{\theta}\right)}{\partial \boldsymbol{\theta}} θi=θα1θLTi(fθ)

  • α1为任务学习率,训练模型参数以优化fθ ’ 在元训练任务中的性能。更具体地说,元目标如下:

  • θ = arg ⁡ min ⁡ θ ∑ T i ∼ p ( T ) L T i ( f θ i ′ ) \boldsymbol{\theta}=\underset{\theta}{\arg \min } \sum_{\mathcal{T}_{i} \sim p(\mathcal{T})} \mathcal{L}_{\mathcal{T}_{i}}\left(f_{\theta_{i}^{\prime}}\right) θ=θargminTip(T)LTi(fθi)

  • 也就是说,每个任务都使用在自己的任务上进行一次梯度更新得到 θ ′ \theta_^{′} θi,最终会得到多个 θ ′ \theta_^{′} θi,优化的最终目的是找一个最优的,使得每一个 θ ′ \theta_^{′} θi在自身的任务上损失最小。

元测试

对于元测试,我们只需要将新的小样本学习任务支持集的节点输入到元Meta-GNN中,并通过一个或少量梯度下降步骤更新参数θ '。因此,在查询集上可以很容易地评估Meta-GNN的性能。

实验

1️⃣数据集:
【论文分享】GNN+小样本文本分类方法:Meta-GNN: On Few-shot Node Classification in Graph Meta-learning_第5张图片
后序对实验的说明均以Cora数据集为例

  • 从core中选取2类作为查询集,剩余的5类作为支持集。
  • 元学习和元测试中的支持集,每一个类含有K个样本,这里的K取1和3进行实验。(也就是进行一次5-way 1-shot 实验,一次5-way 3-shot 实验)

2️⃣Baseline:

  • DeepWalk
  • Node2Vec
  • GCN
  • SGC
  • GraphSAGE

3️⃣实施:

  • Meta-GNN使用了两个Gnn模型来实现:Meta-SGC and Meta-GCN
  • batch-size=5
  • a1,a2 分别为:0.5 and 0.003 in Meta-SGC;0.1 and 0.001 in Meta-GCN

4️⃣实验结果
【论文分享】GNN+小样本文本分类方法:Meta-GNN: On Few-shot Node Classification in Graph Meta-learning_第6张图片

结论

  • 本篇提出了一个针对小样本结点分类的通用图元学习框架,该框架利用元学习机制更好地学习gnn的参数初始化。本文提出的Meta-GNN模型能够很好地适应带有少量标记样本的新学习任务(甚至是新类),并显著提高了元学习范式下的小样本结点分类的性能。
  • 在未来的工作中,希望扩展该框架,以解决更具有挑战性的问题,如小样本图分类和零样本节点分类。

你可能感兴趣的:(#,GNN,#,小样本,小样本,gnn)