摘自: https://research.aimultiple.com/few-shot-learning/
论文 :A Survey on Few-Shot Learning: https://arxiv.org/abs/1904.05046
wss介绍视频:https://www.youtube.com/c/ShusenWang
课件:https://github.com/wangshusen/DeepLearning
如果手机需要成千上万张照片来训练才能进行人脸识别解锁,这是很不友好的。在机器学习应用领域,小样本学习(Few-shot Learning)(在刚刚描述的情况下称为单样本学习(one-shot learning))是一个热门话题,它能够基于少量的训练样本去预测。本文将讨论以下几个方面:
- 什么是少样本学习(FSL)?
- 它为什么如此重要?
- 少样本学习有哪些应用?
- 它是如何工作的?
- 少样本学习和零样本学习有什么区别?
- 少样本学习有哪些不同的方法?
- 它是如何在 Python 中实现的?
- 机器学习的未来
case:以相似度函数来进行图片分类:
训练:可以在大规模数据集中学习不同类别的相似性,使得同一类的相似度高,不同类别相似度低。
测试:输入query(测试图片)和 surport set(带标签的图片,要进行比较的不同类别的数据集不等于训练集)目的就是要让模型识别query和 surport set 中那个更相似。
1. 什么是小样本学习?
小样本学习(Few-shot learning, FSL),在少数资料中也被称为low-shot learning(LSL)。小样本学习是一种训练数据集包含有限信息的机器学习问题。
对于机器学习应用来说,通常的做法是提供尽可能多的数据。这是因为在大多数机器学习应用中,输入更多的数据训练能使模型的预测效果更好。然而,小样本学习的目标是使用数量较少的训练集来构建准确的机器学习模型。由于输入数据的维度是一个决定资源消耗成本(如,时间成本,计算成本等)的因素,我们可以通过使用小样本学习来降低数据分析/机器学习消耗成本。
2. 小样本学习为什么重要 ?
- 类似人的学习方式:人在看过少量例子后就可以认出手写字符之间的不同。然而,计算机需要大量的数据去“分类”它看到的东西,并识别出手写字符之间的不同。小样本学习是一种test base的方法,我们期望它能像人一样从少量的样本中学习。
- 稀有样本学习:小样本学习能用于稀有样本的学习。例如,当对动物图片进行分类时,用小样本学习训练的机器学习模型,在只得到少量的先验信息后,可以正确地对稀有样本的图像进行分类。
- 降低数据收集和计算成本:由于小样本学习仅需要少量的数据来训练模型,消除了数据收集和标记相关的高成本。训练数据量少意味着训练数据集的维数低,这可以显着降低计算成本。
3. 小样本学习(Few-shot Learning)和零样本学习(Zero-shot Learning)的区别
小样本学习的目的是在有少量训练数据的情况下能获得准确分类测试样本的模型。零样本学习的目的是预测训练数据集中没有出现过的类别。零样本学习和小样本学习有很多共同的应用,例如:
- 图像分类(image classification)
- 语义分割(semantic segmentation)
- 图像生成(image generation)
- 目标检测(object detection)
- 自然语言处理(natural language processing)
还有一种叫单样本学习(one-shot learning)的,它经常会和零样本学习混在一起。单样本学习是小样本学习问题的一个特例,它的目的是从一个训练样本或图片中学习到有关物体类别的信息。单样本学习的一个例子是,智能手机中使用的人脸识别技术。
4. 小样本学习的方法
- 关于相似性的先验知识:机器学习模型在训练数据(可以是在大规模数据集)中学习模式(patterns),这些模式倾向于分离不同的类,即使是没有见过的数据。传统机器学习模型不能分出没有在训练数据集中出现过的类。然而,对于小样本学习技术,它能使机器学习模型对没有在训练集中出现的类别进行分类。
- 二分类判别
- 孪生网络(Siamese Networks)。 Python实现代码:https://github.com/tensorfreitas/Siamese-Networks-for-One-Shot-Learning
- 多分类判别
- 关于学习的先验知识:机器学习模型利用先验知识约束学习算法,从少量的样本中选择泛化良好的参数。
- 在小样本学习中用于超参数调整的技术有:
- MAML(Model-agnostic Meta-learning)。 Python实现代码:https://github.com/cbfinn/maml
- FOMAML(First-order Model-agnostic Meta-learning)。 Python实现代码:https://github.com/samringer/FOMAML/blob/master/SineWave.ipynb
- Reptile。 Python实现代码:https://github.com/openai/supervised-reptile
- 学习更新规则也可以使小数据集获得良好性能:
- LSTMs。 Python实现代码:https://github.com/twitter/meta-learning-lstm
- 强化学习(Reinforcement learning)。 Python实现代码:https://github.com/dennybritz/reinforcement-learning
- Optimization rules。 Python实现代码:https://github.com/mogolola/neural_optimizer_search
- 序列方法使用整个数据集和测试示例,并预测测试样本标签的值:
- 关于数据的先验知识:机器学习模型利用了关于数据的结构和可变性的先验知识,这使得可以从很少的例子中构建可行的模型。
- 生成模型:
- Pen-stroke models。Python实现代码:https://github.com/brendenlake/omniglot
- Neural statistician。Python实现代码:https://github.com/conormdurkan/neural-statistician
- 合成新的训练集样本:
- Analogies (Facebook AI Research)。Python实现代码:https://github.com/facebookresearch/low-shot-shrink-hallucinate
- End-to-end。Python实现代码:https://github.com/yjxiong/temporal-segment-networks
5. 小样本学习的应用
5.1 计算机视觉:计算机视觉探索如何从数字图像或视频中获得高级理解。小样本学习在计算机视觉中主要用于处理以下问题:
- 字符识别-Character recognition。NIPS 2016:Learning feed-forward one-shot learners
- 图像分类-Image classification。ICML 2017:Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks
- 物体识别-Object recognition。NIPS*
- 其他图像应用:
- 图像检索-image retrieval。NIPS**
- 目标跟踪-object tracking。NIPS***
- 图像中特定物体计数-specific object counting in images。ECCV
- 场景位置识别-scene location recognition。IEEE
- 手势识别-gesture recognition。Oxford
- part labeling。IEEE*
- 图像生成-image generation。NIPS****
- 三维物体的形状视图重建-shape view reconstruction for 3D objects。ICLR
- 图像描述-image captioning。Association for Computing Machinery
- 视频应用:
- 视频分类-video classification。ECCV*
- 动作预测-motion predicion。ECCV**
- 行为检测-action localization。IEEE**
- 行人再识别-person re-identification。IEEE***
- 事件检测-event detection。British Machine Vision Conference
5.2 自然语言处理:小样本学习使自然语言处理应用程序能够用很少的文本数据样本来完成任务。例如:
- 句法分析-parsing。Association for Computational Linguistics
- 翻译-translation。ICLR
- 句子填空-sentence completion。Google
- 短文本的情感分类-sentiment classification from short reviews。NAACL
- 对话系统的用户意图分类-user intent classification for dialog systems。IBM Research
- 刑事指控预测-criminal charge prediction。代码:https://github.com/thunlp/attribute_charge。Association for Computer Linguistics
- 单词相似度任务-word similarity tasks。Association for Computer Linguistics*
- 多标签文本分类-multi-label text classification。Association for Computer Linguistics**
5.3 机器人:为了让机器人的行为更像人类,它们应该能够从少量的示例中归纳出信息。因此,小样本学习在训练机器人完成特定任务中扮演了一个关键角色,例如:
- 通过模仿一个动作来学习该动作-learning a movement by imitating a single demonstration。IEEE****
- 从少量示例中学习操作动作-learning manipulation actions from a few demonstrations。IEEE*****
- 视觉导航-visual navigation。PMLR
- 连续控制-continuous control。NIPS*****
5.4 声信号处理:包含有关声音信息的数据可以通过声信号处理进行分析,小样本在该方向的应用有:
- 从用户少量的音频样本中克隆声音(voice cloneing),如导航app中的声音、Siri等。
- 变声-voice conversion
- 不同语言之前的声音转换
5.5 其它应用:
- 医学应用(如,few-shot drug discovery)。
- 单样本结构搜索-one-shot architecture search:通过一次训练超网(超网是几个Internet Protocol (IP)网络或子网的组合,组成一个具有单一无分类域间路由(CIDR)前缀的网络)来寻找体系结构。
- 数学应用
- 曲线拟合-curve-fitting
- 理解数字类推,通过逻辑推理(logic reasoning)来执行计算
6. Python实现
- Pytorch – Torchmeta:一个用于小样本分类和回归问题的库,可以作为多个问题的基线。
- FewRel:一个大规模的小样本关系提取数据集,包含了100+关系和很多已标注的跨领域的实例。
- Meta Transfer Learning:这个库包含了基于元迁移学习的小样本学习的TensorFlow和PyTorch实现。
- Few Shot:纯净、易读、有测试代码的小样本学习研究复现库。
- Few-Shot Object Detection (FsDet):包含基于小样本的物体检测“Simple Few-Shot Object Detection”的官方实现。
- Prototypical Networks on the Omniglot Dataset: “Prototypical Networks for Few-shot Learning” 的Pytorch实现。
机器学习的未来
IBM研究表明,机器学习在未来将围绕以下领域发展:
- 经典机器学习:一次处理一个数据集、一个任务和一个繁重训练的问题
- 基于小样本的机器学习:处理大量的离线训练,然后在类似的任务上轻松学习
- 发展中的机器学习:持续学习各种任务。