论文阅读笔记《Generating Classification Weights with GNN Denoising Autoencoders for Few-Shot Learning》

核心思想

  本文提出一种采用图神经网络GNN的小样本学习算法,本质上还是一种学习参数更新策略的元学习算法,使得模型参数能够根据在基础数据集上得到的模型和少量的新样本进行更新,在适应新任务的同时,且不会忘记旧任务。整个网络结构分成特征提取网络F(θ)F(\cdot|\theta)和分类器网络C(w)C(\cdot|w)两个部分,特征提取网络根据输入图像xx输出对应的特征向量z=F(xθ)z=F(x|\theta),而分类器网络的参数ww则是由NN个类别权重向量构成的w={wi}i=1Nw=\left \{w_i\right \}^{N}_{i=1},每个向量对应一个类别。将特征向量zz与类别权重向量wiw_i相乘就得到了对应类别的得分si=zTwis_i=z^Tw_i。假设在基础数据集DtrbsD^{bs}_{tr}(包含大量有标签的图片)上训练得到的权重为wbs={wi}i=1Nbsw^{bs}=\left \{w_i\right \}^{N_{bs}}_{i=1},本文要做的就是设计一个算法g(ϕ)g(\cdot|\phi),根据权重wbsw^{bs}和新样本构成的数据集DtrnvD^{nv}_{tr},得到新老样本对应的类别权重向量w={wi}i=1Nbs+Nnv=g(Dtrnv,wbsϕ)w=\left \{w_i\right \}^{N_{bs}+N_{nv}}_{i=1}=g(D^{nv}_{tr},w^{bs}|\phi)
  思路已经明确了,那么怎么去实现算法g(ϕ)g(\cdot|\phi)呢?作者提出一种叫做去噪自动编码器(Denoising Autoencoders,DAE)的结构,其原理如下式所示
论文阅读笔记《Generating Classification Weights with GNN Denoising Autoencoders for Few-Shot Learning》
其中ww表示输入,p(w)p(w)表示输入的概率密度函数;r(w)r(w)表示去噪自动编码器,其具体的过程是:首先给输入ww增加一定的高斯噪声,然后对带有噪声的权重进行去噪重构;σ2\sigma^2表示高斯噪声的规模(应该就是方差)。则根据上式,概率密度函数对数对于输入的偏导数近似等于1σ2(r(w)w)\frac{1}{\sigma^2}\cdot(r(w)-w)(r(w)w)(r(w)-w)的方向指向更有可能的ww分布。利用这一结论应用于本文的任务中,将权重参数向量ww作为输入,可得
论文阅读笔记《Generating Classification Weights with GNN Denoising Autoencoders for Few-Shot Learning》
则权重参数向量的更新策略可写为
论文阅读笔记《Generating Classification Weights with GNN Denoising Autoencoders for Few-Shot Learning》
  那么下面的问题就是,初始的权重ww怎么获得?去噪自动编码器怎么实现?
  第一个问题,对于基础数据集中各个类别样本对应的初始权重,可以直接使用在基础数据集上预训练的结果wbsw^{bs},而对于新任务数据集上的初始权重,可以使用各个类别样本对应的特征向量的平均值代替,如下式
论文阅读笔记《Generating Classification Weights with GNN Denoising Autoencoders for Few-Shot Learning》
式中xk,ix_{k,i}表示第ii个类别中的第kk个样本。
  第二个问题,作者提出一种基于图神经网络GNN的结构,如下图所示,首先对基础类别的初始权重和新类别的初始权重增加高斯噪声,然后进入一个由三层GNN构成的去噪自动编码器结构,得到重构后的权重。
论文阅读笔记《Generating Classification Weights with GNN Denoising Autoencoders for Few-Shot Learning》
  回顾整个过程,首先利用基础数据集上的样本对特征提取网络和分类器网络进行预训练得到基础类别的初始权重向量wbsw^bs;然后对于新样本数据集上的样本,经过特征提取网络得到特征向量,并计算对应类别特征向量的平均值作为初始权重向量wnvw^{nv};二者级联起来输入到DAE结构中得到重构的权重向量r(w)r(w),沿着r(w)wr(w)-w的方向对初始权重向量ww进行更新,得到最优的类别权重向量w^\hat{w},利用w^\hat{w}就能实现基础样本和新样本的分类任务了。
论文阅读笔记《Generating Classification Weights with GNN Denoising Autoencoders for Few-Shot Learning》

实现过程

网络结构

论文阅读笔记《Generating Classification Weights with GNN Denoising Autoencoders for Few-Shot Learning》
  图神经网络的每个隐藏层的结构如上图,定义每个初始权重向量对应图中的一个节点;然后根据余弦距离,计算得到与节点ii最近的JJ个节点,作为节点ii的邻居N(i)N(i);然后利用聚合函数(Aggregation Function)得到节点ii的聚合信息hN(i)(l)h_{N(i)}^{(l)};最后将节点ii所表示的特征信息hi(l)h_i^{(l)}与聚合信息hN(i)(l)h_{N(i)}^{(l)}级联起来,通过更新函数(Update Function)得到下一层节点ii的特征信息hi(l+1)h_i^{(l+1)}
  其中聚合函数是根据RelationNet改进的,首先两个节点的特征信息分别经过两个全连接层,然后对输出的结果求和,并经过由BN层+LeakyReLU和dropout构成的**函数层得到输出q(l)(hi(l),hj(l))q^{(l)}(h_i^{(l)},h_j^{(l)}),最后将输出乘以对应节点之间的权重值a_{ij}$并求和,数学表达如下
论文阅读笔记《Generating Classification Weights with GNN Denoising Autoencoders for Few-Shot Learning》

  更新函数是将节点ii所表示的特征信息hi(l)h_i^{(l)}与聚合信息hN(i)(l)h_{N(i)}^{(l)}级联起来,经过一个全连接层+BN层+Dropout层+LeakyReLU层+L2正则化层得到输出,再与ii所表示的特征信息hi(l)h_i^{(l)}级联起来得到得到下一层节点ii的特征信息hi(l+1)h_i^{(l+1)}
论文阅读笔记《Generating Classification Weights with GNN Denoising Autoencoders for Few-Shot Learning》
对于最后一层图神经网络,其更新函数略有不同。给定一个输入向量,会得到两个维度相同的输出向量δwi\delta w_ioio_i,全连接层u(L1)u^{(L-1)}+L2正则化层输出δwi\delta w_i,全连接层u(L1)u^{(L-1)}+Sigmoid层输出oio_i,最后将δwi\delta w_ioio_i相乘,在于初始权重向量wiw_i相加得到最终的输出w^i\hat{w}_i
论文阅读笔记《Generating Classification Weights with GNN Denoising Autoencoders for Few-Shot Learning》
论文阅读笔记《Generating Classification Weights with GNN Denoising Autoencoders for Few-Shot Learning》
根据我个人的理解这里的输出w^i\hat{w}_i应该就是上文提到的最优的类别权重向量w^\hat{w},作者将权重的更新过程暗含在了最后一层GNN网络之中了。

损失函数

  损失函数包含两个部分重构损失和分类损失,计算过程如下
论文阅读笔记《Generating Classification Weights with GNN Denoising Autoencoders for Few-Shot Learning》
其中NN表示基础数据集中的图片数目,MM表示验证集中的图片数目,wiw^*_i表示基础数据集经过识别网络学习得到的权重参数,w^i\hat{w}_i表示网络优化输出的最终类别权重参数,lossloss表示交叉熵损失函数。

创新点

  • 提出一种基于DAE的元学习算法,用于快速学习新样本对应的分类权重向量,实现小样本学习任务
  • 利用图神经网络实现DAE结构,充分利用了节点之间的联系,实现分类权重向量的重构和更新

算法评价

  本文利用分类权重向量实现分类任务,每个向量对应一个类别,而算法的目的就是能够根据基础类别的权重向量和少量的新样本,快速更新得到新样本对应的类别权重向量,这样既能识别新样本,又能保留对于基础类别的分类能力(之前的权重向量都保留着)。而为了能够快速更新权重参数,作者引入了DAE结构,对于初始权重向量增加高斯噪声,在对向量进行恢复和重构,通过重构向量和初始向量之间的差异,指引权重更新的方向。而为了实现DAE结构,作者采用了图神经网络GNN,因为其可以更好的利用各个节点之间的关系。整个算法思路清晰,结构完整,而且环环相扣,其引入的DAE结构也是新的思路和方法,值得借鉴学习。

如果大家对于深度学习与计算机视觉领域感兴趣,希望获得更多的知识分享与最新的论文解读,欢迎关注我的个人公众号“深视”。论文阅读笔记《Generating Classification Weights with GNN Denoising Autoencoders for Few-Shot Learning》