一般机器学习通过大量样本总结经验训练模型,但很多情况下没有足够的数据用于训练:
小样本学习Few-Shot Learning:通过有限的监督数据训练模型
方法包括数据增强、多任务学习、元学习、生成学习、迁移学习等
一次学习one-shot learning:只有一个训练样例进行学习
如人脸识别系统,每个人只录入一次
有一种办法是,将人的照片放进卷积神经网络中,使用softmax单元来输出4种,或者说5种标签,分别对应这4个人,或者4个都不是,所以softmax里我们会有5种输出。但实际上这样效果并不好,因为如此小的训练集不足以去训练一个稳健的神经网络。而且如果有新人加入,总不能重新训练模型吧
所以要让人脸识别能够做到一次学习,为了能有更好的效果,应该学习Similarity函数。详细地说,神经网络要学习这样一个用d表示的函数,
上述公式以两张图片作为输入,然后输出这两张图片的差异值。如果输入同一个人的两张照片,你希望输出一个很小的值;如果输入两个长相差别很大的人的照片,则希望输出一个很大的值。在识别过程中,一般设置阈值,它是一个超参数。如果d大于阈值,则预测是两个不同的人。这是解决人脸验证的一个可行方法。
要注意这个过程中是如何解决一次学习问题的,只要你能学习这个函数d,通过输入一对图片,它将会告诉你这两张图片是否是同一个人。如果之后有新人加入,只需将他的照片加入数据库,系统依然能照常工作。
函数d的选择和训练是one-shot的关键。如,最简单的分类方式是使用1近邻。只需要计算测试样本与训练集中每个样本的的欧式距离,然后选择最近的一个就可以了。
零次学习zero-shot learning:
首先通过一个例子来引入zero-shot的概念。假设我们已知驴子和马的形态特征,又已知老虎和鬣狗都是又相间条纹的动物,熊猫和企鹅是黑白相间的动物,再次的基础上,我们定义斑马是黑白条纹相间的马科动物。不看任何斑马的照片,仅仅凭借推理,在动物园一众动物中,我们也能够找到斑马。
上述例子中包含了一个推理过程,就是利用过去的知识(已知动物的描述),在脑海中推理出新对象的具体形态,从而能对新对象进行辨认。零次学习就是希望能够模仿人类的这个推理过程,使得计算机具有识别新事物的能力。
以一般的图片分类问题为例:
(1)训练集数据X1及其标签Y1,包含了模型需要学习的类别(马、老虎和熊猫),这里和传统的监督学习中的定义一致;
(2)测试集数据 X2及其标签 Y2,包含了模型需要辨识的类别(斑马),这里和传统的监督学习中也定义一致;
(3)训练集类别的描述 A1,以及测试集类别的描述 A2;我们将每一个类别 Yi,都表示成一个语义向量ai的形式,而这个语义向量的每一个维度都表示一种高级的属性,比如“黑白色”、“有尾巴”、“有羽毛”等等,当这个类别包含这种属性时,那在其维度上被设置为非零值。
存在的问题:
领域漂移问题:斑马和猪都有尾巴,因此在它的类别语义表示中,“有尾巴”这一项都是非0值,但是两者尾巴的视觉特征却相差很远。如果斑马是训练集,而猪是测试集,那么利用斑马训练出来的模型,则很难正确地对猪进行分类。
语义间隔问题:样本的特征往往是视觉特征,比如用深度网络提取到的特征,而语义表示却是非视觉的,这直接反应到数据上其实就是:样本在特征空间中所构成的流型与语义空间中类别构成的流型是不一致的。