DPGN: Distribution Propagation Graph Network for Few-shot Learning

摘要

大多数基于图网络的元学习方法都是对 example 的 实例级 关系建模。我们对这一想法进行扩展,通过一种 一对多 的方式对一个 example 的分布级关系显式建模,从而能够用到所有其他的 examples 中。我们提出了一个名为 分布传播图网络 (DPGN) 的方法,我们使用该方法用于解决小样本学习问题。它在每个小样本学习任务中同时传递 实例级分布级关系。为了结合所有 examples 的分布级关系和实例级关系,我们创建了一个对偶完全图网络,该网络由两个图网络组成,分别是点图和分布图,图中的每一个节点表示一个 example。有了这个对偶图架构, DPGN 能够在几个 update generations 中将有标签 examples 中的标签信息传递到无标签 examples。在对小样本学习的基准的扩展实验中,DPGN 表现出了最好的结果:在有监督设置下,性能提升了 5 % ∼ 12 % 5\% \sim 12\%5%12%,在半监督设置下,性能提升了 7 % ∼ 13 % 7\% \sim 13\%7%13%。代码可以从该 链接 获取到。


1. 介绍

深度学习的成功依赖于大量的标记数据,然而人类可以在看少量样本之后就能够进行很好地扩展。这两个事实之间的矛盾引起了研究者对小样本学习的研究兴趣。小样本学习任务的目标是通过给定的少数的代标签数据 (Support 集)能够对无标签数据 (Query 集)进行预测。

微调是一个实践性的方法,它从小训练数据集中获取到预测模型的方法。然而,这种方法存在过拟合问题。元学习方法引入了 episode 的概念,使用这个概念来明确解决小样本问题。一个 episode 表示一轮训练,在每个 episode 中,我们从训练集中每一类随机取出几个样本(例如,1个或者5个)。元学习中有一个 trainer(也叫 meta-learner),它获取少量训练数据而得到一个分类器,这个过程我们称为 episodic training。在元学习的框架下,为了得到一个有效的 meta-learner,我们需要指定很多假设。

最近图网络逐渐收到了关注,图网络是一个强有力的模型,它能够泛化到许多数据结构上(列表,树),同时根据数据引入了组合先验。提出的小样本 GNN 通过构建一个完全图网络,其中每个节点特征与相应的类别特征进行 concat,然后节点特征通过图网络中的注意力机制进行更新,从而达到传播标签信息的作用。为了进一步探索图网络中类内相似和类间不同。EGNN 提出在 episodic training 框架下使用边标签图神经网络。需要注意的是,以前的小样本学习的 GNN 研究主要几种在 pair-wise 关系上(比如节点标注和边标注),这就忽略了分布关系。此外,其他的元学习方法虽然可以利用全局关系,但是这种利用方式是隐式的。

图1 我们提出的 DPGN 通过对每个样本与 Support 样本之间的对比比较来得到分布表示。然后,在对 Query 样本进行分类时,它将同时考虑实例级表示和分布级表示

如图 1 所示,首先,我们首先通过特征提取器得到 Support 样本和 Query 样本的实例特征,然后,我们通过计算所有 Support 样本之间的实例级相似性而得到每个样本的分布特征。为了利用每个 example 的实例级表示和分布级表示,同时还要对这两种表示进行单独处理,我们提出了一种对偶结构:一个点图 (PG) 和一个 分布图 (DG)。具体来讲,一个 PG 通过聚合每个 example 的一对多关系得到一个 DG,然而这个 DG 通过 deliver 每对 examples 之间的分布关系来对 PG 进行重定义。这一种循环转换方式充分利用了实例级关系和分布级关系,通过几个 generations 的 Gather-Compare 之后就得到了我们的方法。此外,可以很容易地将 DPGN 扩展到半监督小样本学习任务,其中 Support 集合中同时含有带有标签的数据和无标注的数据。DPGN 通过相似性分布的方式为带标签数据和无标签数据建立了一个 bridge,这就使得标签信息能够在半监督小样本分类任务中进行更好地传播。

我们的主要贡献如下:

  1. 据我们所知,DPGN 是第一个在图网络中使用分布传播来解决小样本问题的方法,并且进一步进行了消融实验,证明了分布关系的有效性。
  2. 我们提出了对偶完全图,其结合了实例级关系和分布级关系。并且这个框架中的循环更新策略有助于利用分布信息来增强实例特征。
  3. 在 4 个用于小样本学习的基准数据集上进行了大量的实验,通过与最佳效果的对比,DPGN 在小样本分类准确度上平均提升了 5 % ∼ 12 % 5\% \sim 12\%5%12%,在半监督任务上,我们的算法比现有的基于图的小样本学习方法性能更好,大概提升了 7 % ∼ 13 % 7\% \sim 13\%7%13%

2. 相关工作

2.1 图神经网络

图神经网络最初是为了处理图结构数据任务而设计的。图神经网络主要是通过递归地聚合和转换邻居节点来对节点表示进行更新。最近提出了一些方法用于解决小样本学习问题。TPN 将转导设置引入到基于图的小样本学习,它对拉普拉斯矩阵进行处理,从而将图中的 Support 集标签信息传播到 Query 集。通过对成对节点特征相似性传播标签的过程来考虑 Support 样本与 Query 样本之间的相似性。EGNN 使用样本间的相似性/不相似性为复杂交互动态地更新节点特征和边特征。

2.2 度量学习

另一类小样本学习方法侧重于使用度量学习方法来对输入数据的 embedding 进行优化。Matching Networks 通过比较 Support 集和 Query 集之间的嵌入距离来生成加权最近邻分类器。Prototypical Networks 首先在嵌入空间中为每个类别构建一个原型表示。IMF 是 Prototypical Networks 的扩展,它通过 self-adaption 的方法构建 infinite mixture prototypes。RelationNet 使用距离度量网络学习 Support 样本和 Query 样本之间的 pointwise 关系。

2.3 分布学习

分布学习理论最初是为了找到一种有效的算法来确定样本的分布。已经有一些方法能够有效地估计目标分布。DLDL 是这些研究中的一个,它在分类和回归任务中对每个实例分配离散分布而不是 one-hot 便签。CPNN 将特征和标签都作为输入,并在其框架中产生只有一个隐藏层的标签分布。LDLFs 设计了一种基于决策树算法的分布学习方法。

2.4 元学习

一些小样本学习方法采用元学习,该方式通过跨任务方式学习 meta-level 知识。MAML 是基于梯度的方法,其将 meta-learner 作为优化器,该优化器能够在给定几个样本的情况下,在几个 optimization steps 中就能够对模型参数(比如:深度网络的所有层)进行更新。Reptile 通过引入 L2 损失简化了对 meta-loss 的计算,该损失将元模型参数更新为特定实例的适应性模型。SNAIL 学习一个参数预测器用来估计模型中的参数。MetaOptNet 使用线性分类器而不是最近邻方法作为优化器,该优化器能够作为凸学习问题进行优化。LEO 使用编码器-解码器架构挖掘潜生成表示,并且在数据及其少的情况下预测高维度的参数。

3. 方法

在这一节,我们首先介绍了小样本学习任务的背景,然后对提出的算法进行详细介绍。

3.1 问题定义

小样本学习任务的目标是得到一个模型,这个模型能够在只有少量样本的情况下表现良好。
每一个小样本任务有一个 Support 集合 S 和一个 query 集合 Q。给定训练数据 D t r a i n \mathbb{D}^{train}Dtrain,Support 集合 S ⊂ D t r a i n S \subset \mathbb{D}^{train}SDtrain 包含 N 个类别,每个类别有 K 个样本,这就是 N-way K-shot 设置,可以将其表示为 S = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x N × K , y N × K ) } \mathcal{S} = \{(x_1, y_1), (x_2, y_2), \cdots, (x_{N \times K}, y_{N \times K})\}S={(x1,y1),(x2,y2),,(xN×K,yN×K)}。Query 集合 Q ⊂ D t r a i n \mathcal{Q} \subset \mathbb{D}^{train}QDtrainT ‾ \overline{T}T 个样本,可以表示为 Q = { ( x N × K + 1 , y N × K + 1 ) , ⋯ , ( x N × K + T ‾ , y N × K + T ‾ ) } \mathcal{Q} = \{(x_{N \times K+1}, y_{N \times K+1}), \cdots, (x_{N \times K+\overline{T}}, y_{N\times K + \overline{T}})\}Q={(xN×K+1,yN×K+1),,(xN×K+T,yN×K+T)}。具体来讲,在训练过程中,Support 集合和 Query 集合都有数据标签。给定测试数据 D t e s t \mathbb{D}^{test}Dtest,我们的目标是训练出一个分类器,它能够利用 S ⊂ D t e s t \mathcal{S} \subset \mathbb{D}^{test}SDtest 中的 Support samples 将 Q ⊂ D t e s t \mathcal{Q} \subset \mathbb{D}^{test}QDtest 中的 Query sample 准确地映射到相应标签。其中 Support 集合中的标签与 Query 集合中的标签是不重复的。

3.2 分布传播图网络

DPGN 整体框架

图2 DPGN 的整体框架,为了方便表述,我们采用 2-way 1-shot 任务作为例子。首先 Support 样本和 Query 样本经过特征提取器之后得到相应样本的特征向量,然后将该向量传递到对偶完全图(一个点图和一个分布图),这样就能够进行逐 generation 进行 transductive 传播。图中绿色的箭头一个边到点的转换(P2D),它聚合实例相似性从而对分布表示进行构建。蓝色的箭头表示另一个边到点的转换(D2P),它聚合实例特征的分布相似性。DPGN 在第 l 个 generation 之后对 query 样本进行预测

在这一节,我们将详细介绍我们提出用于小样本学习的 DPGN 模型。如图 2 所示,DPGN 有 l 个 generations,并且每个 generation 中包括一个点图 G l p = ( V l p , E l p ) G_l^p=(V_l^p, E_l^p)Glp=(Vlp,Elp) 和一个分布图 G l d = ( V l d , E l d ) G_l^d=(V_l^d, E_l^d)Gld=(Vld,Eld)。首先,通过一个卷积架构对所有样本进行特征提取,使用得到的特征向量对实例相似性 E l p E_l^pElp 进行计算,然后,通过得到的实例相似性构建分布图 G l d G_l^dGld。节点特征 V l d V_l^dVld 初始化方式是通过按照 G l p G_l^pGlp 中的位置顺序对 E l p E_l^pElp 进行聚合,E l d E_l^dEld 表示节点特征 V l d V_l^dVld 之间的分布相似性。最后,将得到的 E l d E_l^dEld 传递到 G l p G_l^pGlp 中从而构建更具判别性的节点表示 V l p V_l^pVlp,我们逐 generation 地执行上述步骤。一个 generation 可以表示成为 E l p → V l d → E l d → V l p → E l + 1 p E_l^p \rightarrow V_l^d \rightarrow E_l^d \rightarrow V_l^p \rightarrow E_{l+1}^pElpVldEldVlpEl+1p,其中 l 表示第 l 个 generation。

进一步解释,我们使用以下公式对 V l p , E l p , V l d V_l^p, E_l^p, V_l^dVlp,Elp,VldE l d E_l^dEld 进行表示:
V l p = { v l , i p } , E l p = { e l , i j p } , V l d = { v l , i d } , E l d = { e l , i j d } V_l^p=\{v_{l, i}^p\}, E_l^p=\{e_{l, ij}^p\},V_l^d=\{v_{l, i}^d\},E_l^d=\{e_{l, ij}^d\}Vlp={vl,ip},Elp={el,ijp},Vld={vl,id},Eld={el,ijd}
其中 i , j = 1 , ⋯ , T i,j = 1, \cdots, Ti,j=1,,TT = N × K + T ‾ T = N \times K+\overline{T}T=N×K+T 表示在训练 episode 过程中的所有样本数。v 0 , i p v_{0, i}^pv0,ip 是通过特征提取器 f e m b f_{emb}femb 的输出进行初始化的。因此,对于每个样本 x i x_ixi
v 0 , i p = f e m b ( x i ) (1) v_{0, i}^p = f_{emb}(x_i) \tag{1}v0,ip=femb(xi)(1)
其中 v 0 , i p ∈ R m v_{0, i}^p \in R^mv0,ipRm 表示特征嵌入的维度。

3.2.1 点到分布的聚合

点相似性:点图中的每一条边代表实例(点)之间的相似性,并且在第 1 个 generation 的边的初始化方式如下:
e 0 , i j p = f e 0 p ( ( v 0 , i p − v 0 , j p ) 2 ) (2) e_{0, ij}^p = f_{e_0^p}((v_{0,i}^p-v_{0,j}^p)^2) \tag{2}e0,ijp=fe0p((v0,ipv0,jp)2)(2)
其中 e 0 , i j p ∈ R e_{0, ij}^p \in \mathbb{R}e0,ijpRf e 0 p : R m → R f_{e_0^p}: \mathbb{R}^m \rightarrow \mathbb{R}fe0p:RmR 是一个编码器网络,其将实例相似性使用标量进行表示,f e 0 p f_{e_0^p}fe0p 是由两个 Conv-BN-ReLU 块组成,其中参数集为 θ e 0 p \theta_{e_0^p}θe0p,最后跟一个 sigmoid 层。

当 generation l > 0 l > 0l>0 时,给定 e l − 1 , i j p , v l − 1 , i p e_{l-1, ij}^p, v_{l-1, i}^pel1,ijp,vl1,ipv l − 1 , j p v_{l-1,j}^pvl1,jpe l , i j p e_{l, ij}^pel,ijp的更新方式如下:
边公式
为了使用图 G l p G_l^pGlp 中的历史 view 的边信息,通常需要对 e l , i j p e_{l, ij}^pel,ijp 进行标准化操作。

在这里插入图片描述

图3 DPGN 中关于 P2D 聚合和 D2P 聚合的细节,同样以 2-way 1-shot 任务为例子。MLP-1 是 P2D 聚合中提到的 FC-ReLU 块,MLP-2 是 D2P 聚合中提到的 Conv-BN-ReLU 块,绿色的箭头表示 P2D 聚合,蓝色的箭头表示 D2P 聚合,这两种聚合方式都集成了上一 generation 中的节点特征和边特征。

P2D 聚合:在得到或更新点图 G l p G_l^pGlp 中的边特征 E l p E_l^pElp 之后,下一步就是构建分布图 G l d = ( V l d , E l d ) G_l^d = (V_l^d, E_l^d)Gld=(Vld,Eld)。如图 3 所示,G l d G_l^dGld 的目标是从点图 G l p G_l^pGlp 中整合实例关系,进而处理分布关系。G l d G_l^dGld 中的分布特征 v l , i d v_{l, i}^dvl,id 是一个 NK 维度的特征向量,其中第 j 项的值表示样本 x i x_ixix j x_jxj 之间的关系,并且 NK 表示一个任务中所有的 Support 样本个数,在第一次初始化中:

v 的初始化
其中 v 0 , i d ∈ R N K v_{0, i}^d \in \mathbb{R}^{NK}v0,idRNK∣ ∣ || 操作是连接操作。δ ( ⋅ ) \delta(\cdot)δ() 表示 Kronecker delta 函数,当 y i = y j y_i = y_jyi=yjy i y_iyiy j y_jyj 表示标签)的时候,该函数输出结果为 1,否则输出为 0。

l > 0 l >0l时,分布节点的更新方式如下:
l >0 的 v 的更新方式
其中 P 2 D : ( R N K , R N K ) → R N K P2D:(\mathbb{R}^{NK}, \mathbb{R}^{NK}) \rightarrow \mathbb{R}^{NK}P2D(RNK,RNK)RNK 是用于分布图的聚合网络。P2D 在两个特征之间使用 concat 操作。然后,P2D 对 concat 后的特征执行了一个转换:R 2 N K → R N K \mathbb{R}^{2NK} \rightarrow \mathbb{R}^{NK}R2NKRNK,其由一个全连接层和 ReLU 层组成,其参数集为 θ v l d \theta_{v_l^d}θvld

3.2.2 分布到点的聚合

分布相似性:分布图中的每一条边代表不同样本分布特征之间的相似性,在 generation l = 0 l=0l=0 时,e 0 , i j d e_{0, ij}^de0,ijd 的初始化方式如下:
在这里插入图片描述
其中 e 0 , i j d ∈ R e_{0, ij}^d \in \mathbb{R}e0,ijdR。编码网络 f e 0 d : R N K → R f_{e_0^d}: \mathbb{R}^{NK}\rightarrow\mathbb{R}fe0d:RNKR 使用两个 Conv-BN-ReLU 块(其参数集为 θ e 0 d \theta_{e_0^d}θe0d)和最后一层是一个 sigmoid 层,从而将分布相似性进行转换。对于 l > 0 l>0l>0 的情况,图 G l d G_l^dGlde l , i j d e_{l, ij}^del,ijd 的更新规则如下:
l>0 的e 的更新
同样,我们也需要对 e l , i j d e_{l, ij}^del,ijd 进行标准化。

D2P 聚合:如图 3 所示,分布图 G l d G_l^dGld 中的编码后的分布信息在每个 generation 结束之后流回到点图 G l p G_l^pGlp 中,然后图 G l p G_l^pGlp 中的节点特征通过聚合 G l p G_l^pGlp 中的节点特征和边特征 e l , i d e_{l, i}^del,id 得到分布关系:
v 的更新

其中 v l , i d ∈ R m v_{l, i}^d \in \mathbb{R}^mvl,idRm,并且 D 2 P : ( R m , R m ) → R m D2P:(\mathbb{R}^m, \mathbb{R}^m) \rightarrow \mathbb{R}^mD2P:(Rm,Rm)Rm 是图 G l p G_l^pGlp 中的一个聚合网络,其参数集为 θ v l p \theta_{v_l^p}θvlp。D2P 通过将由 ∑ j = 1 T ( e l , i j d ⋅ v l − 1 , j p ) \sum_{j=1}^T(e_{l, ij}^d \cdot v_{l-1, j}^p)j=1T(el,ijdvl1,jp) 得到的特征和前一个 generation 得到的节点特征 v l − 1 , i p v_{l-1, i}^pvl1,ip concat 起来,然后使用两层的 Conv-BN-ReLU 块对 concat 后的特征进行更新。在这个过程之后,节点特征能够将分布信息整合到实例级特征中,并且可以用于计算下一个 generation 的实例相似性。

3.3 目标

每个节点的类别预测可以通过以下的公式进行得到,即对 DPGN 中最后一个 generation 得到的边经过 softmax 得到的结果:
预测结果
其中 P ( y i ^ ∣ x i ) P(\hat{y_i}|x_i)P(yi^xi) 是给定样本 x i x_ixi 之后的类别概率分布,并且 y i y_iyi 表示 support set 中的第 j 个样本。e l , i j p e_{l, ij}^pel,ijp 表示在最后一个 generation 在点图中得到的边特征。

点损失:注意,我们在点图中对每个样本进行分类预测,因此,第 l 个generation 的点损失的定义如下:
点损失
其中 L C E \mathcal{L}_{CE}LCE表示交叉熵损失,T 表示每个任务 ( S , Q ) ∈ D t r a i n (S,Q) \in D^{train}(S,Q)Dtrain 中的样本数。P ( y i ^ ∣ x i ) P(\hat{y_i}|x_i)P(yi^xi)y i y_iyi 分别表示样本 x i x_ixi 的模型预测概率和真实值。

分布损失:为了促进训练过程并且学习到具有判别性的分布特征,我们引入了分布损失,它在为了更好更快地收敛过程中有着重要的作用。我们定义第 l 个 generation 的分布损失如下:
分布损失
其中 e l , i j d e_{l, ij}^del,ijd 表示第 l 个 generation 中分布图的边特征。

最终的目标函数是上述损失的加权总和:
最终损失
其中 l ^ \hat{l}l^ 表示 DPGN 总的 generations 数,设置权值 λ p \lambda_pλpλ d \lambda_dλd 用来平衡两个损失之间的重要性,在我们的大多数实验中,λ p \lambda_pλpλ d \lambda_dλd 分别设置为 1.0 和 0.1。