零样本学习的一些相关概念
零样本学习概念
注1:为了方便,文中已知类别(标签)都指训练集中出现的类别,未知类别标签指测试集中出现的新类别。
注2:特征空间指样本的原始信息(即x)所在的空间,语义空间类别描述信息所在空间,已知类别和未知类别在语义空间中被联系起来。(将可见和不可见通过语义空间联系起来)
文中用到的公式符号含义如下图所示:
零样本学习概念
零样本学习属于迁移学习,是迁移学习的一个子领域,迁移学习可以分为同质迁移学习和不同质迁移学习,前者两个域的特征空间和标签空间都相同,后者特征空间和标签空间不同,因为零样本学习的特征空间相同,但是源领域的标签空间(seen class)已知,目标领域的标签空间(unseen class)未知,所以零样本学习属于不同质的迁移学习,零样本学习就是:在测试集中,有的类别不在训练集中,利用训练集的样本训练一个模型, 使之应用到测试集能正确识别那些在训练集不存在的标签。
额外信息
因为零样本学习的特殊性,即测试集中包含训练集中不存在的类别,所以零样本学习需要引入一些额外信息,这些额外信息通常是对所有类别(包括已有类别和未知类别)的描述,由于这些描述通常是语义层面的,所以额外信息组成的空间又叫语义空间,而原始样本组成的空间称为特征空间。
语义空间:对所有类别(已知类别和未知类别)的描述。
语义空间
根据语义空间如何构建,可以把语义空间分为手工语义空间和学习得到的语义空间,分类如下图所示:
手工语义空间
手工语义空间即人们手动构造的一些关于类别的额外信息,主要分为属性空间、词法空间、文本关键词空间。
属性空间即找到关于类别的一些属性,基于这些属性值构建语义向量。如在动物识别中,动物类别的属性也可以包括**:毛色、速度、体积等。通过手动构造这些属性和属性值**,得到类别的语义向量,其中每一维都是一个属性值。
词法空间即语义空间由类别的一些词法信息构成,这些词法信息可以来自一些泛化知识库如WordNet,或者来自一些针对特定问题的词法分析工具,如依存树。或者来自一些大型的语料,利用在语料中类别的共现关系,具体构造方法有很多:比如利用类别在WordNet中的父子关系,类别语义向量的每一维代表一个类别,如果是父子关系类别,则相应的位置置1.
文本关键词空间即从类别描述信息中抽取出关键词构成语义空间,可以采用:tf-idf、Bag of words等技术得到。
手工语义空间优点是可解释好、灵活i性高,缺点是需要手工制造,费时费力,并且由于手工构造的局限性导致语义信息丢失。
构造方法:属性空间、词法空间、文本关键词空间等。
学习得到的语义空间
学习得到的语义空间不是手工构造的,而是通过其他机器学习模型训练得到的,这些语义向量可以是针对其他任务预训练好的,也可以专门针对那些零样本学习训练得到的,语义向量每一维没有实际的意义,整个语义向量代表了这个类别的信息。
学习得到的语义空间包括标签向量空间,文本向量空间、图像表示空间等。
- 标签向量空间:
通过类似于词向量的方式得到每个标签的向量表示,常用的技术有word2vec、glove等。核心思想:具有相似含义的标签具有相似的语义向量。 - 文本向量空间
类似于标签向量空间,只不过其对标签描述信息进行向量化,把标签的描述信息输入到预训练好的模型中,输出向量即可以表示为这个标签的语义信息。 - 图像表示空间
把某种类别对应的图像作为描述信息,输入到预训练模型如GoogleLeNet,得到的输出向量做这个标签的语义信息。
学习得到的语义空间就是节省了人力、依赖机器学习模型可以捕捉到更多的语义信息,缺点是语义向量含义是隐式的,不利于分析。
(标签向量空间、文本向量空间、图像表示空间)
直推式学习和归纳式学习
直推式学习和归纳学习是机器学习的基本概念,按直推式学习和归纳式学习的程度,零样本可以分为如下图所示方式:
在训练过程中,如果使用了测试集中的样本,则称为实例直推式,否则称为实例归纳式,如果用到了未知类别的描述信息,则称为类别直推式,否则称为类别归纳式。所以按上述进行分类,零样本的学习过程可以分为上图所示三种:训练过程中利用的信息越多,可能会过拟合,越少可能欠拟合。甚至导致领域漂移,所谓领域票移指的是源领域和目标领域数据差别太大,比如说:已有类别是家具,未知类别是动物,这种情形下采用传统的零样本学习也达不到很好的效果,因为很难根据类别相似来识别新类别。
零样本学习方法的分类
零样本学习可以分为两大类,基于分类器的方法和基于实例的方法,基于分类器的方法主要致力于直接学习到一个用于未知类别的分类模型。是一个改进模型的方法,从模型入手,不改变训练数据,而基于实例的方法主要致力于未知类别构造样本,然后利用这些构造样本去训练一个分类器,是一个改进数据的方法。从改变训练数据入手, 让训练数据包含那些未知样本,这样训练出的模型就能够正确分类未知样本啦。
整个分类如下图所示:
基于分类器的方法
根据分类器的构造方法,基于分类器的零样本学习又可分为映射方法,关系方法和组合方法。
首先需要说明的是,基于分类器的方法的主要思想:它是基于**“1对多”的方式来训练N个分类器**(想想为什么要多个分类器,而不是一个?),N为类别的数量,即它为每个类别单独训练一个分类器,每次训练的时候用属于当前待识别类别的样本做为正样本,其他所有样本做为负样本。
因为测试集中的有些类别不在训练集中,所以直接用训练集训练一个分类器,用在测试集上效果会很差。基于分类器方法的主要思想是利用额外知识----类别描述信息(语义空间),具有相似类别描述信息的类别,其分类器也比较相似。比如驴和马,它们之间的类别描述信息很相似,则用驴构成的训练集训练一个二分类模型f来判断样本是否属于驴,则这个二分类模型f利用到马构加粗样式成的测试集上效果也不会很差:用1表示属于(驴)马,0表示不属于(驴)马,则f在驴数据集上训练时**,分类器输出越接近1则越有信息认为它是一头驴**,越接近0则相反;把训练好的f用到马数据集上分类马时,因为马和驴很相似,所以分类器的输出和在驴数据集上的输出相似,于是也大概率能正确分类出马。但是我们不可能只给训练集中出现的类别各自训练一个分类器,因为这样还是无法分类测试集中的具有新类别的样本(因为测试集中的新种类可能有多个,你不知道这个测试样本属于新种类还是训练集中的种类,如果是新种类你也不知道是哪个新种类),所以需要对每个类别(包括已知类别和未知类别)都构建一个二分类器,这样对于每个测试样本,可以采取**“依次带入这些分类器取概率最高的类别做为它的类别**”。通过上述分析我们知道,马和驴的分类器参数应该是相似的,现在的问题是**,模型事先并不知道马和驴是相似的**,所以也就不知道让马和驴的分类器参数相似,所以这时就需要额外信息的加入。通过加入类别描述信息,模型知道了马和驴相似,于是把马的分类器参数训练得和驴相似,也就得到了新类别马的分类器模型。
有了上面的主要思想,则要做的就是如何把类别的描述信息加入模型,被模型所感知和利用?于是有了以下的各种方法。
映射方法
首先针对训练集中的每个类别训练一个二分类器 f i f_i fi,得到识别每个类别所需要分类器参数 w i w_i wi.
- 用训练集中每个类别的描述信息 t i t_i ti作为输入, w i w_i wi作为一个标签训练一个模型 φ \varphi φ,得到模型中间参数 ζ \zeta ζ,这个模型 φ \varphi φ即为映射函数,其作用是求出每一种类别对应的分类器的参数,求出映射函数 φ \varphi φ后,对于每个未知类别,用其描述信息 t j t_j tj作为输入,输入到 φ \varphi φ,就可以得到相应的类别分类器参数 w j w_j wj, 即得到了新类别的分类器参数,基于的思想正是具有相似描述信息的类别,它们的分类器参数也相似。
在测试阶段,对于每个测试样本,带入到每个类别的分类器中,取概率最大的类别作为它的类别。
上述方法是一个最基础的方法,现在研究大多基于以上思想进行了改进,比如上述方法中,类别分类器和映射函数是分开学习的,一个改进的思想是让分类器和映射函数联合学习,以便它们之间彼此促进,这种方法损失函数如下所示:
上述方法只使用了训练样本和训练样本类别的描述信息,而没有使用测试样本和测试样本类别的描述信息,根据前文直推式学习和归案式学习对零样本学习分类,训练过程中也可以使用测试样本和测试样本类别的描述信息,这里不再详细展开。
关系方法
关系方式主要借助于类别之间的关系来构建模型。其核心思想和映射方法一样,即相似的类别描述信息,其类别分类器也相似。
它的过程如下:
(1)利用训练集中的样本和标签,对训练集中出现的每个类别训练一个二分类器。
(2)对于测试集中每个新类别,通过对已有类别二分类器加权平均的方式,得到新类别的分类器。即
其中
δ
(
c
i
u
,
c
i
s
)
\delta(c^u_i,c^s_i)
δ(ciu,cis)为新类别
C
i
u
C^u_i
Ciu和训练集中的类别
C
i
s
C^s_i
Cis之间的相似度,作为类别
C
i
s
C^s_i
Cis的分类器权重,把所有已知类别分类器加权平均,即为未知类别分类器。
类别之间的关系 (相似度)有多种计算方法,比如计算它们描述信息的余弦相似度,或者了利用WordNet中的两个类别 之间的结构关系,类别分类器的选择可以与未知类别关系最密切(相似度最高),的**
K
K
K个类别加权平均**。
训练的时候也可以加入未知类别信息,一些工作已已知类别和未知类别为节点在语义空间中构建一个关系图,图的边权重为类别之间的关系。然后在图上学习类别的二分类器。
组合方法
有点类似贝叶斯公式,具体细节需要阅读这方面的论文,在此省略。
基于实例的方法
基于实例的方法从数据入手,为那些训练集中没有出现过的类别构造样本,然后把这些样本加入训练集训练一个分类器或进行聚类(KNN)。根据这些样本是如何构造的,基于实例的方法可分为拟合方法,借助其他实例方法和合成方法。
拟合方法
拟合方法基本思想是:类别描述信息可以被当做样本标签看待(构造新实例),首先,通过拟合函数将样本
x
i
x_i
xi和类别描述信息
t
j
t_j
tj拟合到一个同一空间P:
语义空间作为拟合空间
语义空间作为拟合空间,这种设置下类别描述信息
t
j
t_j
tj不用改变,只通过拟合函数
θ
\theta
θ将样本
x
i
x_i
xi拟合到语义空间 损失函数为:
枢纽度问题
使用语义空间做拟合空间并且使用回归函数做拟合函数时,会产生枢纽度问题。在拟合空间P中,一些类别描述信息是很多样本的最近邻,而这些样本实际上类别并不相同,这个描述信息就被称为"枢纽(hubs)“,这种现象称为"枢纽度问题(hubness)”。
一些工作为了解决枢纽度问题,采用其他损失函数如rank loss或采用不同的距离度量函数如余弦相似度等。
特征空间作为拟合空间
特征空间作为拟合空间,即通过拟合函数
ζ
\zeta
ζ,将类别描述信息
t
j
t_j
tj拟合到特征空间,而样本特征
x
i
x_i
xi不用改变,损失函数为:
损失函数主要思想是和语义空间做拟合空间一样,这里不再赘述,把特征空间做拟合空间缓解了枢纽度问题。
其他
还有一些其他方法既不使用语义空间做拟合空间,也不使用特征空间做拟合空间,而是使用一些其他的空间甚至多个空间。具体可以参考一些相关论文。
借助其他实例方法
合成方法
合成方法通过一些生成模型来生成未知类别的样本。未知类别的样本假设服从某些分布,比如高斯分布或均匀分布,首先求出已知类别的分布参数,然后根据未知类别描述信息和已知类别描述信息的关系求出未知类别的关系分布(比如对于高斯分布,参数是均值和方差)。有了未知类别样本的分布,就可以根据生成模型生成一些样本。生成模型比如generative mo-ment matching network (GMMN), denoising autoencoder, adversarial autoencoder, conditional variational autoencoder-based architecture, generative adversarial networks (GAN)等。生成模型的输入通常是未知类别描述信息和符合某一分布的噪音。
零样本学习方法比较
学习心得
会自己通过建模来进行零样本的学习与收入。
未来研究方向
-
一.样本的一些特性
样本的一些特性没有用到。比如图像物体识别,除了图像本身**,物体的其他方面的特征也可以用上**;一些多模态的数据;时间序列的特点等。 -
二.训练数据的选择
(1)现有的零样本学习,训练集和测试集往往是同一种类型,比如都是图片,或都是文字。实际上训练集和测试集的数据所对应的类别可以不在同一个语义空间,比如训练集是物体图片,测试集是场景图片。甚至训练集和测试集的实例都不相同,比如训练集是音频,测试集是图片。有些语义类型的数据很容易得到,而有的不容易得到,所以尝试一下异构零样本学习也是很有必要的。(异构零样本学习)
(2)通过主动学习挑选训练数据。可以减轻标注压力 -
三.额外信息的选择和保持
额外信息不仅仅是在语义空间,也可以使用其他类型的语义信息。比如属性空间(attribute space),也有研究不适用语义空间,而使用人工构造的类别相似度信息。
加粗样式得到额外信息后,如何在训练中保持这些额外信息也很重要,即使这些信息在训练过程中不丢失,不改变。因为当只学习样本分类器的时候,额外信息就很容易丢失。有些工作加入了重构模块,以尽大可能使额外信息在训练中保持。
- 四.更加实际和更加针对于特定任务的问题设置
(1)在现实生活中,测试集中往往即包括训练集中出现的类别,也包括未出现的类别,这种问题设置称为广义零样本学习(generalized zero-shot learning)。在这种问题设置下,模型的效果要比零样本学习差很多,所以有很大改进的地方。
(2)针对不同的任务设置不同的零样本学习方法。
理论研究
现有方法大多是一些启发式的,并没有严格的证明。比如(1)如何选择额外信息(2)哪些来自训练样本的信息对测试样本分类有帮助?(3)如何阻止无关信息迁移和负迁移?
与其他学习方法相结合。
比如zero-shot和few-shot相结合;与机器学习方法相结合,比如零样本学习可以做为主动学习之前的步骤来加强主动学习的效果等等。