文章内容整理:Enneng Yang, Xiaoqing Cao

本文仅作为学习交流使用,如有问题,请联系ennengyang@qq.com。


1.小样本问题的研究意义✚●○

深度学习已经在各个领域取得了非常优异的表现,但传统的深度学习需要大量有标签的样本来进行训练,当样本不充分时,模型性能将严重下降。然而现实情况下不是所有任务下都能获得大量有标签的样本。例如医疗保健和城市计算领域,我们仅有少量(标记)数据,因此面临的挑战是如何使机器学习算法在处理小数据时仍能很好地工作?

细想一下,一般哪些场景会需要解决这种多分类少样本的情况呢?

  • 图像:字符识别、极多类的图像分类、图像检索、目标跟踪、视觉问答等

  • NLP: 问答、翻译、语言模型等

  • 推荐&广告:冷启动、低频长尾分布等

然而,我们人类却能通过少量的样本学习去识别出那些新出现的类别,比如人类一开始只是认识猫,不认识老虎,但他只在图书室看了一眼老虎的图片,当某天去到动物园的时候,人是很容易就认出老虎的,而不会把它当作猫。因此,学习使用有限数量的带标签的样本来推广到新类别是非常有趣的。

所以小样本研究的意义就在于:现实中有很多任务无法拿到足够的样本去学习,通过小量样本进行学习,降低样本数量和成本,进而解决实际的问题是一个迫切的需求。而所有解决小样本问题的方法,归结下来都是:挖掘事物高层的语义表示,得到先验知识(从任务集合中提取和传播可迁移的知识),使训练出的模型具有可迁移性(能迁移到小样本)。

2.小样本的核心问题✚●○

以上是一些小样本问题的直观说明,如何从理论上更形式化的来解释小样本问题的困难呢?

我们回顾一下机器学习问题:我们有一个训练数据I={X, Y}, 假设I中的所有X都满足一个隐含的、未知的分布P, 也就是说I中所有的样本都是从P中独立同分布(i.i.d)采样出来的。假设h是算法L学习到的从X到Y的映射,并且有 $ h \in H $, H是算法L的假设空间。我们可以定义h的期望风险(expected risk)为:

(1)

但显然我们无法观察到整个分布P,观察到的仅仅是采样后的训练集I,也就是p(x,y)是未知的,因此我们需要定义经验风险(empirical risk):

(2)

机器学习是通过经验风险最小化来完成的。我们定义下列三个符号:

对于训练集的随机选择,学习的总误差可以分解为:

(3)

approximation error是度量H中的算法L有多接近最优假设空间H;estimation error测量在H范围内最小化经验风险RI(H)而不是期望风险R(H)的效果。由公式(3)可以看出总误差受H(假设空间)和I(训练集中的样本数)的影响。在假设空间一样的情况下,我们知道:

(4)

从这里其实就可以进一步明确小样本学习的问题是:小样本的情况下,经验风险最小化空间hI不再可靠。因此,小样本学习比一般的机器学习问题要困难得多。

小样本问题的解决方法✚●○

明白了小样本问题的所在后,该从哪些方面来解决小样本问题呢?小样本问题其实主要分为从:数据增强、模型约束空间、搜索算法三个层面来提供先验知识。

数据增强就是说那我就想办法给小样本的任务更多的数据;约束模型空间是指既然我样本少,没法在复杂的模型空间中训练好,那我就想办法约束我的搜索空间;搜索算法是指,普通的SGD从头训练我的参数我可能没有那么多样本去修正,那我就找一个更好的优化算法或者更容易优化的参数初始值。下面我们一一介绍常见的这些方式。

3.1数据增强

这个方法其实是最简单直接的方式,我们刚刚已经说了小样本的核心问题在于数据量太少导致经验风险不可靠,那么如果能想办法增加数据,就会由小样本学习问题变为传统的机器学习问题了,那我就用传统的方式就好了。

增加数据有哪些手段呢?

  1. 手工规则:图像领域包括反转、旋转、变形、缩放、对比等(预处理),NLP领域包括term顺序、同义词替换(预处理)。

  2. 基于学习的规则:核心就是拿同一个类的样本去学习互相转化的模式,比如用auto-encoder的方式去训练相似类别的图片,然后给新的图片加一点噪声就能产生新的样本;翻译算法的来回翻译(中->英->中)。

  3. 弱标注或者无标注数据:比如图像可以进行无监督的标签传播, 直接用于标记那些未知标签的数据来提升信息量。

  4. 相似数据集:利用普通马的数据辅助斑马识别,猫辅助老虎(但应引入变异度量);生成对抗网络生成和真实数据相近的数据。

3.2预估模型

解决小样本问题的另一个出发点就是:如果我们能挖掘高层次的语义特征,降低模型参数空间和优化难度,就能很好的适应小样本任务。

3.2.1.多任务学习模型(multi-task learning)

多任务学习模型同时学习多个任务, 充分利用跨任务共享的通用信息和每个任务的特定信息来增强各个任务。

多任务学习模型的核心也就在于参数共享,怎么设置参数共享呢? 目前的模型可以分为两大派别:软(soft)/硬(hard)参数共享。

共同点:都是用来自其他任务的数据帮助缓解这种数据稀疏问题;共享参数本身大大降低了过拟合的风险;如何确定网络共享程度和共享部分是一个关键。

差异点:hard结构是固定的,前提是比较相关的任务,应用方便,但当任务相关度下降或者需要不同程度的推理时,硬共享就不合适了。软共享一般是使用loss函数进行限制(即尽量鼓励不同任务的部分参数相似),理论上更robust,但他参数多,而且依赖人工设计。主流的思想是将两种结合:典型的代表比如十字绣网络(Cross-stitch)。

多任务的学习模式可以为学习者提供一个良好的参数空间H,并对不同的任务进行快速概括。然而,如何在不引入负迁移(negative transfer)的情况下对一个新的但不相关的任务进行泛化尚不确定。

3.2.2. 嵌入学习(embedding learning)

这里降低参数空间复杂度的思想是:通过学习区分相似度和不相似度的样本方式来构建一个规模更少的嵌入空间来降低参数空间。比如单独看百度百科描述老虎和猫,我们不可能把所有猫的特征和老虎的特征都去直接单独描述,但其实只要三句话可能就能描述出两者的区别,进而可以分类。所以主要思想是:由学习表示样本的全部信息变化到学习样本的差异性。因此要注意的是,嵌入学习(embedding learning)主要使用在分类任务上。

嵌入学习主要是基于度量学习来区分相似或者不相似。这种基于距离度量学习的方式效果很显著:文献[2]的结果表明,一个带有基于距离分类器的简单基线方法(不像元学习那样对任务/事件集进行训练)就取得了与其他复杂算法相似的性能。

3.2.3. 记忆模型(learning with external memory)

这种方式通过引入额外的memory network来存储其他任务的先验信息。

原理:嵌入函数f是从外部先验知识学习的。当有一个新样本时,从memory空间中提取出与该样本的相似度最高的键值对。然后将键值输入到预测模型中。当memory空间不满时,新的样本都会写入空的记忆中;空间已满时,须设定新的规则以决定新的样本取代或者更新现有键值对。

3.2.4.生成模型(generative modeling)

这里的生成建模方法是指涉及p(x,y)的这一类方法。他们利用先验知识和训练集来得到估计分布。生成建模方法更新训练集上的概率分布进行预测。

为什么用生成模型:从统计的角度表示数据的分布情况,能够反映同类数据本身的相似度;生成方法当样本量增加的时候,学习到的模型可以更快的收敛于真实模型。

生产模型核心还是挖掘出高阶的、高层次的语义特征去辅助新任务学习。一些典型的方法包括基于VAE的,基于GAN的,基于推理网络的。

3.2.5.从模型迁移知识的方式总结

  • 多任务学习方法通过一组共同学习的任务来约束小样本任务的学习时间。他们可以在不同的任务之间进行沟通,并在优化过程中改进这些任务。它们还隐式地增加数据,因为一些参数是由多个任务共同学习的。但是,进行联合训练的目标任务(这里指的就是小样本的那个任务)一开始训练就必须是参与训练的多个任务之一。因此,对于每个新的任务,都必须从头开始学习,这可能代价高昂且速度缓慢。它不适合只有一次机会的任务或喜欢快速推理的任务。

  • 嵌入学习方法学习的是在较小的嵌入空间内嵌入样本,在较小的嵌入空间内可以很容易地识别出相似对和不相似对。因此空间H是有约束的。大部分方法从大规模数据集中学习任务不变性信息,并吸收新任务的任务特性。一旦学会,大多数方法可以通过前向传递很容易地从新任务中归纳出来。然而,如何将任务的不变性量和特定信息有原则地混合在任务中尚不清楚。

  • 外部存储学习方法通过存储在内存中的训练集对每个样本进行细化和重新解释,从而重塑空间H。将训练样本显式存储在内存中,避免了为适应训练样本而进行艰苦的再训练。特定于任务的信息被有效地使用并且不会轻易地被忘记。然而,使用外部存储器进行学习会带来额外的空间和计算开销。

  • 生成式建模方法从先验知识中学习先验概率,形成H的形态,具有良好的解释能力、因果关系和组合性。通过学习联合分布p(x,y),他们可以处理更广泛的任务,如生成和重建。通过学习生成模型,可以生成大量样本进行数据扩充。然而,与其他模型相比,生成式建模方法通常具有较高的计算成本和推导难度。为了计算的可行性,它们需要对结构进行严格的简化,从而导致不准确的近似。

3.3.训练算法

小样本问题下,样本量变少了,怎么训练,才能避免过拟合,并更快找到最好的参数模型呢?我们知道,大部分深度学习模型的参数都是使用SGD或者其变种(Adam, Adagrad...)来进行更新:

当样本丰富时,可以通过足够的训练样本把θ更新到足够的精度。然而在Few-shot中没有足够的样本,因此获得的经验风险是不可靠的。本节利用先验知识来改变对参数化h*的变量θ的搜索,从而解决小样本问题。

3.3.1完善现有参数(Refine existing parameters)

这种方式是假设θ通过从大规模数据中学习获取一般的结构,因此可以使用几次迭代对其进行调整,使其在few-shot数据集上工作得很好。

  • 微调参数(Fine-tune):在这种方式中,最核心的问题就是如何避免over-fitting. 一般使用以下策略:early-stop(只做有限度的更新); 选择只更新一部分参数(只选择部分参数进行更新,例如最后一层)等

  • 聚合参数(Aggregate):在一些情况下,我们无法的得到可以微调的参数,比如我要做人脸识别任务,但我只有一些眼睛识别,耳朵识别,嘴巴识别的数据训练好的参数,这时候我们可以选择把这些参数聚合起来:

3.3.2完善meta参数(Refine meta-learned)

元学习者(meta-learner)从一组任务中学习,这些任务与few-shot任务的任务分布相同,然后输出一个general的学θ,然后每个学习者使用自己的训练集对元学习者提供的θ进行优化。

元学习的范围可以很广,我们在附录中单独介绍这一部分。基于元学习完善(Refine meta-learned)的方法主要是:

  • Refine by Gradient Descent.:该策略利用梯度下降法对元学习的θ进行了改进。一个典型的代表是:Model-Agnostic Meta-Learning (MAML)[7], 元学习的目的是为所有的任务都学一个好的初始化,因此当一个few-shot任务来的时候,可以根据很少的梯度更新就可以学习好。当然,MAML为所有任务提供的都是相同的初始化,这种初始化只适合任务相似时,当任务不相似就会有极差的性能。因此有一些模型从为每个任务都提供不同的初始化出发[8]。

  • 学习搜索步骤(Learn search steps): 该策略通过学习元学习者(meta-learner)输出搜索步骤或更新规则来直接指导每个学习者。它改变了搜索步骤,比如方向或步长,而不是学习更好的初始化。

总结一下,基于优化算法的方式主要分为两条主线:第一条主线是去学习一个良好的模型初始化(也就是模型参数),使得通过少量有标签样本的梯度更新就能识别那些新的类别。另一条主线是去学习一个优化器,比如学一个基于LSTM的meta-learner来替代随机梯度下降优化器(SGD optimizer)。虽然这些基于初始化的方法能够在有限的训练实例数量下快速适应新类,但实验表明,这些方法在处理基类和新类之间的领域转换方面(比如在mini-ImageNet数据集上训练后迁移到CUB数据集使用)存在困难[2]。

参考文献

[1] Generalizing from a Few Examples: A Survey on Few-Shot Learning. Arxiv, 2019.

[2] A Closer Look at Few-shot Classification. ICLR, 2019.

[3] Meta-learning with memory-augmented neural networks. ICML, 2016.

[4] Neural turing machines. Arxiv, 2014.

[5] Few-Shot Object Recognition from Machine-Labeled Web Images. CVPR, 2017.

[6] Memory Matching Networks for One-Shot Image Recognition. CVPR, 2018.

[7] Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks. ICML, 2017.

[8] Gradient-Based Meta-Learning with Learned Layerwise Metric and Subspace. ICML, 2018.

[9] 此处仅用于学习,引用文献未完整列出。

小样本点云深度学习库_小样本学习综述报告相关推荐

  1. 小样本点云深度学习库_论文 | 小样本学习综述

    转自:专知[https://www.zhuanzhi.ai/] [导读]现有的机器学习方法在很多场景下需要依赖大量的训练样本.但机器学习方法是否可以模仿人类,基于先验知识等,只基于少量的样本就可以进行 ...

  2. 小样本点云深度学习库_基于点云深度学习的点云数据集制作系统及方法与流程...

    本发明涉及测控技术领域,尤其涉及一种基于点云深度学习的点云数据集制作系统及方法. 背景技术: 深度学习网络模型一般都是基于64线单帧激光数据集进行.但64线激光器和单帧的限定,造成了工程应用中点云数据 ...

  3. 小样本点云深度学习库_NeurIPS2019 | MIT与上海交大提出新型点云深度学习框架Point-Voxel CNN...

    首发于公众号:3D点云深度学习. 论文:'Point-Voxel CNN for Efficient 3D Deep Learning' 来源:NeurIPS2019Spotlight 共同一作:Zh ...

  4. 小样本点云深度学习库_合成鲁棒的对抗样本来欺骗深度学习分类器

    本期一诺sec关注深度学习系统安全问题,推荐一篇来自ICML 2018会议论文Synthesizing Robust Adversarial Examples.论文链接http://proceedin ...

  5. 小样本点云深度学习库_2019-01-07-小样本深度学习

    小样本数据通常不建议用深度学习的理由: 对于classification model,有如下结论 训练样本N,h为Vc维数,详见https://www.cnblogs.com/HappyAngel/p ...

  6. 正则表达式学习日记_《学习正则表达式》笔记_Mr_Ouyang

    正则表达式学习日记_<学习正则表达式>笔记_Mr_Ouyang 所属分类: 正则表达式学习日记  书名:     学习正则表达式 作者:     Michael Fitzgerald 译者 ...

  7. 亚马逊深度学习库_汽车Linux,8位社交,与Amazon的深度学习以及更多新闻

    亚马逊深度学习库 在本周的开源新闻摘要中,我们将介绍汽车Linux,社交8位,具有神经网络的深度学习等等! 2016年5月7日至14日的开源新闻摘要 汽车用Linux等于大型汽车制造商的快速创新 Li ...

  8. 笔记:基于点云的语义分割的小样本学习

    笔记:Few-shot learning for tackling open-set generalization: 基于点云的语义分割的应用:场景理解,给点云中每一个点赋予特点的语义标签.(如自动驾 ...

  9. 华为云NP考试题库_华为认证网络工程师怎么考

    如果现在打算学习华为认证的话,那么下一步该怎么开始呢?华为认证网络工程师的考试该怎么样考呢?有不少朋友长期关注网络工程师成长日记作者小编,看了大量小编关于华为认证的介绍之后,有些朋友时间充裕也打算进行 ...

最新文章

  1. 原创 | 初学者友好!最全算法学习资源汇总(附链接)
  2. Python金融大数据分析——第四章数据类型和结构
  3. Scott Mitchell 的ASP.NET 2.0数据教程之二十一:: 实现开放式并发
  4. 在python中使用关键字define定义函数_python等价于'define func()'或如何在python中注释掉函数调用...
  5. 职场必须要会的餐桌礼仪
  6. del服务器如何收系统日志,利用Rsyslog集中收集系统日志和用户操作记录以及相关处理方法...
  7. 【Kafka】Window下kafka开启JMX监控
  8. 1、分组选择器, 2、尺寸 (Dimension)属性,3、Display(显示) 与 Visibility(可见性),4、CSS Display - 块和内联元素,5、CSS Position(定位
  9. linux6.5关闭21端口,linux CentOS6.5 防火墙(关闭除提供系统服务以外的端口)
  10. 计算机视觉教程0-4:手推张正友标定法,详解图像去畸变(附代码)
  11. chrome android版 插件下载,谷歌chrome安卓版
  12. python鼠标移动的方法_python自动化之鼠标移动
  13. 四川大学计算机与生命科学专业,四川大学生命科学学院2014年研招专业目录
  14. AJAX聊天室实现原理 JQuery+PHP 【转】
  15. 为什么Java程序员工资高?
  16. 【收藏】10个高能黑科技网站
  17. 录屏工具ScreenToGif功能总结
  18. 帆软数据决策系统漏洞_帆软报表漏洞总结
  19. 生信步骤|转录组测序上游分析:hisat2+samtools+stringtie
  20. Python3 实现简易局域网视频聊天工具

热门文章

  1. 【PAT甲级 sc.nextInt()的使用】1008 Elevator (20 分) Java版 9/9通过
  2. vs unity shader插件_一些Shader资料
  3. redis基本类型以及优点特性
  4. 洛谷——P1019 单词接龙
  5. JavaScript的运动——弹性运动原理及案例
  6. 1031 查验身份证 (15分)_21行满分代码
  7. Inndb和Memory
  8. bcd编辑工具Linux,​快启动pe系统工具之BCD编辑工具各个功能详细介
  9. 集群(四)——haproxy日志
  10. python笔记之while和for循环练习