- 题目:Few-shot Learning With Graph Neural Networks
- 链接:https://arxiv.org/pdf/1711.04043.pdf
- 源码:https://github.com/vgsatorras/few-shot-gnn
- 时间:2018.02
- 会议:ICLR
- 其他:这是一篇很经典的小样本+GNN文章,网上能找到的对它的阅读笔记也有很多,一度成为后续众多模型的baseline。虽然时间有点久了,但是还是有很多值得学习的地方。
- 摘要:本篇文章研究了小样本、半监督和主动学习的图神经网络,并在Omniglot和Mini-Imagenet数据集上进行了实验。该模型 首先使用已训练好的CNN模型得到相似图中每一个图像的嵌入特征,相似性度量模块学习如何将集合中的嵌入特征组成一个图,GNN模块传播已知标签的节点特征到未知标签的节点,训练模型使得到的节点特征与分类器相连后损失最小。
介绍
贡献:
- 将小样本学习作为一个有监督的消息传递任务,使用图神经网络端到端训练它。
- Omniglot和Mini-Imagenet任务上以最少的参数得到了最先进的性能。
- 将该模型推广到半监督和主动学习领域。
主动学习:学习算法可以主动地提出一些标注请求,将一些经过筛选的数据提交给专家进行标注。
问题定义
符号定义
- (T,Y):分类任务,T表示数据以及标签集合,Y表示预测结果集合
- T = { { ( x 1 , l 1 ) , … ( x s , l s ) } , { x ~ 1 , … , x ~ r } , { x ˉ 1 , … , x ˉ t } \mathcal{T}=\left\{\left\{\left(x_{1}, l_{1}\right), \ldots\left(x_{s}, l_{s}\right)\right\},\left\{\tilde{x}_{1}, \ldots, \tilde{x}_{r}\right\},\left\{\bar{x}_{1}, \ldots, \bar{x}_{t}\right\}\right. T={ { (x1,l1),…(xs,ls)},{ x~1,…,x~r},{ xˉ1,…,xˉt}
- Y = ( y 1 , … , y t ) ∈ { 1 , K } t Y=\left(y_{1}, \ldots, y_{t}\right) \in\{1, K\}^{t} Y=(y1,…,yt)∈{ 1,K}t
- K:类别总数
- s:有标注样本数目
- r:无标注样本数目
- t:待分类的样本数 (本篇文章中的t=1,即每个分类任务都只分类一个样本)
- min Θ 1 L ∑ i ≤ L ℓ ( Φ ( T i ; Θ ) , Y i ) + R ( Θ ) \min _{\Theta} \frac{1}{L} \sum_{i \leq L} \ell\left(\Phi\left(\mathcal{T}_{i} ; \Theta\right), Y_{i}\right)+\mathcal{R}(\Theta) minΘL1∑i≤Lℓ(Φ(Ti;Θ),Yi)+R(Θ):标准监督模型
- Φ ( T ; Θ ) = p ( Y ∣ T ) \Phi(\mathcal{T} ; \Theta)=p(Y \mid \mathcal{T}) Φ(T;Θ)=p(Y∣T):深度学习模型,给定数据集和标签集T,预测结果Y
- R ( Θ ) \mathcal{R}(\Theta) R(Θ):防止过拟合的正则项。
在小样本场景下
- r=0:所有数据均有标注
- t=1:只有一个待分类的没有标注的样本
- s=qK:共有K类有标注样本,每类样本有q个,这样的场景被称为q-shot K-way
模型
- 支持集图片与查询集图片输入到 ϕ ( x ) \phi(x) ϕ(x)中, ϕ ( x ) \phi(x) ϕ(x)是一个CNN网络,将输入图片映射为嵌入。
- CNN的输出嵌入与图片one-hot向量拼接在一起形成初始结点特征,并作为GNN的输入。
上图中的GNN结构的细节具体如下图所示:
结点特征
输入的图片和标签将会用以下方式映射为结点特征
x i ( 0 ) = ( ϕ ( x i ) , h ( l i ) ) \mathbf{x}_{i}^{(0)}=\left(\phi\left(x_{i}\right), h\left(l_{i}\right)\right) xi(0)=(ϕ(xi),h(li))
- 图片xi的嵌入特征会与它的标签one-hot编码拼接在一起,作为初始节点的特征。
- ϕ \phi ϕ是一个CNN网络, ϕ ( ) \phi() ϕ()为卷积神经网络提取出来的图像特征
- h ( l ) h(l) h(l)是标签的one-hot编码,对于没有标签的未知样本 h ( l ) h(l) h(l)设置为全0。
边特征 / 邻接矩阵定义
A ~ i , j ( k ) = φ θ ~ ( x i ( k ) , x j ( k ) ) = MLP θ ~ ( a b s ( x i ( k ) − x j ( k ) ) ) \tilde{A}_{i, j}^{(k)}=\varphi_{\tilde{\theta}}\left(\mathbf{x}_{i}^{(k)}, \mathbf{x}_{j}^{(k)}\right)=\operatorname{MLP}_{\tilde{\theta}}\left(a b s\left(\mathbf{x}_{i}^{(k)}-\mathbf{x}_{j}^{(k)}\right)\right) A~i,j(k)=φθ~(xi(k),xj(k))=MLPθ~(abs(xi(k)−xj(k)))
- φ \varphi φ 是一个节点i和节点j之间的相似性度量,具有对称性 φ θ ~ ( a , b ) = φ θ ~ ( b , a ) \varphi_{\tilde{\theta}}(a, b)=\varphi_{\tilde{\theta}}(b, a) φθ~(a,b)=φθ~(b,a) 和非负性。
- 考虑到图结构对GNN中的信息传播有较大的影响,这里将两个向量的一范数结果输入到自定义的神经网络中,让网络自己学习到对适合GNN的度量方式。
- 得到所有节点之间的相似度之后,进而得到邻接矩阵A。为了防止反向传播过程中梯度爆炸,对中的每一行经过softmax函数。
GNN定义
x l ( k + 1 ) = Gc ( x ( k ) ) = ρ ( ∑ B ∈ A B x ( k ) θ B , l ( k ) ) , l = d 1 … d k + 1 \mathbf{x}_{l}^{(k+1)}=\operatorname{Gc}\left(\mathbf{x}^{(k)}\right)=\rho\left(\sum_{B \in \mathcal{A}} B \mathbf{x}^{(k)} \theta_{B, l}^{(k)}\right), l=d_{1} \ldots d_{k+1} xl(k+1)=Gc(x(k))=ρ(∑B∈ABx(k)θB,l(k)),l=d1…dk+1
- θ B ( k ) \theta_{B}^{(k)} θB(k)为可训练的参数
- ρ ( ) \rho() ρ()为激活函数: leaky ReLU
- Gc ( ) \operatorname{Gc}() Gc()是GNN网络,以第k层的特征为输入,以k+1层的特征为输出。
实验
实验部分仅以数据集Omniglot和小样本实验为例进行介绍
数据集:
- Omniglot是一个由50个不同字母的1623个字符组成的数据集,每个字符/类别由20个不同的人绘制。
CNN:初始图结点特征学习
- 3×3-convolutional layer with 64 filters
- batch-normalization
- 2×2 max-pooling
- leaky-relu
- fully connected layer
GNN:传播图结点信息,使用了3个块,每个块由两个模块组成,结构如下图所示:
- 计算邻接矩阵的模块和
- 图的卷积层
小样本实验:
- 对于每一个小样本任务T,从数据集中抽样K个类,并从每个类中抽样q个随机样本。从K个类中选择一个额外的样本进行分类(t=1)
Omniglot上的实验结果:
结论
- 本文研究了小样本、半监督和主动学习的图神经表示。
- 从元学习的角度来看,这些任务成为有监督的学习问题,其中输入是由一组或一组元素提供的,这些元素的关系结构可以利用神经消息传递模型。
- 特别是,堆叠节点和边缘特征推广了背景相似度学习,为之前的小样本学习模型提供了基础。
参考:
- https://www.zdaiot.com/DeepLearningApplications/Few-shot%20Learning/Few-shot%20learning%20with%20graph%20neural%20networks/
- https://blog.csdn.net/StreamRock/article/details/102808091