论文原文链接:https://arxiv.org/abs/1803.00676
在小样本分类中,人们感兴趣的学习算法是,仅根据少量带标记样例训练分类器的算法。元学习是近年来小样本分类研究的一大特色,元学习定义了一个学习算法的参数化模型,并在代表不同分类问题的片段上进行训练,每个片段都有一个小的带标记训练集和相应的测试集。本文中,作者将这种小样本分类模式推进到一个新场景中,在这个新场景中,每个片段也可以使用未标记的样例。作者考虑了两种情况:第一种情况是,假设所有未标记样例都与本片段中带标记样例属于同一类别;另一种更具挑战性的情况是,未标记样例中含有来自其他干扰类的样例。为了实现这个新模式,作者对原型网络(Snell 等人 2017)进行了扩展,使其能够使用未标记样例来生成原型。采用端到端的方式(具体怎么做的?),在片段上训练这些模型,使其学会成功利用未标记样例。作者在适应这个新框架的 Omniglot 和 miniImageNet 基准测试版本上评估了这些方法。作者还提出了一种新的 ImageNet 数据集分割方法,具有层次结构(为什么提出新的分割方法?)。实验表明这种新方法能够学会利用未标记样例来改善预测结果,就像半监督学习那样。
最近各种元学习方法使得小样本分类取得了重大进展。但是,这种进展在每个小样本学习片段的设置中受到限制,这与人类通过多维度学习新概念的方式不同。在本文中,作者采用两种方式来泛化这种设置(具体怎么做的?)。第一,考虑一种情境:新类别是在有额外未标记数据时学到的。第二,考虑一种情况:要学习的新类别不是孤立地看待的。相反地,许多未标记样例属于不同的类别,干扰类的存在给小样本学习带来了更多的实际困难。
图1:考虑一种设置,目标是学习一个分类器来区分两个之前没见过的类别:金鱼和鲨鱼,不仅给出了这两个类的带标记样例,还给出了大量未标记样例,其中一些可能属于这两个类别中的某一个。在这项工作中,作者的目标是通过在小样本学习片段中整合未标记的数据,向这个更自然的学习框架迈进一步,这些数据来自要学习的类(如红色虚线所示)以及干扰类。
这项工作是首次研究这种具有挑战性的半监督形式的小样本学习。首先定义了这个问题,并提出了适用于普通小样本学习中使用的 Omniglot 和 miniImageNet 基准的评估基准。对上面提到的两种设置进行了广泛的实证调查,有或没有干扰类。其次提出并研究了原型网络(Snell 等人,2017)的三种新扩展(扩展到半监督设置中)。最后通过实验证明,这种半监督变体成功地学会了利用未标记样例,并优于纯监督原型网络。
C t r a i n C_{train} Ctrain用于训练的类别
C t e s t C_{test} Ctest用于测试的类别(与训练中的类别不同)
在 N-way K-shot 结构的片段上训练模型,训练片段的构造过程如下:
其中 x i ∈ R D x_i\in R^D xi∈RD 是 D 维输入向量, y i ∈ { 1 , 2 , . . . , N } y_i\in\{1,2,...,N\} yi∈{ 1,2,...,N} 是类别标签。在这些片段上进行训练,是通过将支持集 S 提供给模型并更新其参数来最小化它对查询集 Q 中样例的预测损失。
目前最先进的小样本学习模型。
训练集用一个二元组表示 ( S , R ) (S,R) (S,R),其中 S 是传统的有标签支持集,R 是新引入的无标签数据集。
图2:半监督小样本学习设置的实例。训练片段包括支持集 S,无标签样例集 R,查询集 Q。R 中的样例可能与 S 中的样例相关(绿色加号所示),也可能是干扰项(红色减号所示)。但是请注意,该模型实际上并不知道每个未标记样例是否为干扰项;加号/减号只是为了说明而显示。测试时,片段中的类别都是训练时没有见过的新类别,用于评估元学习方法。
作者提出了原型 p c p_c pc 的基本定义的各种扩展,提供了一个程序利用 R 中的无标记样例生成改进的原型 p ~ c \tilde{p}_c p~c。使用相同的损失函数来训练原型网络中的模型,只是把 p c p_c pc 替换为 p ~ c \tilde{p}_c p~c。
图3:左图:普通的原型网络,基于对应类别的样例特征均值来初始化其原型,支持样例、无标签样例、查询样例分别用实线、虚线、白线边框表示。右图:结合无标签样例来获得改进的原型,能够正确分类所有查询样例。
首先考虑一种利用无标签样例来改进原型的简单方法,这是从半监督聚类中得到的启发。把每个类别的原型看作聚类中心,改进过程可以尝试把聚类中心调整到更好的位置,来适应支持样例和无标签样例。在这个观点下,支持集中样例的聚类赋值被认为是已知的,而且是固定的(对于每个样例的标签)。改进过程必须估计无标签样例的聚类赋值,并相应地调整聚类位置(原型)。
一个自然的选择是借鉴软聚类的推理。之所以选择软聚类而不是硬聚类,是由于硬聚类会使推理不可微。首先用常规原型 p c p_c pc 作为聚类中心,然后根据无标签样例到聚类中心的欧氏距离获得每个聚类的部分赋值 ( z ~ j , c ) (\tilde{z}_j, c) (z~j,c),最后结合这些无标签样例得到改进的原型 p ~ c \tilde{p}_c p~c。计算公式如下:
p ~ c = ∑ i h ( x i ) z i , c + ∑ j h ( x ~ j ) z ~ j , c ∑ i z i , c + ∑ j z ~ j , c \tilde{p}_c=\frac{\sum_ih(x_i)z_{i,c}+\sum_jh(\tilde{x}_j )\tilde{z}_{j,c}}{\sum_iz_{i,c}+\sum_j\tilde{z}_{j,c}} p~c=∑izi,c+∑jz~j,c∑ih(xi)zi,c+∑jh(x~j)z~j,c,其中 z ~ j , c = e x p ( − ∣ ∣ h ( x ~ j ) − p c ∣ ∣ 2 2 ) ∑ c ′ e x p ( − ∣ ∣ h ( x ~ j ) − p c ′ ∣ ∣ 2 2 ) \tilde{z}_{j,c}=\frac{exp\left(-||h(\tilde{x}_j )-p_c||_2^2\right)}{\sum_{c'}exp\left(-||h(\tilde{x}_j )-p_{c'}||_2^2\right)} z~j,c=∑c′exp(−∣∣h(x~j)−pc′∣∣22)exp(−∣∣h(x~j)−pc∣∣22) (4)
可以进行多次优化迭代,就像 k-means 中常见的那样。但作者实验了几种不同的迭代次数,发现结果并没有改善超过单次优化。
没有干扰类,只是一种假设的理想情况,更加普遍的情况是有干扰类。
由于软聚类的取值分布是所有类别,干扰项可能是有害的,并会干扰原型的优化过程。解决这个问题的一个简单方法是,增加一个额外的簇来捕获干扰项,避免它们污染有用的类簇。
p c = { 0 f o r c = N + 1 ∑ i h ( x i ) z i , c ∑ i z i , c f o r c = 1... N p_c=\left\{_{0 for c=N+1}^{\frac{\sum_ih(x_i)z_{i,c}}{\sum_iz_{i,c}} for c=1...N}\right. pc={ 0 for c=N+1∑izi,c∑ih(xi)zi,c for c=1...N (5)
这里作者采用简化的假设,干扰类簇有一个以原点为中心的原型,并引入长度尺度 r c r_c rc 来表示类簇内部的距离变化,特别针对干扰簇:
z ~ j , c = e x p ( − 1 r c 2 ∣ ∣ h ( x ~ j ) − p c ∣ ∣ 2 2 − A ( r c ) ) ∑ c ′ e x p ( − 1 r c 2 ∣ ∣ h ( x ~ j ) − p c ′ ∣ ∣ 2 2 − A ( r c ′ ) ) \tilde{z}_{j,c}=\frac{exp\left(-\frac{1}{r_c^2}||h(\tilde{x}_j )-p_c||_2^2-A(r_c)\right)}{\sum_{c'}exp\left(-\frac{1}{r_c^2}||h(\tilde{x}_j )-p_{c'}||_2^2-A(r_{c'})\right)} z~j,c=∑c′exp(−rc21∣∣h(x~j)−pc′∣∣22−A(rc′))exp(−rc21∣∣h(x~j)−pc∣∣22−A(rc)) 其中 A ( r ) = 1 2 l o g ( 2 π ) + l o g ( r ) A(r)=\frac{1}{2}log(2\pi)+log(r) A(r)=21log(2π)+log(r) (6)
为简单起见,作者在实验中把 r 1... N r_{1...N} r1...N 都设置为 1,只让模型学习干扰项 r N + 1 r_{N+1} rN+1 的长度尺度。
把干扰项都归入一个簇的做法太简单,而且不符合实际。干扰项可能属于不同的类别。在实验中,作者从多个类别中采样得到干扰样例。
为了处理这个问题,作者提出了一种改进的变体。这是通过在未标记样例的贡献上加入软屏蔽(soft-masking)机制来实现的。随着无标签样例距离原型由近及远,屏蔽由少到多。更具体地说,修改软聚类优化过程如下:
首先,计算样例 x ~ j \tilde x_j x~j 和原型 p c p_c pc 之间的归一化距离 d ~ j , c \tilde d_{j,c} d~j,c:
d ~ j , c = d j , c 1 M ∑ j d j , c \tilde d_{j,c}=\frac{d_{j,c}}{\frac{1}{M}\sum_jd_{j,c}} d~j,c=M1∑jdj,cdj,c 其中 d j , c = ∣ ∣ h ( x ~ j ) − p c ∣ ∣ 2 2 d_{j,c}=||h(\tilde{x}_j)-p_c||_2^2 dj,c=∣∣h(x~j)−pc∣∣22 (7)
然后,把 d ~ j , c \tilde d_{j,c} d~j,c 的各项统计数据(最小值、最大值、方差、偏度、峰度)输入一个小型神经网络,来预测每个原型的软阈值 β c \beta_c βc 和斜率 γ c \gamma_c γc:
[ β c , γ c ] = M L P ( [ m i n j ( d ~ j , c ) , m a x j ( d ~ j , c ) , v a r j ( d ~ j , c ) , s k e w j ( d ~ j , c ) , k u r t j ( d ~ j , c ) ] ) [\beta_c,\gamma_c]=MLP\left(\left[min_j(\tilde{d}_{j,c}),max_j(\tilde{d}_{j,c}),var_j(\tilde{d}_{j,c}),skew_j(\tilde{d}_{j,c}),kurt_j(\tilde{d}_{j,c})\right]\right) [βc,γc]=MLP([minj(d~j,c),maxj(d~j,c),varj(d~j,c),skewj(d~j,c),kurtj(d~j,c)]) (8)
这样每个阈值可以利用簇内部变化量的信息,以确定应该删除多少无标签样例。
然后,通过与 β c \beta_c βc 进行比较,计算每个样例对每个原型的贡献的软屏蔽 m j , c m_{j,c} mj,c:
p ~ c = ∑ i h ( x i ) z i , c + ∑ j h ( x ~ j ) z ~ j , c m j , c ∑ i z i , c + ∑ j z ~ j , c m j , c \tilde{p}_c=\frac{\sum_ih(x_i)z_{i,c}+\sum_jh(\tilde{x}_j)\tilde{z}_{j,c}m_{j,c}}{\sum_iz_{i,c}+\sum_j\tilde{z}_{j,c}m_{j,c}} p~c=∑izi,c+∑jz~j,cmj,c∑ih(xi)zi,c+∑jh(x~j)z~j,cmj,c,其中 m j , c = σ ( − γ c ( d ~ j , c − β c ) ) m_{j,c}=\sigma\left(-\gamma_c\left(\tilde{d}_{j,c}-\beta_c\right)\right) mj,c=σ(−γc(d~j,c−βc)) (9)
其中 σ ( . ) \sigma(.) σ(.) 是 sigmoid 函数。
训练时,模型可以使用式(8)中的多层感知机(MLP)来学习利用或完全忽略某些无标签样例。软屏蔽的使用使得这个过程完全可微。
最后,就像软聚类那样,虽然可以递归地重复进行优化,但作者发现单步优化已经足够。
小样本学习,半监督学习,聚类。
在三个数据集上评估模型性能,其中两个数据集是小样本分类基准数据集(Omniglot,miniImageNet),另外一个新的大规模数据集(tieredImageNet)希望对未来的小样本学习研究有用。
对于每个数据集,首先,新建一个额外的划分用于分开每个类别的有标签数据和无标签数据。
对于 Omniglot 和 tieredImageNet 数据集,每个类别的 10% 用于有标签数据,其余90% 用于无标签数据。
对于 miniImageNet 数据集,40% 用于有标签数据,其余 60% 用于无标签数据,因为作者发现 10% 的数据太少,不能达到合理性能,不能避免过拟合。
训练片段的构造过程如下:
测试片段的构造过程与此大体相同。
表1:Omniglot 1-shot 分类结果。
表3:tieredImageNet 1/5-shot 分类结果
【本期作者主页】https://blog.csdn.net/jieming2002