今天推出一个短篇系列文章,给大家介绍一下Meta Learning元学习。
普通的机器学习目前在学习具体任务的问题上可以达到很好的效果,比如车载场景的意图分类任务(导航,听音乐,查天气,打电话)。如果有足够的高质量的标注数据,可以训练出一个很强的分类模型。 在实际项目中,意图的类别经常会随着需求的变动发生改变,比如在车载场景中新增了【设置日程】的意图。为了保持意图分类的准确率,理想状态下,我们需要新意图类别【设置日程】的大量标注数据来重新训练模型;然而现实情况是,获取大量的标注数据成本很高,当需求频繁变更时,这甚至可以说是不可能完成的任务。
能不能设计一种模型,可以只用少量的数据就可以识别一个新意图,学会一项新任务呢?这就是Meta Learning要讨论的内容。 在系列文章中我们会分享Meta Learning的两类解决方案:
- 基于度量的方法 Metric-Based
- 基于优化的方法 Optimization-Based
本文为系列文章第一篇,主要介绍Meta Learning是什么,以及基于度量的方法中最经典的孪生网络。
什么是Meta Learning
Meta Learning,通常称为“learning to learn”,可以理解为掌握学习的方法。 普通的机器学习通常是让模型学习做一件具体的事,比如分辨车主是否需要导航;而Meta Learning想要让模型学会分辨的方法,可以分辨车主的任意指令。
回想我们从出生到现在的学习生涯,最宝贵的不是学会了什么具体的知识,而是拥有了日益强大的学习能力。小时候的我们在认识了很多小动物以后,假设从来没见过海獭,通过一次动物园的见面甚至是一张海獭的图片,我们就能认识它。一个精通C 的高级程序员,学习Python可以说是非常轻松。
Meta Learning的目标就是让机器学习模型也可以像人一样,拥有学习能力。
Meta Learning的训练思路
怎么样才能让模型拥有学习能力呢,让我们从想要达到的效果入手。 以下图的图像分类任务为例,我们的使用场景是已知一个2分类的训练集,每个类只有4张照片,用这个训练集训练神经网络模型,使模型可以对这2个类别对应的新照片进行准确识别。 (为了展示方便,本文的大部分例子和配图会是图像分类,文本分类的原理是与之相通的。)
2-way 4-shot 图像分类
如果按一般的监督学习思路来训练,一张照片作为一个样本,因为训练样本数过少,模型一定会过拟合。怎样可以让训练样本的数量变多呢,让我们转变一下对样本的定义。 Meta Learning的思路是将这整个2分类图像分类任务作为一个样本。虽然模型没有这2个类别的更多图片,但可以获取到其他类别的大量图片。通过采样,构造许许多多的2分类图像分类任务作为训练样本,从而在任意新的2分类图像分类任务上都可以有良好的表现。 这里的训练样本集为Meta-Train,测试样本集为Meta-Test。 为了避免Meta-Train/Meta-Test和任务样本中的Train/Test混淆,将任务样本中的Train/Test称为Support/Query Set,将Meta-Train/Meta-Test称为Train/Test Set。 这个训练思路在文献中通常被称为Episodic Training,一个任务样本为一个Episode。
Meta Learning的核心思路:一个任务作为一个样本
这里作为样本的任务可以是任何机器学习任务,比如监督学习,非监督学习,强化学习等等。 本系列仅介绍样本为监督学习任务时的情况,即少样本学习(Few-shot Learning)。
基于度量的方法
基于度量的Meta Learning解决方案分三步走:
- 首先是对Support/Query Set中的数据(图片/文本等)进行编码,学习数据的向量表示。
- 对同一个类别内的数据进行归纳,得到类向量。
- 计算Query向量和类向量的相似度(度量),取相似度最高的类,即为分类结果。
基于度量的方法:编码Encode,归纳Induction,相似度Relation
上述的解决方案,使分类不再依赖于固定的类别。 对于任意的新类别,无需重新训练模型。通过编码和归纳得到新类别的类向量,计算出Query和它的相似度。比较Query和所有候选类别对应的相似度分数,从而可以找到与Query最相近的类别。
基于度量的方法可以很好的教会模型分辨数据类别的能力,满足少样本学习的目标。 但是需要注意的一点是,它不需要严格遵守Meta Learning一个任务作为一个样本的训练思路。构造任务样本进行训练通常可以得到更好的效果,但是对于基于度量的方法而言,它不是必须的--比如接下来要介绍的论文。
Siamese Neural Networks for One-shot Image Recognition (Koch, 2015)
这篇论文[1]采用孪生神经网络对图片进行One-shot的识别,即新类别只需要提供一张图片。
论文的训练任务是判断两张图片是否是同一类别的0/1分类。
训练任务
输入是待识别的两张图片,输出是两张图片是同一类别的概率。 若是,概率为1;若不是,概率为0。
孪生网络的模型结构
对于图片数据的编码,论文采用孪生网络的结构。如上图所示,孪生网络指的是两张图片数据输入两个完全相同的神经网络,网络结构相同,并且共享权重参数。 论文中共享参数的孪生网络部分的结构是CNN网络,将CNN网络结构换成BERT,即Sentence-BERT[2]--BERT时代文本语义相似度领域的State-Of-The-Art。
由于文章针对的是One-shot的图像识别,每个新类别只提供一张图片,所以不需要对类别进行归纳,新类别对应的唯一的图片向量即类向量。
Query向量和类向量的相似度的计算取绝对距离(L1距离),即两个向量的差的绝对值。绝对距离可以替换成任何可微分的距离公式。
在进行One-shot识别时,将待识别的Query图片分别与各候选类别的图片一起输入孪生网络模型,得到Query图片与各候选类别图片是否是同一类别的概率,取其中概率最大的类别,即为Query的类别。
One-shot识别
未完待续
本篇给大家介绍了Meta Learning是什么,以及基于度量的方法中经典的孪生网络。下一篇会介绍更多基于度量的方法,敬请期待。
参考资料
[1]
Siamese Neural Networks for One-shot Image Recognition: http://www.cs.toronto.edu/~gkoch/files/msc-thesis.pdf
[2]
Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks: https://arxiv.org/pdf/1908.10084.pdf