zero-shot learning

Zero-shot Learning

参考文献《Zero-Shot Learning with Semantic Output Codes》

背景

在分类问题中,因为数据库大小有限,因此在使用分类模型进行预测时,出现了在训练集没有出现过的类别。举个例子,我们有个小型数据库,里面所含的类别只有人、鸟、汽车,经过我们的训练,发现模型对于这些类别的目标已经有很好的性能了,但是突然出现了一个新的类别——狗,此时模型并不认识这个类别,这也就意味着模型肯定没法对这个新的类别进行新的分类。
这个问题就是一个典型的因训练样本不足而导致的模型出现欠缺的问题,那么该如何缓解这种问题呢?最简单直接的方法就是大量的增加样本,让模型学习更多的类别,但是如果我采集一张新的类别样本的成本太高,或者几乎没法采集到某些类别的样本,此时该怎么办?也就是说如何在数据库有限的情况下,让模型竟可能的容忍新的类别,或者训练集中没有出现过的样本?
上述问题就是一个典型的zero-shot learning问题,zero-shot learning的根本目的就是解决这种类别从未出现在训练集中的情况。

one-shot learning方法

西方谚语中有这么一句话:一只鸟,长得像鸭子,叫声像鸭子,走路也像鸭子,那它就是鸭子!
one-shot learning的想法就很类似于上述思想。传统的类别标签中,人的类别标签就是人,鸟的类别标签就是鸟,或者用更加符合编程的场景来描述,人的标签是1,鸟的标签是2,这些标签本身并不具有很强的描述意义,仅仅是一个符号而已。如果我们不用上面这些符合标签,而采用一些具有语义信息的描述标签,比如我们描述人时,我们不说这是人,我们说这个物体是一种动物,直立行走,食肉,没有尾巴。。。。。通过这些语义描述,我们可以对人这一类别进行属性描述,当语义信息足够多时,那么人这一类别也就会变得独一无二。通过训练就可以将这些属性列表与人相对应。
同理,当出现了新的物体是,虽然我们不知道这些物体是什么,但是我们可以通过上述的属性描述对这一新的物体进行描述,从而避免了无法识别新类别的尴尬情况。

在《Zero-Shot Learning with Semantic Output Codes》中,其将zero-shot learning的形式分为了一下三个部分:

1、语义特征空间

所谓语义特征空间,就是对目标进行一定的语义描述,语义特征空间中是一些语义特征描述向量,假设语义特征空间中一共有5个描述向量,比如是否有毛?是否有尾巴?能不能在水呼吸?是否食肉?是否移动缓慢?那么对于狗狗这种动物而言,其语义描述子就是一个5维向量,即 {1,1,0,1,0}

2、语义知识库

所谓语义知识库就是就是目标的语义描述和目标标签的组合。每个目标都有自己的语义描述向量,类似于上文中狗狗的向量 {1,1,0,1,0} ,同时狗狗还有自己的类别标签,这样一个组语义描述向量和属性标签就是当前动物的知识库。

3、语义输出编码分类器

所谓语义输出编码分类器就是从最远的目标图像到目标属性标签的映射,也就是我们分类问题中所谓的分类器,其作用是对输入目标进行判断,得到其属性标签。这里之所以称之为语义输出编码分类器是因为其结构与语义特征空间相挂钩。定义个所以输出编码分类器 H:XdY 代表将d维的原始输入空间的数据 Xd 映射成一个数据标签集 Y 的标签,这里的 H 由两个函数组成,如下:

H=L(S())S:XdFpL:FpY

上述的这个模型就是一个zero-shot classifier,其首先将原始的d维输入映射到p维的语义特征空间,比如我们将原始的狗狗的图片,映射成如上面描述的语义特征空间,让他变成一个5维的描述向量。最后再从语义特征空间映射到样本的标签。

下图是一个关于熊和狗的语义特征空间描述,以及语义输出编码分类器的预测结果,观察发现预测结果还是很不错的。


zero-shot learning_第1张图片

Tips:
具体的可以参看原文《Zero-Shot Learning with Semantic Output Codes》

你可能感兴趣的:(机器学习,深度学习)