一定要看完,一定要看完,一定要看完,重要的事情说三遍!!!首先申明本人并不是在研究这个领域有着深入研究的“专家”,如果文中有讲解不对的地方,还请各位大佬留言批评指正。
当我看完 《Generalizing from a few examples: A survey on few-shot learning》 这篇文章的时候,我对于机器学习又有了一种新的认知,与其说它让我理解了什么是Few-shot learning,不如说它让我明白了如何更好地处理机器学习问题,不论是科研还是在实际应用当中(可以说是所有其它模型算法),都可以从文章指出的三个角度去考虑:数据、模型、算法。有人也许会说,是个人都知道从这三个角度去入手,问题是怎么样从这三个角度入手,依据是什么,做什么改进,文章对于少样本场景下解释的非常清晰,我认为思考问题的思维方式和角度很重要!!!
什么是Few-shot learning
1)符号定义
给定一个任务 ,以及由训练集 ( 的数量很少)和测试集 组成的数据集, 是数据的真实分布,而FSL就是要通过训练数据 去训练拟合出这个真实分布,也就是最优假设 。为了得到最优的假设 ,FSL定义了一个关于参数 的假设空间 ,即 ,这里使用参数化模型 ,因为非参数模型通常需要大量数据集,因此不适合FSL。FSL算法是一个最优化搜索策略算法,目的是在假设空间 中找到一个最接近 的假设 ,FSL的模型性能可以由损失函数来表示,在这里 是由你选择的模型和参数的初始化分布决定的,而 的寻找过程其实就是一个优化过程,而通常的优化方法就是梯度下降。
2)问题描述
前面描述的FSL过程本质上就是一个机器学习过程,那自然FSL符合机器学习的一些性质,我们先来看下关于机器学习任务的定义:
Machine Learning: 在经典的机器学习中,给定一个任务 ,任务的性能 ,给定一些额外的条件 ,可以提升任务 的性能 。举例:图像分类任务 ,Machine Learning通过对大量带有标注的图像进行训练得到 ,从而提高分类准确率 。Table 1 给出了一个图像分类和Alpha Go强化学习的例子:
Few-Shot Learning:FSL是机器学习的一个特例,定义和Machine Learning一样,只不过它的目标是在 训练集只提供的少量监督样本信息( )的情况下获得良好的学习性能。现有的FSL问题主要是监督学习问题,具体来说,few-shot分类法学习的是在只给出每个类仅有少量标签数据的情况下的分类器。Table 2 列举了三个不同的任务,具体任务可以查看相关文献,值得注意的是,Few-Shot Learning相比于一般的Machine Learning在条件 上除了是few data之外,还需要引入一些先验知识,自然而然,如何将先验知识嵌入进模型之中成了优化的关键。
注:当
中只有一个带有监督信息的例子时,FSL称为one-shot learning,当E不包含任何对目标 任务
有监督信息的例子时,FSL就成为zero-shot learning (ZSL),由于目标类不包含有监督信息的示例,所以ZSL要求
包含来自其他形式的信息(如属性、WordNet等),从而传递一些监督信息,使学习成为可能。
核 心 问 题
我认为这篇综述最出彩的地方就在这里,文章从机器学习期望风险最小化的角度去思考问题,并尝试在少样本的情况下,如何降低这种风险,我们先来大致回顾一下期望风险。(以下分析适用于包括分类和回归在内的FSL监督学习,也可以为理解FSL强化学习提供见解。)
在机器学习中寻找最适合的假设时通常都是通过找到一组最优的参数来确定这个假设,并通过给定的训练集下期望风险最小化这一目标来指示最优参数的搜索,期望风险如下所示:
其中 数据的真实分布, 为损失函数,但由于真实分布往往不太容易知道,因此我们常常用经验风险来代替期望风险,经验风险就是在训练集上预测的结果和真实结果的差异,也是我们常说的损失函数的期望,表达式如下: 因此,我们可以得到这样几个假设:
是期望风险最小化的最优解,可以理解为百分百没有误差的解,不需要知道假设空间,同时已知所有的数据样本,显然,这个是办不到的。
是在假设空间 下期望风险最小化的最优解。显然,这个解相对于 存在一定的误差。
是在假设空间 下经验风险最小化的最优解。显然,这个解相对于 还存在一定的误差。
根据机器学习中的error分解可得:
等式右边第一项表示的是假设空间
解 决 方 法
一、Data
使用弱监督或者无监督的数据集
使用一些无监督或者弱监督的数据集,并在few data上training过的模型(比如SVM等简单的分类模型)进行预测,形成“有监督”的数据集,以此来扩充数据集。
对原始数据集进行数据增强
使用一些数据增强的手段,对数据进行扩增,比如图像的几何变换或者其它一些数据转换的方式用于数据增强等等。
增加一些相似的数据集(比如数据聚合生成)
该策略通过从相似但数量较大的数据集中聚合和调整输入-输出对来扩充数据集。聚合权值通常基于样本之间的某种相似性度量。
二、Model
在FSL问题上,如果假设空间太大,很难找到最优的
1. 多任务学习(Multitask learning)
多任务学习方法的主要作用是通过多任务模型参数共享的方式,压缩在few-shot task任务上模型的假设空间,主要的做法有Parameter Sharing和Parameter Tying两种方式。
Parameter Sharing(可以是数据相同任务不同,也可以是数据和任务都不同,但是数据具有领域性等等)
例如利用同领域内的其它数据做task(通常这些数据会比较多),在做Multitask learning的时候,不同task之间共享相关层的参数,而在task-specific层和classification层对于特定的任务不做共享,这样做就能利用先验知识缩小假设空间。
Parameter Tying
参数绑定是指不同任务之间的参数具有相似性,而不是共享,这种相似性可以通过两两间参数正则的方式加以保证,如下图所示,通过保证
2. Embedding Learning
Embedding Learning主要是将原始数据压缩至一个更小的低维空间,以此换来一个更小的解空间。所以Embedding Learning方法的关键在于如何构建一个数据集的Embedding低维空间,主要有以下三种方法。
Task-Specific Embedding Model
Task-Specific Embedding Model是只在few shot任务数据上进行训练,训练时通过组合的方式构造不同的成对样本,输入网络训练,在上层网络通过计算样本对的距离判断是否属于同一类,并生成对应的概率分布,测试时,网络处理Query set和Support set集之间的每一个样本对,最终预测结果为Support set上预测概率最高的类别。代表网络是siamese network(说明:如果我们将一个测试集看做是一个task,而这个task中有训练集和测试集,这个时候的训练集和测试集分别是Support set和Query set)。
Task-Invariant Embedding Model
Task-Invariant Embedding Model则是先在大规模相似数据集中学习一个通用的embeddingfunction,然后在测试的时候直接用于当前任务的训练集(few shot training set)和测试集(test example set)嵌入,并做相似性判别。代表网络有Match network。
Hybrid Embedding Model
尽管Task-Invariant Embedding Model可以应用于新任务,且计算成本较低,但它们不利用当前任务的特定知识,并且当特定任务的样本非常少的时候,只利用Task-Invariant Embedding不太合适。为了缓解这个问题,混合嵌入模型(Hybrid Embedding Model)通过
3. Learning with External Memory
Learning with External Memory是从训练样本
4. Generative Modeling
生成式建模方法利用先验知识估计观测样本的概率分布
三、算法
在机器学习中我们通常使用SGD以及它的变体,如ADAM,RMSProp等来更新参数,寻找最优的参数,对应到假设空间中最优的假设。这种方式在有大量的数据集的情况下可以用来慢慢迭代更新寻找最优参数,但是在FSL任务中,样本数量很少,这种方法就失效了。
假如模型能根据先验知识初始化模型参数,这样在算法优化或许只需要在少量数据集的情况下就能找到最优解,下面提供三种初始化模型参数的方法。
1. 提供预训练初始化参数
该方法大家都比较熟悉,最常见的就是引入pretrain model,然后在新的task上进行fine-tune。
2. 基于meta learning的方式更新参数
关于meta-learning,和我们比较熟悉的machine learning相比,通常machine learning是根据训练数据,让机器学习到一个功能函数
通常情况,machine learning我们只需要准备好某个任务的训练集和测试集就可以,meta-learning我们也需要准备一个训练集和测试集,但是这里的训练集和测试集都是由一个个的task组成,且每个task都有各自的训练集(Support set)和测试集(Query set),因为machine learning的目的是让机器学习学习的能力,因此我们的测试集应该是一个新的task,而这个task需要机器能自动的去学习出一个功能函数function,以适应具体任务的需要。
那在这里,怎么将meta learning和few shot learning联系起来呢?
few shot learning需要将先验知识嵌入进模型中去,使得最优化算法在搜索的时候,能缩小搜索空间,或者是达到快速搜索的目的,这就需要模型能有一个较好的初始化参数,而这个较好的初始化参数就是需要通过meta learning的方式训练得到。这里简单介绍一下machine learning领域内的经典模型:MAML。该模型利用meta learning学习一个好的初始化参数,之后在新的任务上,只要对这个初始化参数少量迭代更新就能很好的适应新的任务。
假设模型的初始化参数为
为了更清晰的表示训练流程,这里我展示一下李宏毅老师关于meta learning的讲解示意图。需要说明的是,这一步通常是先遍历每个task,求出每个task下的梯度并缓存起来,最后更新整个初始化参数
我们回头再来看few shot learning,few shot learning是在小样本训练集上训练一个最优的模型,如果我们先用meta learning的方式在不同的相似task任务上对模型进行training,以此获得一个较优的初始化参数
3. 学习出好的搜索优化器
前一节使用meta learning来获得一个较好的初始化参数,而本节旨在用meta learning来学习一个参数更新的策略。通常情况下,梯度更新方式为
总 结
文章在少样本情况下,对于如何利用先验知识,找到假设空间中的最优解,训练出一个好的模型的方法描述的很清楚、很清晰,是值得反复品味的综述性好文。文章根据机器学习误差理论,先后从数据、模型、算法三个角度进行不同层次的先验知识嵌入,总体上来说就是如何利用相似且较大的数据集,如何初始化一个好的模型参数,以及如何找到一个好的优化策略,不光是在few shot learning 领域内可以这样思考,其实我们在实际科研和工作中遇到类似的问题,也可以从这三个方面去考虑,就拿我们非常熟悉的BERT预训练语言模型,难道不就是这个道理吗?
参考文献
[1] Wang, Yaqing, et al. "Generalizing from a few examples: A survey on few-shot learning." ACM Computing Surveys (CSUR) 53.3 (2020): 1-34.
[2] https://www.cnblogs.com/jiangxinyang/p/12163215.html FSL(小样本学习)综述
[3] Finn C, Abbeel P, Levine S. Model-agnostic meta-learning for fast adaptation of deep networks[C]//International Conference on Machine Learning. PMLR, 2017: 1126-1135.
[4] Andrychowicz, Marcin, et al. "Learning to learn by gradient descent by gradient descent." arXiv preprint arXiv:1606.04474 (2016).
[5] https://blog.csdn.net/senius/article/details/84483329 Learning to learn by gradient descent by gradient descent - PyTorch实践
往期精彩回顾
适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载机器学习的数学基础专辑
本站qq群704220115,加入微信群请扫码: