核心思想

  本文提出一种直接预测分类器权重参数的小样本学习算法。作者的想法是对于普通的分类算法,无非就是将特征提取网络输出的特征向量a(x)a(x)输入到分类器(全连接层+softmax)中,与全连接层中的权重参数WW相乘,计算内积,再用softmax函数转化为概率值,整个过程的目的就是希望a(x)wya(x)\cdot w_y尽可能的大(yy表示样本xx对应的类别)。对于大规模的数据集,分类器中的权重参数是能够训练得到的,但对于小样本数据集就很难通过训练得到合适的权重,因此作者希望通过一个参数预测器ϕ\phi直接输出分类器的权重参数。那么参数预测器ϕ\phi要根据什么来预测分类器的权重参数呢?作者选择了特征提取网络输出的特征向量Ay={a(x)xDlargeDfew,Y(x)=y}A_y=\left \{a(x)|x\in D_{large}\cup D_{few},Y(x)=y\right \}的平均值aˉy\bar{a}_y,这里的aˉy\bar{a}_y就是类别yy的样本特征向量的平均值,可以理解为PN网络中的原型Prototype。这样做的依据是作者发现通过t-SNE将特征向量可视化后,aˉy\bar{a}_y与对应类别的分类权重wyw_y非常接近。
  如此一来整个算法的思想就很清晰了,就是利用一个网络ϕ\phi,根据每类样本的特征向量平均值aˉy\bar{a}_y,来预测分类器中全连接层的分类权重wy=ϕ(aˉy)w_y=\phi(\bar{a}_y)。但有一个问题,对于大规模的数据集aˉy\bar{a}_y是具有代表性的,但对于小样本数据集,甚至某些类别的样本只有一个,那么aˉy=ay\bar{a}_y=a_y,这种情况下再计算aˉy\bar{a}_y可能就不一定适用了。如何解决这个问题呢?作者在大规模数据集上做预训练时,就允许模型随机从AyA_yaˉy\bar{a}_y中采样,来作为权重预测器ϕ\phi的输入sys_y,作者称之为统计值,其构成的集合为统计集(statistic set)Slarge={syAyaˉyy=1,2...,Clarge}S_{large}=\left \{s_y\in A_y\cup \bar{a}_y|y=1,2...,|C_{large}|\right \}。也就是说sys_y既可以从该类别的所有样本的特征向量AyA_y中选择,也可以选择该类别所有样本特征向量的平均值aˉy\bar{a}_y,选择aˉy\bar{a}_y的概率是pmeanp_{mean},从AyA_y中选择的概率是1pmean1-p_{mean}。整个算法的过程 如下图所示
论文阅读笔记《Few-Shot Image Recognition by Predicting Parameters from Activations》
  每个类别的分类概率计算方式如下
论文阅读笔记《Few-Shot Image Recognition by Predicting Parameters from Activations》
式中ES\mathbb{E}_S表示期望值,这里又出现一个新的问题,那就是如果要计算xx属于yy的概率,需要计算a(x)a(x)和所有类别的分类权重ϕ(sy)\phi(s_{y'})乘积的期望值,这个过程太过繁琐了,有什么方法可以简化这个过程呢?作者提出用简单的线性变换来近似参数预测器ϕ\phi,那么ϕ(sy)=Φsy\phi(s_{y'})=\Phi\cdot s_{y'}Φ\Phi是线性变换对应的矩阵,则上式可近似写为
论文阅读笔记《Few-Shot Image Recognition by Predicting Parameters from Activations》
其中ES[sy]\mathbb{E}_S[s_y]可以在训练时提前计算好并保存下来。在小样本数据集上进行训练时,对于新的类别需要更新ES[sy]\mathbb{E}_S[s_y],但由于小样本数量较少,计算得到的ES[sy]\mathbb{E}_S[s_y]可靠性不高,因此作者采用了一种混合策略。对于大规模数据集中的类别,直接使用训练得到的ES[sy]\mathbb{E}_S[s_y]进行预测,对于小样本数据集中的类别,使用类别yy对应的所有统计值sys_y与测试图像xx'的特征向量a(x)a(x')内积的最大值,来作为分类器的输出。该过程如下图所示
论文阅读笔记《Few-Shot Image Recognition by Predicting Parameters from Activations》

实现过程

网络结构

  特征提取网络可采用ResNet-50或WRN-28-10,参数预测器ϕ\phi设计了三种结构,ϕ1\phi^1只有一个全连接层;ϕ2\phi^2有两个全连接层,第一个全连接层后带有ReLU层;ϕ2\phi^{2*}ϕ2\phi^2结构相同,但训练时的损失函数不同。

损失函数

  论文阅读笔记《Few-Shot Image Recognition by Predicting Parameters from Activations》

训练策略

  本文的训练过程似乎只对参数预测器ϕ\phi进行训练,过程如下图所示
论文阅读笔记《Few-Shot Image Recognition by Predicting Parameters from Activations》
先从AyaˉyA_y\cup \bar{a}_y中采样得到sys_y构成统计集SS,然后再从AyaˉyA_y\cup \bar{a}_y中采样得到aya_y构成训练**集(training activation set)TT,通过参数预测器ϕ\phi输出分类器权重,并利用分类器预测aya_y的类别,最后计算分类损失,更新参数预测器ϕ\phi中的参数。

创新点

  • 通过直接预测分类器权重的方法实现小样本学习算法
  • 通过随机采样,线性近似,混合策略等方式解决了算法中的许多问题

算法评价

  其实这种直接预测分类器参数的方法并不少见,如果把线性变换矩阵Φ\Phi设为单位矩阵,那么a(x)ΦES(sy)a(x)\cdot \Phi \cdot \mathbb{E}_S(s_y)就等价于a(x)ES(sy)a(x)\cdot \mathbb{E}_S(s_y),因为a(x)a(x)ES(sy)\mathbb{E}_S(s_y)都经过归一化处理,a(x)ES(sy)a(x)\cdot \mathbb{E}_S(s_y)也就相当于计算a(x)a(x)ES(sy)\mathbb{E}_S(s_y)之间的余弦相似性,而ES(sy)\mathbb{E}_S(s_y)的计算方法其实与PN中的原型计算过程非常类似。也就是说在本质上这一算法还是一种度量学习算法,对于类别表征(或者说原型)的计算中增加了一个随机采样的过程和一个可学习的线性变换ϕ\phi,当然如果不把ϕ\phi近似为线性变换,其性能可能会更高,但计算复杂度也会大幅上升了。

如果大家对于深度学习与计算机视觉领域感兴趣,希望获得更多的知识分享与最新的论文解读,欢迎关注我的个人公众号“深视”。论文阅读笔记《Few-Shot Image Recognition by Predicting Parameters from Activations》

相关文章: