1、Abstract
元学习作为一种模仿人类智能的可能方法,最近受到了极大的关注,即在很少或甚至没有演示的情况下获取新的知识和技能。现有的元学习方法大多是在欧几里得域内解决图像和文本等小样本学习问题。然而,将元学习应用于非欧几里德域的研究很少,最近提出的图神经网络(GNNs)模型并不能有效地解决图少样本学习问题。为此,我们提出了一种新的图元学习框架-元GNN -来解决图元学习设置中的小样本节点分类问题。它通过对多个相似的小样本学习任务进行训练,获得分类器的先验知识,然后用很少的标记样本对新分类的节点进行分类。此外,Meta-GNN是一个通用模型,可以直接纳入任何现有的最先进的GNN。在三个基准数据集上进行的实验表明,该方法不仅大大提高了元学习模式下的节点分类性能,而且学习了一个更通用、更灵活的任务适应模型。
2、Introduction
现有的gnn模型在遇到新类时总是需要重新学习它们的参数,以吸收新信息,如果每个新类中的节点数量很小,模型的性能将遭受灾难性的下降。当前gnn面临的主要挑战之一是无法处理只有一个或很少几个样本的情况。为了解决这个问题,最近的一些研究集中在解决图数据的小样本学习,其中gnn要么通过联合训练和自训练来训练,要么通过叠加转置图卷积层来扩展来重建输入特征。
近年来,元学习(即学习)在人工智能领域引起了极大的关注,因为它能够快速适应新任务,并在任务之间学习可转移的知识,而且样本很少。它被广泛认为与人类的智能相似,人类能够快速地学习新的类,用很少的样本和利用以前学到的先验知识。
元学习系统通过暴露在大量任务中来训练,并测试它们学习新任务的能力。这不同于传统的机器学习方法,包括对单个任务的训练和对该任务的保留样本的测试。
我们将对大量任务的学习过程和对新任务的测试过程分别称为元训练和元测试。
将元学习用于图像和文本学习取得了显著的进展,近年来提出了多种模型和算法,如匹配网络、原型网络、MAML等。尽管在分析具有欧几里得性质的数据(如图像和文本)方面有广泛的研究和有前景的结果,但在将元学习应用于图(非欧几里得数据)方面的工作却少得惊人。其中的主要原因是图数据更加不规则、嘈杂,节点之间的关系更加复杂,使得现有的元学习方法难以直接应用。
为了弥补这一差距,我们提出了一个通用的图元学习框架,称为Meta-GNN,专注于图数据上的小样本节点分类问题。据我们所知,我们的工作是第一次将元学习范式纳入gnn,提供良好的适应或泛化能力,以前所未有的新类,很少的样本。
3、Contributions
- 提出了一种新的节点分类图小样本学习范式。与之前的工作不同的是,我们的目标是用很少的样本对新类中的节点进行分类。
- 我们提出了一种处理小样本节点分类的通用框架,该框架可以轻松地与任何流行的gnn模型相结合,为图结构数据分析开辟了一个新的视角。
- 在三个基准数据集上,我们证明了我们的方法相对于几个最先进的gnn模型的优越性。
4、Methods
4.1 Meta-GNN
- 定义
D
t
r
a
i
n
,
D
t
e
s
t
D_{train},D_{test}
Dtrain?,Dtest?,其中,
D
t
r
a
i
n
D_{train}
Dtrain?表示训练集数据,其包含的类别记为:C1,
D
t
e
s
t
D_{test}
Dtest?表示测试集数据,其包含的类别记为:C2。
- 在
𝐷
𝑡
𝑒
𝑠
𝑡
𝐷_{𝑡𝑒𝑠𝑡}
Dtest?中,少量节点有可用的标签/类。我们的目标是找到一个Font metrics not found for font: .函数,它能够将其余未标记的节点分类为C2中的一个类。
- 如果每个类中标记的节点数为K,则该任务称为|C2|-way K-shot学习问题,其中K是一个非常小的数。
我们的方法基于元学习的方法论,该方法论通常遵循情景范式,并通过在许多抽样的类似任务(即元训练任务)上进行训练来解决新的少量学习问题(即元测试任务T)。我们将所有任务中相应的训练和测试集称为支持集和查询集,我们的方法利用MAML[1]进行训练过程中的梯度更新。在对大量元训练任务进行训练后,Meta-GNN需要学习(作为先验知识)如何使用新任务中的少量数据点快速适应新任务。Meta-GNN的性能是通过对新任务的元测试来衡量的,即对T的支持集中的几个样本进行微调,并在T的查询集上对其进行评估。
- 用Font metrics not found for font: . (𝜃为参数)表示模型Meta-GNN,数据划分方式如下所示:
4.2 Task Sampling
我们根据图元学习的原理,从
D
t
r
a
i
n
D_{train}
Dtrain?中抽取样本,准备M个任务T。简而言之,我们从C1中抽取|C2|类,然后对每个类随机抽取K个节点,模拟小样本节点分类。具体来说,我们使用以下步骤来生成图元训练任务: 其流程如下:
- 从C1(如100个类)中随机取 |C2|(如10) 个类,作为C(10个类)。
- 获取
𝐷
𝑐
𝐷_𝑐
Dc?,它是𝐷_𝑡𝑟𝑎𝑖𝑛的子集,包含元素
(
𝑥
𝑖
,
𝑦
𝑖
)
(𝑥_𝑖,𝑦_𝑖)
(xi?,yi?),其中,
𝑦
𝑖
𝑦_𝑖
yi?是C中的一个类。也就是说把C1中的C个类数据全部取出来作为
𝐷
𝑐
𝐷_𝑐
Dc?.
- 从
𝐷
𝑐
𝐷_𝑐
Dc?中随机取𝐾 ?𝐶个节点作为支持集
𝑆
𝑖
𝑆_𝑖
Si?,其中K为
𝑆
𝑖
𝑆_𝑖
Si?中每个类的节点数。也就是说,
D
c
D_c
Dc?中的每个类都随机抽取K个节点。
- 然后从
𝐷
𝑐
?
𝑆
𝑖
𝐷_𝑐 - 𝑆_𝑖
Dc??Si?个节点中随机抽取P个节点作为查询集
𝑄
𝑖
𝑄_𝑖
Qi?。
- 这样,
S
i
,
Q
i
S_i,Q_i
Si?,Qi?就组成了一个任务
T
i
T_i
Ti?。
举例说明:
以Cora数据集为例,Cora有7个类[0,1,2,3,4,5,6],测试集随机选择两个类[0,1],则剩下5个类[2,3,4,5,6],然后从这5个类中随机选择2个类[2,3],组成训练集,测试集类别要和训练集类别数目一致。
4.3 Meta-training
我们希望获得一个良好的初始化Meta-GNN,这通常适用于类似的任务,并明确鼓励初始化参数在一个新的小样本学习任务上进行少量梯度下降更新后表现良好。
- 当开始训练一个任务
𝑇
𝑖
𝑇_𝑖
Ti? 时,我们把支持集数据送到Meta-GNN中,计算交叉熵损失:
- 然后我们执行参数更新,在task
𝑇
𝑖
𝑇_𝑖
Ti?中使用一个或几个步骤的简单梯度下降。为简洁起见,我们将在本节的其余部分只描述一个梯度更新, 注意,执行多个梯度更新是一个简单的扩展,其中α1为任务学习率。
- 训练模型参数以优化
f
θ
i
′
f_{{\theta}_i^{'}}
fθi′?? 在元训练任务中的表现。
- 也就是说,每个任务都使用𝜃在自己的任务上进行一次梯度更新得到
θ
𝑖
′
\theta_𝑖^{′}
θi′?,最终会得到多个
θ
𝑖
′
\theta_𝑖^{′}
θi′?,优化的最终目的是找一个最优的𝜃,使得每一个
θ
𝑖
′
\theta_𝑖^{′}
θi′?在自身的任务上得到最小损失。
注意,元优化是在模型参数θ上执行的,而目标是使用更新的模型参数θ’来计算的。这是因为对于所有类似的小样本节点分类任务,我们都需要良好的初始化参数θ,而不是某些更新参数θ ’在特定任务Ti上性能较好。 从本质上讲,Meta-GNN的目标是优化模型参数,使其在一次或少量梯度下降更新后最大限度地提高新任务的节点分类性能。
通过随机梯度下降(SGD)进行任务间的元优化,将模型参数θ更新如下,其中α2是元学习速率,即我们的框架引入的一个额外的超参数。 也就是说,Meat-GNN有一个模型参数
θ
\theta
θ,在每个任务
T
i
T_i
Ti?上,都会以
θ
\theta
θ为基准参数,对其进行少次的梯度更新,使更新后的参数在此任务上表现较好,不改变
θ
\theta
θ的值。然后,每个任务都最终得到在自身任务上比较好的参数
θ
i
′
\theta_i^{'}
θi′?,然后通过
θ
i
′
\theta_i^{'}
θi′?的总和对
θ
\theta
θ求导,得到最优的
θ
\theta
θ,这个
θ
\theta
θ在每个任务上都是最优的初始值。这就是元学习的目的所在。
4.4 Meta-testing
对于元测试,我们只需要将新的小样本学习任务支持集的节点输入到元Meta-GNN中,并使用Eq.(4)通过一个或少量梯度下降步骤更新参数θ '。因此,在查询集上可以很容易地评估Meta-GNN的性能。
|