元学习—半监督原型网络

元学习—半监督原型网络

本文主要参考文献META-LEARNING FOR SEMI-SUPERVISED FEW-SHOT CLASSIFICATION,有兴趣的读者可以参考该文献。

1 介绍

大量的可用数据可以使得深度学习模型在很多人工智能任务上取得非常不错的效果。例如,语音识别,物体识别,和机器翻译等等。然而,当前的深度学习方法面临着数据缺少的问题。具体的,当前的多数方法都擅长处理拥有大量数据的单个任务。这些方法能够利用仅仅缺少一点标签的数据来处理大量的任务。另外一个方面,人类很容易去学习到一个新的类别,比如当我们去一个热带国家的时候,能够很容易的学习一些新的类型的水果。这对于机器学习和人类之间存在着一个巨大的鸿沟,这也为深度的学习的发展提供了丰富的基础。

基于上述的原因,最近对于小样本的学习的网络结构在不断的增加,其中考虑了具体算法的设计,使其能够在只有一点标签的训练集上的有更好的效果。这里,我们着重关注于小样本分类的情况,其中每一个分类中都仅仅包含已经标记的数据。一种进行小样本学习的方法是采用元学习的形式,其从大量的利用已标记样本学习的分类问题中进行迁移学习,到一个新的,类别在训练过程中不可见的分类问题上去。元学习可能采用学习一个共享度量的形式,一种常见的对于小样本分类器的初始化方式,或者一个通用的推理框架。

大量元学习的形式在小样本的分类中已经取得了重大的突破。然而,这种方式受限于对于小样本学习片段的设置,这与人类学习新的概念在很多场景下是不同的。在本篇文献中,我们目标是通过两种方式进行设置。首先,我们考虑下面的一个场景:新的类别通过额外的未标记的数据进行学习得到。尽管有很多应用中使用半监督学习的方式将视为一个单个的分类任务,其中类别在训练和测试过程中是一致的。这种工作并没有解决迁移到一个在训练过程没有见过的新的类别上的挑战。这是值得我们考虑的。第二个场景,我们考虑这样的一个情况,学习的类别不是孤立的,即未标记的样本可能来源于多个类别。这里存在的干扰的类别的引入造成的对于小样本学习问题的额外的,现实的难度。

本文中的工作首先研究的是小样本学习的半监督学习形式。首先,我们定义问题和适应于Omniglot和miniImageNet数据上的评估标准。我们通过有干扰类别和无干扰类别两个方面对于上述的两个数据进行了扩展性的研究。第二,我们提出对于传统原型网络的三种新的扩展形式。一个静态的小样本学习方法,应用于半监督学习的设置。最终,我们演示了我们的实验,能够成功的在监督学习的原型网络中利用未标记的数据。

2 背景介绍

2.1 小样本学习

根据下面的一个片段示例,小样本的学习取得了不错的进展。考虑这样一个情形,我们对于一个类别集合 C t r a i n C_{train} Ctrain拥有大量的已标记数据集。然而,通过对于 C t r a i n C_{train} Ctrain上的数据集的训练,我们的最终目标为与 C t r a i n C_{train} Ctrain不相交的测试集 C t e s t C_{test} Ctest生成分类器。而 C t e s t C_{test} Ctest中的仅仅存在一些已标记的数据可以利用。这种情况背后的解决思想是利用训练样本集 C t r a i n C_{train} Ctrain中大量已标记的训练样本集来处理所有在 C t e s t C_{test} Ctest中出现的各种小样本的问题。

更为具体的是,模型通过K-shot(每个类别的样本数量),N-way(类别数量)的片段来进行构建,首先是对于 C t r a i n C_{train} Ctrain中的类别进行采样,生成N个类别,然后进行下面的操作:

  1. 定义一个支持(训练)集 S = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . . , ( x N ∗ K , y N ∗ K ) } S=\{(x_1,y_1),(x_2,y_2),....,(x_{N*K},y_{N*K})\} S={(x1,y1),(x2,y2),....,(xNK,yNK)},其中包含了N个类别,每个类别中包含了K个样本。
  2. 定义一个查询(测试)集 Q = { ( x 1 ∗ , y 1 ∗ ) , ( x 2 ∗ , y 2 ∗ ) , . . . . , ( x N ∗ K ∗ , y N ∗ K ∗ ) } Q=\{(x_1^*,y_1^*),(x_2^*,y_2^*),....,(x_{N*K}^*,y_{N*K}^*)\} Q={(x1,y1),(x2,y2),....,(xNK,yNK)}
  3. 其中支持集和查询集中的 x i x_i xi的维度为D,表示的原始的输入向量,每一个 y i y_i yi表示的样本的标签。
    整个的过程通过支持集进行训练,并且通过查询集进行损失函数,更新参数。
    从某一个角度出发,我们的模型能够训练出一个有效的算法。整个模型需要依靠一组已标记的数据并且产生一个能够被用于新样本的上的预测器。更多地,这种训练方式能够对于查询集中的新的样本产生不错的效果。与此类别,基于上述示例的训练经常被描述为学会去学习或者元学习。

在另外一个方面,将片段中的内容称为训练集和测试集,将这些片段的学习过程称为元学习或者元训练。为了清楚起见,我们将片段中的内容称之为支持集和查询集,将迭代过程称之为训练。

2.2 原型网络

原型网络是一个小样本学习的模型,其优点是简单并有着不错的效果。从更高的层次来看,其使用了支持集S来抽取每个类别的原型向量,并且对于查询集中输入的查询向量,依照其对于原型向量的距离进行分类。

进一步,原型网络学习到通过神经网络表示的一个编码公式 p ( x ) p(x) p(x),其将相同类别的样本映射到一个空间中,不相同的类别的的向量距离很远。原型网络的所有参数依赖于该编码函数。为了计算每一个类别c的原型向量 p c p_c pc,其生成方式利用到了所有的样本的均值形式,其具体定义如下:
p c = ∑ i h ( x i ) z i , c ∑ i z i , c   , w h e r e z i , c = 1 [ y i = = c ] p_c=\frac{∑_ih(x_i)z_{i,c}}{∑_iz_{i,c}} \ ,where z_{i,c}=1[y_i==c] pc=izi,cih(xi)zi,c ,wherezi,c=1[yi==c]
这些原型信息定义了一个预测器,用来对于新的查询样本 x ∗ x^* x进行分类,基于 x ∗ x^* x与各个类别的距离,为每一个类别分配一个概率权重。其具体的定义形式如下:
p ( c ∣ x ∗ , { p c } ) = e x p ( − ∣ ∣ h ( x ∗ ) − p c ∣ ∣ 2 2 ) ∑ c ′ e x p ( − ∣ ∣ h ( x ∗ ) − p c ′ ∣ ∣ 2 2 ) p(c|x^*,\{p_c\})=\frac{exp(-||h(x*)-p_c||_2^2)}{∑_{c'}exp(-||h(x^*)-p_{c'}||_2^2)} p(cx,{pc})=cexp(h(x)pc22)exp(h(x)pc22)
原型网络的损失函数通过给定的训练片段来进行定义,基于查询集中的所有的样本来进行计算,其具体的定义形式如下:
− 1 T ∑ i l o g p ( y i ∗ ∣ x i ∗ , { p c } ) -\frac{1}{T}∑_ilogp(y_i^*|x_i^*,\{p_c\}) T1ilogp(yixi,{pc})
训练的过程就是为了最小化这个均值损失,在训练的用的数据片段上,利用梯度进行迭代更新。

3 半监督小样本学习

我们现在对于小样本学习定义其半监督的形式。训练数据集可以采用已标记数据和未标记数据元组的形式进行描述,即(M,R),其中已标记的数据集M用于构建支持集S,支持集内部包含了输入的变量和其对应标签的元组。除了这种传统的小样本学习方式,我们还引入了未标记的样本集合R,其内部只包含了输入样本,即 R = { x 1 ′ , x 2 ′ , . . . , x k ′ } R=\{x_1',x_2',...,x_k'\} R={x1,x2,...,xk}。其基本的设置如下图所示:

元学习—半监督原型网络
通过上图所示,训练过程中,支持集中包括已标记的数据和未标记的数据,以及一个查询集。训练的目标是利用支持集中已标记的数据和未标记的数据为查询集中的数据打上标签,并且在查询集上产生很好的表现。对于支持集中未标记的数据,或者他们是与已标记数据相关类别的,或者其本质就是干扰项,即其所代表的类别并没有在当前的训练片段中出现。但是实际上模型中没有对未标记实际是否为干扰项进行说明,这里使用+、-是为了便于展示。在测试的过程中,我们能够获取新的片段,其中包括了新的类别,即在训练过程中没有发现的类别。我们用于评估元学习的方法。

3.1 半监督原型网络

对于传统形式,原型网络并没有一个具体的形式来利用未标记的数据R,从这个角度出发,我们提出基于原型向量 p c p_c pc的各种扩展形式。然后使用未标记数据R细化了原型向量 p c p_c pc。具体如下图所示:
元学习—半监督原型网络
根据上图所示,左半部分是对原型向量细化之前,可以看到,每一个原型网络的都是通过已标记的数据来生成的。右半部分是细化之后的原型向量的生成过程,可以发现,原型向量通过已标记的数据和未标记的数据共同生成。
在获取了细化的原型向量之后,每一个模型的训练都采用了与传统的原型网络相同的Loss函数。即上述所定义的损失函数。至此,查询集中的每一个样本可以被划分到N个分类中的一个中去。划分的过程依然基于样本的编码和各个细化的原型向量的相似性来进行的。

3.1.1 基于soft-kmean的原型网络

我们首先为细化的原型向量考虑一个简单的,利用未标记数据的方式。其基本的思路来源于半监督聚类。将每一个原型向量视为聚类的中心。细化的过程可以试着去调整中心的位置来更好的适应支持集中的数据。基于这种思路,聚类为支持集中的样本分配一个已知类别的标签,并且调整每一个样本的标签。细化的过程必须可以预测出支持集中未标记样本的标签,并且根据结果能够调整聚类的位置。
一种比较自然的选择来源于soft k-means。我们相比于hard k-means而言,更喜欢这种soft k-means,因为hard k-means是不可微的。我们开始于传统的原型网络 p c p_c pc,将其作为聚类的中心。对于未标记的数据,其可以获取一个可以获取部分的类别分配 ( z j , c ′ ) (z_{j,c}') (zj,c)来针对于每一个分类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 ′   ,   w h e r e    z j , c ′ = e x p ( − ∣ ∣ h ( x j ′ ) − p c ∣ ∣ 2 2 ) ∑ c ′ e x p ( − ∣ ∣ h ( x j ′ ) − p c ′ ∣ ∣ 2 2 ) p_c'=\frac{∑_ih(x_i)z_{i,c}+∑_jh(x_j')z_{j,c}'}{∑_iz_{i,c}+∑_jz_{j,c}'}\ ,\ where\ \ z_{j,c}'=\frac{exp(-||h(x_j')-p_c||_2^2)}{∑_c'exp(-||h(x_j')-p_c'||_2^2)} pc=izi,c+jzj,cih(xi)zi,c+jh(xj)zj,c , where  zj,c=cexp(h(xj)pc22)exp(h(xj)pc22)
对于查询集样本的预测可以使用上述的距离计算公式进行分配。实际上,我们可以采用很多种方式来完成这个细化的过程,比较常见的是使用k-means的方式。然而,我们进行了大量的实验,发现多种细化方式并没有提升多大的效果。

3.1.2 使用soft k-keans和一个干扰聚类项的原型网络

在上述的soft k-means中,存在一个这样的假设,即每一个未标记的数据在一个片段中,都属于某一个类别。然而,如果不采用这种假设,并且设定一个新的类别来作为干扰项,将会使得模型更具一般性。这种干扰项我们称之为干扰项类别。例如,如果我们想区分单轮脚踏车和踏板车的图片,并决定通过从网络上下载图片来添加未标记的图片集,则会出现这种情况。显然,基于上述的假设,将所有的图片划分到单轮脚踏车或者踏板车上是不现实的。即使进行了重点搜索,也有一些可能来自类似的类别,例如自行车。

通过soft k-means的形式将其软分类到所有的类别上。干扰项可能是有害的,并且会干扰到细化的过程。因为原型向量可能会根据这些干扰项进行错误的调整。一个简单的方式来解决这个问题的方式是添加一个额外的聚类中心,其主要任务就是捕捉干扰项的信息。因此能够阻止这些干扰项对于各个类别聚类的干扰,下面给出具体的定义形式:
p c = { ∑ i h ( x i ) z i , c ∑ i z i , c f o r c = 1 , . . . N 0 f o r c = N + 1 p_c=\left\{ \begin{aligned} \frac{∑_ih(x_i)z_{i,c}}{∑_iz_{i,c}} & & for & &c=1,...N \\ 0 && for && c=N+1 \end{aligned} \right. pc=izi,cih(xi)zi,c0forforc=1,...Nc=N+1
这里我们简单的假设干扰项类初始时拥有一个聚类中心。同时我们考虑引入长度尺度 r c r_c rc来表示类别内部的距离变化。具体的定义形式如下:
z j , c ′ = e x p ( − 1 r c 2 ∣ ∣ x j ′ − p c ∣ ∣ 2 2 − A ( r c ) ) ∑ c ′ e x p ( ( − 1 r c 2 ∣ ∣ x j ′ − p c ′ ∣ ∣ 2 2 − A ( r c ′ ) ) w h e r e   A ( r ) = 1 2 l o g ( 2 π ) + l o g ( π ) z_{j,c}'=\frac{exp(-\frac{1}{r_c^2}||x_j'-p_c||_2^2-A(r_c))}{∑_{c'}exp((-\frac{1}{r_c^2}||x_j'-p_{c'}||_2^2-A(r_{c'}))}\\ \frac{}{}\\ where \ A(r)=\frac{1}{2}log(2π)+log(π) zj,c=cexp((rc21xjpc22A(rc))exp(rc21xjpc22A(rc))where A(r)=21log(2π)+log(π)

在实际的实验中, r 1 , . . . N r_{1,...N} r1,...N为实现设置的分类,干扰聚类为 r N + 1 r_{N+1} rN+1

3.1.3 2 使用soft k-keans和一个Masking的原型网络

通过一个聚类项来对于未标记数据的干扰项进行建模有些过于简单。的确,其与我们的假设,即每一个聚类项反应一个类别是不一致的。因为干扰样本可能很好的覆盖超过一个类别的情况。继续我们上面单板脚踏车和踏步车的例子,我们的web搜索的未标记的数据不仅仅是自行车,还有可能是三人车或者汽车。这也被反应在我们的实验中,我们构建的片段生成过程,因此能够从多个类别中采样干扰项。

为了解决这个问题,我们提出了改进的方法,除了使用高层聚类变体来步骤干扰项信息,我们以对干扰项建模为例,干扰项内部不包含任意合法类原型。这里在未标记中的数据通过引入soft的掩盖机制来完成。在更高的层次,我们希望更接近原型的未标记数据能够被mask的数量要少于更远的。

更具体的,我们修改了soft k-means的细化方式,我们开始计算一个标准化的距离 d j , c ′ d_{j,c}' dj,c,其表示样本 x j ′ x_j' xj和原型 p c p_c pc的距离:
d j , c ′ = d j , c 1 M ∑ j d j , c , w h e r e   d j , c = ∣ ∣ h ( x j ′ − p c ) ∣ ∣ 2 2 d_{j,c}'=\frac{d_{j,c}}{\frac{1}{M}∑_jd_{j,c}},where\ d_{j,c}=||h(x_j'-p_c)||_2^2 dj,c=M1jdj,cdj,cwhere dj,c=h(xjpc)22
然后,我们定义每一个原型的阈值 β c β_c βc和坡值 γ c γ_c γc,通过一个小的神经网络以及原型网络中的各种统计数据来生成,即:
[ β c , γ c ] = M L P ( [ m i n 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 − ) ] ) [β_c,γ_c]=MLP([min_j(d_{j,c}^-),var_j(d_{j,c}^-),skew_j(d_{j,c}^-),kurt_j(d_{j,c}^-)]) [βc,γc]=MLP([minj(dj,c),varj(dj,c),skewj(dj,c),kurtj(dj,c)])
这允许每个阈值使用有关聚类内变化量的信息来确定其应如何删除未标记的样本。
然后,soft mask 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 w h e r e     m j , c = σ ( − γ c ( d j , c − − β c ) ) p_c'=\frac{∑_ih(x_i)z_{i,c}+∑_jh(x_j')z_{j,c}'m_{j,c}}{∑_iz_{i,c}+∑_jz_{j,c}m_{j,c}}\\ \frac{}{}\\ where \ \ \ m_{j,c}=σ(-γ_c(d_{j,c}^--β_c)) pc=izi,c+jzj,cmj,cih(xi)zi,c+jh(xj)zj,cmj,cwhere   mj,c=σ(γc(dj,cβc))
其中σ表示的是sigmoid函数。

4 总结

对于半监督的小样本,作者主要进行了三个方面的扩展,包括简单的支持集扩展,引入干扰项类,mask。其基础是soft k-means方法。基本上都是对于原型向量计算的修改。如果有疑问,建议阅读原文。

5 参考

  1. META-LEARNING FOR SEMI-SUPERVISED FEW-SHOT
    CLASSIFICATION