核心思想
本文提出一种直接预测分类器权重参数的小样本学习算法。作者的想法是对于普通的分类算法,无非就是将特征提取网络输出的特征向量输入到分类器(全连接层+softmax)中,与全连接层中的权重参数相乘,计算内积,再用softmax函数转化为概率值,整个过程的目的就是希望尽可能的大(表示样本对应的类别)。对于大规模的数据集,分类器中的权重参数是能够训练得到的,但对于小样本数据集就很难通过训练得到合适的权重,因此作者希望通过一个参数预测器直接输出分类器的权重参数。那么参数预测器要根据什么来预测分类器的权重参数呢?作者选择了特征提取网络输出的特征向量的平均值,这里的就是类别的样本特征向量的平均值,可以理解为PN网络中的原型Prototype。这样做的依据是作者发现通过t-SNE将特征向量可视化后,与对应类别的分类权重非常接近。
如此一来整个算法的思想就很清晰了,就是利用一个网络,根据每类样本的特征向量平均值,来预测分类器中全连接层的分类权重。但有一个问题,对于大规模的数据集是具有代表性的,但对于小样本数据集,甚至某些类别的样本只有一个,那么,这种情况下再计算可能就不一定适用了。如何解决这个问题呢?作者在大规模数据集上做预训练时,就允许模型随机从和中采样,来作为权重预测器的输入,作者称之为统计值,其构成的集合为统计集(statistic set)。也就是说既可以从该类别的所有样本的特征向量中选择,也可以选择该类别所有样本特征向量的平均值,选择的概率是,从中选择的概率是。整个算法的过程 如下图所示
每个类别的分类概率计算方式如下
式中表示期望值,这里又出现一个新的问题,那就是如果要计算属于的概率,需要计算和所有类别的分类权重乘积的期望值,这个过程太过繁琐了,有什么方法可以简化这个过程呢?作者提出用简单的线性变换来近似参数预测器,那么,是线性变换对应的矩阵,则上式可近似写为
其中可以在训练时提前计算好并保存下来。在小样本数据集上进行训练时,对于新的类别需要更新,但由于小样本数量较少,计算得到的可靠性不高,因此作者采用了一种混合策略。对于大规模数据集中的类别,直接使用训练得到的进行预测,对于小样本数据集中的类别,使用类别对应的所有统计值与测试图像的特征向量内积的最大值,来作为分类器的输出。该过程如下图所示
实现过程
网络结构
特征提取网络可采用ResNet-50或WRN-28-10,参数预测器设计了三种结构,只有一个全连接层;有两个全连接层,第一个全连接层后带有ReLU层;与结构相同,但训练时的损失函数不同。
损失函数
训练策略
本文的训练过程似乎只对参数预测器进行训练,过程如下图所示
先从中采样得到构成统计集,然后再从中采样得到构成训练**集(training activation set),通过参数预测器输出分类器权重,并利用分类器预测的类别,最后计算分类损失,更新参数预测器中的参数。
创新点
- 通过直接预测分类器权重的方法实现小样本学习算法
- 通过随机采样,线性近似,混合策略等方式解决了算法中的许多问题
算法评价
其实这种直接预测分类器参数的方法并不少见,如果把线性变换矩阵设为单位矩阵,那么就等价于,因为和都经过归一化处理,也就相当于计算和之间的余弦相似性,而的计算方法其实与PN中的原型计算过程非常类似。也就是说在本质上这一算法还是一种度量学习算法,对于类别表征(或者说原型)的计算中增加了一个随机采样的过程和一个可学习的线性变换,当然如果不把近似为线性变换,其性能可能会更高,但计算复杂度也会大幅上升了。
如果大家对于深度学习与计算机视觉领域感兴趣,希望获得更多的知识分享与最新的论文解读,欢迎关注我的个人公众号“深视”。