【零样本学习】Zero-shot Recognition via Semantic Embeddings and Knowledge Graphs

Motivation

ZSL问题的关键是从seen class迁移知识到unseen class中。一种方法是利用隐式的知识表示(语义向量)来迁移知识。这种方法从文本数据中学习类别的语义向量表示,然后学习语义空间到视觉空间的映射关系,模型受限于语义模型和映射模型的泛化能力。而且很难从结构化信息中学习语义向量。另一种方法是基于显式的知识库或知识图谱。这种方法显示地将知识表示成类别之间的关系(可以利用这些关系推测unseen class)。最简单的方式是通过组合视觉概念来为unseen class生成分类器。而本文是利用结构化信息和复杂关系来为unseen class生成分类器。(以前的方法是利用图作为约束条件,而本文是利用图直接生成unseen class的分类器)
本文同时利用隐式的知识表示(词向量)和显式的关系(知识图谱)来学习unseen class的分类器。知识图谱的节点用类别的语义向量表示,边是节点之间的关系,利用GCN在不同类别之间迁移信息。(训练了6层的GCN,最后每个节点的输出特征代表这个类别的分类器参数)
我们的方法在ZSL和GZSL场景下都取得了很好的性能。而且,当知识图谱的规模增大时,即使图谱是有噪声的,效果也显著提升。

Method

主要思想:通过GCN学出每一类(category)的分类器参数向量,在pretrained CNN features上进行二分类的预测。

GCN中每个node代表一个category,node对应的特征向量为一个二分类分类器的参数向量,相当于逻辑回归,基于pretrained CNN features分类输入图片是否属于该category。训练GCN时,输入的node特征是每个category的semantic embedding vector,即使某些类没有训练样本,也能得到semantic embedding vector。之后经过6层GCN layer的学习,将semantic embedding vector转换为classifier weight vector,与有ground-truth的某些类的classifier weight vector算loss,经过反传不断优化后,学出没有训练样本的category的classifier weight vector,从而进行zero-shot recognition。

本文同时利用隐式的知识表示(词向量)和显式的关系(知识图谱)来解决ZSL问题。为了提取信息,利用GCN(加上regression loss)来学习分类器。
【零样本学习】Zero-shot Recognition via Semantic Embeddings and Knowledge Graphs_第1张图片
GCN网络的输入是n个类别(包括seen class和unseen class)的语义向量在这里插入图片描述,输出是每个类别的分类器参数在这里插入图片描述
unseen class的分类器参数可以通过预训练好的ConvNet网络得到(作为ground-truth,监督学习GCN参数)。如果ConvNet网络中视觉特征的维度是D,那么每个分类器wi的维度也是D,所以GCN的每个节点的输出维度也是D。在ZSL场景下,用seen class来学习参数,但是unseen class的数量一般很小(通常只有几百个),意味着只有m个seen class来学习GCN网络参数。因此,使用显式的不同类别之间的关系(知识图谱的边)来约束。(这里的知识图谱用的是WordNet知识库)
在训练时,给出seen class的分类器参数(通过预训练好的ConvNet网络得到ground-truth),利用 regression loss来学习GCN参数。于是可以得到unseen class的分类器参数。测试时,先通过预训练好的ConvNet网络提取图像特征再利用得到的分类器进行分类。
regression loss:
在这里插入图片描述
使用了6层GCN网络,激活函数用了LeakyReLU,能够加快regression问题的收敛。训练和测试时,都对分类器参数进行L2归一化,使得分类器参数权重的量级相同。类别的词向量用的GloVe模型,对于某些类别名称里有多个单词的,将平均词向量作为这个类的词向量表示。

Experiment

Experiments on NELL and NEIL
基于NELL 和 NEIL数据集构建知识图谱,NEIL提供图像数据(节点),NELL提供关系(边)。由于NELL数据集是自动构建的,图谱里的边会存在噪声。所以构建子图来进行实验。
【零样本学习】Zero-shot Recognition via Semantic Embeddings and Knowledge Graphs_第2张图片
实验结果表明,基于语义向量和知识图谱的方法比仅仅基于语义向量的方法效果要好很多。而且,当知识图谱的规模更大时,效果更加好。同时,也证明了我们方法能够较好处理知识图谱有噪声的情况。
【零样本学习】Zero-shot Recognition via Semantic Embeddings and Knowledge Graphs_第3张图片
验证方法对知识图谱中缺失部分边时的表现。当随机丢弃 5% ~ 10%的边时,模型性能变化很小,可能是由于知识图谱存在信息冗余,这再次表明,我们的模型对图中的小噪声变化是鲁棒的。但是当丢弃 30%以上的边时,准确率急剧下降,说明模型性能与知识图谱的规模高度相关。
【零样本学习】Zero-shot Recognition via Semantic Embeddings and Knowledge Graphs_第4张图片
为了验证知识图谱的结构也很重要,在star model和 random graph上进行实验。实验结果都接近随机猜测,意味着结构合理的图发挥重要的作用,而随机图对模型有负面影响。
【零样本学习】Zero-shot Recognition via Semantic Embeddings and Knowledge Graphs_第5张图片
随着GCN层数增加,实验性能更好,因为增加GCN的层数实际上是增加了图中节点之间传递消息的次数。但是超过6层时,效果提升不大,可能是以为随着层数增多训练更加困难。
【零样本学习】Zero-shot Recognition via Semantic Embeddings and Knowledge Graphs_第6张图片
验证得到的分类器参数不是复制与它相近的分类器。
【零样本学习】Zero-shot Recognition via Semantic Embeddings and Knowledge Graphs_第7张图片
词向量和分类器的聚类结果不同,表明了我们的GCN方法并不是学习语义向量到分类器的简单映射。

Experiments on WordNet and ImageNet
【零样本学习】Zero-shot Recognition via Semantic Embeddings and Knowledge Graphs_第8张图片
我们的方法性能最好,用ResNet-50比Inception效果更好。ConSE选用何种词向量(glove、word2vec)对ZSL问题影响不大。
【零样本学习】Zero-shot Recognition via Semantic Embeddings and Knowledge Graphs_第9张图片
我们的方法对使用哪种词向量不敏感。
【零样本学习】Zero-shot Recognition via Semantic Embeddings and Knowledge Graphs_第10张图片
在GZSL场景下,我们的方法也好于ConSE,即使ConSE能给出合理的结果,但是偏向于seen class。

你可能感兴趣的:(Zero-Shot)