问题提出:

在用神经网络训练一个多分类的模型后,测试时如果存在一个不属于样本中的已知类别时,如何归为一个新的类别?

解决方法:

把多分类问题转化为多个二分类问题,然后设定预测概率超过比如0.8的时候判定为某个类别否则判定为其它类,这样就可以解决问题了,位置类别没有达到预先设定的阈值所以没有被判定为任何类别。

        以上用的方法就涉及到了,one/zero-shot learning, one/zero-shot learning都是用来进行分类的算法,是迁移学习的两种极端形式。

参考:什么是 One/zero-shot learning? - 知乎

一、zero-shot learning(零样本学习)

参考:(转)零次学习(Zero-Shot Learning)入门_tianguiyuyu的博客-CSDN博客_hubness

1.1、定义

  zero-shot learning顾名思义即是对某(些)类别完全不提供训练样本,也就是说没有标注样本的迁移任务被称为零次学习。zero-shot learning是为了能够识别在测试中出现,但是在训练中没有遇到过的数据类别,可以说是迁移学习。

  zero-shot learning指的是我们之前没有这个类别的训练样本,但是我们可以学习到一个映射X->Y。如果这个映射足够好的话,我们就可以处理没有看到的类了,比如我们在训练的时候没有看到过狮子的图片,但是我们可以用这个映射知道狮子的特征,一个好的狮子特征,可能和猫、老虎比较接近,但是和汽车、飞机就比较远离,也就是说给一张没有看到过的图片,我们可以说出它的特征,和谁相像。

1.2、举例

  举个例子,识别一张猫的图片,但在训练时没有训练到猫的图片和对应猫的标签,那么我们可以通过比较这张猫的图片和我们训练过程中的那些图片相近,进而找到这些图片的标签,再通过这些相近的标签去找到猫的标签,就是有迁移性。

  在传统的分类模型中,为了解决多分类问题(例如三个类别:猪、猫、狗),就需要提供大量的猪、猫和狗的图片用来模型训练,然后给定一张新的图片,就能判定这个属于猪、猫和狗中的哪个类别,但是对于训练图片中未出现的类别(比如牛),这个模型便无法识别出来,则zero-shot learning应运而生,能解决这种问题。也就是说,在zero-shot learning中,某一类别在训练样本中未出现,但是我们知道这个类别的特征,然后通过语料知识库,便可以将这个类别识别出来。

  零次学习情景的文本例子,学习器已经读取了大量文本,接着要解决对象识别的问题,。如果文本足够好的描述了对象,那么即使没有看到某对象的图像,也能识别出该对象的类别。例如给猫有四条腿和尖尖的耳朵,那么学习器可以在没有见过猫的情况下猜测图像中是猫。

1.3、理论基础

  zero-shot learning(零样本学习)的一个重要理论基础就是利用高维语义特征代替样本的低维特征,使得训练出来的模型具有迁移性 。语义向量就是高维语义特征,比如一个物体的高维语义特征是“四条腿,有尾巴,会汪汪叫,宠物的一种”,那我们可以判断它是狗,高维语义对它没有细节描述,但是能够很好的分类,分类是我们的目的,所以可以舍去低维特征来达到分类的目的,不需要全面。

二、one-shot learning(一次学习)

参考:One-Shot Learning - 简书

2.1、定义

  one-shot learning顾名思义即是对某(些)类别只提供一个或者少量的训练样本,也就是说只有一个标注样本的迁移任务被称为一次学习。one-shot learning指的是我们在训练样本很少,甚至只有一个的情况下,依旧能做预测。主要的要点就在于学到好的X->Y的映射关系,然后应用到其他问题上。

2.2、可用性

  因为第一阶段学习出的表示就可以清楚地分离出潜在的类别,所以一次学习是有可能的。在迁移学习阶段,仅需要一个标注样本来推断表示空间中聚集子相同点周围许多可能测试样本的标签。这使得在学成的表示空间中,对应于不变性的变化因子已经与其他因子完全分离,在区分某些类别的对象时,我么可以学习到哪些因素具有决定意义。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐