人工智能中小样本问题引起的多个系列模型演变及学习笔记(含元学习/小样本学习/生成对抗网络/迁移学习等)

【说在前面】本人博客新手一枚,象牙塔的老白,职业场的小白。如下内容仅为我的看法,欢迎批评指正,不喜勿喷![握手][握手]html

【再啰嗦一下】原本只想记一下GAN的笔记,没想到发现了一个大宇宙,不少我的并不擅长,主要是整理概括!python

1、Meta Learning 元学习综述

Meta Learning,又称为 learning to learn,已经成为继 Reinforcement Learning 以后又一个重要的研究分支。git

元学习区别于机器学习的是:机器学习一般是在拟合一个数据的分布,而元学习是在拟合一系列类似任务的分布。github

本节主要参考了大佬的知乎专栏:https://zhuanlan.zhihu.com/p/28639662面试

推荐Stanford助理教授Chelsea Finn开设的CS330 multitask and meta learning课程算法

  • 在 Machine Learning 机器学习时代,对于复杂一点的分类问题,模型效果就很差了。
  • Deep Learning 深度学习解决了一对一映射问题,但若是输出对下一个输入有影响,也就是sequential decision making问题,单一的深度学习就解决不了了。
  • Deep Reinforcement Learning 深度强化学习对序列决策取得成效,但深度强化学习太依赖于巨量的训练,而且须要精确的Reward。
  • 人类之因此可以快速学习的关键是人类具有学会学习的能力,可以充分利用以往的知识经验来指导新任务的学习,所以 Meta Learning 成为新的攻克方向。

1. 基本概念

元学习是要去学习任务中的特征表示,从而在新的任务上泛化。举个例子,如下图的图像分类来讲,元学习的训练过程是在task1和task2上训练模型(更新模型参数),而在训练样本中的训练集通常称做support set,训练样本中的测试集通常叫作query set。测试过程是在测试任务上评估模型好坏,从图中能够看出,测试任务和训练任务内容彻底不一样。网络

元学习解决的是学习如何学习的问题,元学习的思想是学习「学习(训练)」过程。元学习主要包括Zero-Shot/One-Shot/Few-Shot 学习、模型无关元学习(Model Agnostic Meta Learning)和元强化学习(Meta Reinforcement Learning)等。数据结构

  • Zero-shot Learing 就是训练样本里没有这个类别的样本,可是若是咱们能够学到一个牛逼的映射,这个映射好到咱们即便在训练的时候没看到这个类,可是咱们在遇到的时候依然能经过这个映射获得这个新类的特征。
  • One-shot Learing 就是类别下训练样本只有一个或者不多,咱们依然能够进行分类。好比咱们能够在一个更大的数据集上或者利用knowledge graph、domain-knowledge 等方法,学到一个通常化的映射,而后再到小数据集上进行更新升级映射。
  • Few-Shot Learing 的综述将在下一节重点整理,这里暂时不展开介绍。

元学习的主要方法包括基于记忆Memory的方法、基于预测梯度的方法、利用Attention注意力机制的方法、借鉴LSTM的方法、面向RL的Meta Learning方法、利用WaveNet的方法、预测Loss的方法等。架构

2. 基于记忆Memory的方法

基本思路:既然要经过以往的经验来学习,那么是否是能够经过在神经网络上添加Memory来实现呢?框架

表明方法包括:Meta-learning with memory-augmented neural networks、Meta Networks等。

能够看到,网络的输入把上一次的y label也做为输入,而且添加了external memory存储上一次的x输入,这使得下一次输入后进行反向传播时,可让y label和x创建联系,使得以后的x可以经过外部记忆获取相关图像进行比对来实现更好的预测。

3. 基于预测梯度的方法

基本思路:既然Meta Learning的目的是实现快速学习,而快速学习的关键一点是神经网络的梯度降低要准,要快,那么是否是可让神经网络利用以往的任务学习如何预测梯度,这样面对新的任务,只要梯度预测得准,那么学习得就会更快了?

表明方法包括:Learning to learn by gradient descent by gradient descent 等。

该方法训练一个通用的神经网络来预测梯度,用一次二次方程的回归问题来训练,优化器效果比Adam、RMSProp好,显然就加快了训练。

4. 利用Attention注意力机制的方法

基本思路:人的注意力是能够利用以往的经验来实现提高的,好比咱们看一个性感图片,咱们会很天然的把注意力集中在关键位置。那么,能不能利用以往的任务来训练一个Attention模型,从而面对新的任务,可以直接关注最重要的部分。

表明方法包括:Matching networks for one shot learning 等。

这篇文章构造一个attention机制,也就是最后的label判断是经过attention的叠加获得的:

[公式]

attention a 则经过 g 和 f 获得。基本目的就是利用已有任务训练出一个好的attention model。

5. 借鉴LSTM的方法

基本思路:LSTM内部的更新很是相似于梯度降低的更新,那么,可否利用LSTM的结构训练出一个神经网络的更新机制,输入当前网络参数,直接输出新的更新参数?

表明方法包括:Optimization as a model for few-shot learning 等。

这篇文章的核心思想是下面这一段:

怎么把LSTM的更新和梯度降低联系起来才是更值得思考的问题吧。

6. 面向RL的Meta Learning方法

基本思路:Meta Learning能够用在监督学习,那么加强学习上怎么作呢?可否经过增长一些外部信息好比reward,以前的action来实现?

表明方法包括:Learning to reinforcement learn、Rl2: Fast reinforcement learning via slow reinforcement learning 等。

两篇文章思路一致,就是额外增长reward和以前action的输入,从而强制让神经网络学习一些任务级别的信息:

7. 经过训练一个好的base model的方法,而且同时应用到监督学习和强化学习

基本思路:以前的方法都只能局限在监督学习或强化学习上,能搞个更通用的?是否是相比finetune学习一个更好的base model就能work?

主要方法包括:Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks 等。

这篇文章的基本思路是同时启动多个任务,而后获取不一样任务学习的合成梯度方向来更新,从而学习一个共同的最佳base。

8. 利用WaveNet的方法

基本思路:WaveNet的网络每次都利用了以前的数据,是否能够照搬WaveNet的方式来实现Meta Learning呢?就是充分利用以往的数据呀?

主要方法包括:Meta-Learning with Temporal Convolutions 等。

直接利用以前的历史数据,思路极其简单,效果极其之好,是目前omniglot,mini imagenet图像识别的state-of-the-art。

9. 预测Loss的方法

基本思路:要让学习的速度更快,除了更好的梯度,若是有更好的loss,那么学习的速度也会更快,所以,是否是能够构造一个模型利用以往的任务来学习如何预测Loss呢?

主要方法包括:Learning to Learn: Meta-Critic Networks for Sample Efficient Learning 等。

本文构造了一个Meta-Critic Network(包含Meta Value Network和Task-Actor Encoder)来学习预测Actor Network的Loss。对于Reinforcement Learning而言,这个Loss就是Q Value。

10. 小结

这是两年前的综述了,可是感受质量很高。固然,后续又有了一些新进展。在应用上,元学习应用到了更普遍的问题上,例如小样本图像分类、视觉导航、机器翻译和语音识别等。在算法上,最值得一提的应该就是元强化学习,由于这样的结合将有望使智能体可以更快速地学习新的任务,这个能力对于部署在复杂和不断变化的世界中的智能体来讲是相当重要的。

具体的,以上关于元学习的论文已经介绍了在策略梯度(policy gradient)和密集奖励(dense rewards)的有限环境中将元学习应用于强化学习的初步结果。此后,不少学者对这个方法产生了浓厚的兴趣,也有更多论文展现了将元学习理念应用到更普遍的环境中,好比:从人类演示中学习、模仿学习以及基于模型的强化学习。除了元学习模型参数外,还考虑了超参数和损失函数。为了解决稀疏奖励设置问题,也有了一种利用元学习来探索策略的方法。

尽管取得了这些进展,样本效率仍然是一项挑战。当考虑将 meta-RL 应用于实际中更复杂的任务时,快速适应这些任务则须要更有效的探索策略。所以在实际学习任务中,须要考虑如何解决元训练样本效率低下的问题。所以,伯克利 AI 研究院基于这些问题进行了深刻研究,并开发了一种旨在解决这两个问题的算法。

最后分享看到的元学习 meta learning 的2020综述论文。提出了一个新的分类法,对元学习方法的空间进行了更全面的细分:[认真看图]

论文标题:Meta-Learning in Neural Networks: A Survey

论文连接:https://arxiv.org/abs/2004.05439

2、Few-shot Learning 小样本学习综述

Few-shot Learning 能够说是 元学习 Meta Learning 在监督学习领域的一个应用,固然也有它本身研究领域的东西。

本节来自香港科技大学和第四范式的综述:Generalizing from a Few Examples: A Survey on Few-Shot Learning

该综述已被 ACM Computing Surveys 接收,还创建了 GitHub repo,持续更新:https://github.com/tata1661/FewShotPapers

1. 基本概念

机器学习在数据密集型应用中很是成功,但当数据集很小时,它经常受到阻碍。为了解决这一问题,近年来提出了小样本学习(FSL)。利用先验知识,FSL能够快速地泛化到只包含少许有监督信息的样本的新任务中。

大多数人认为FSL就是 meta learning,其实不是。FSL能够是各类形式的学习(例如监督、半监督、强化学习、迁移学习等),本质上的定义取决于可用的数据。但如今大多数时候在解决FSL任务时,采用的都是 meta Learning 的一些方法。

基于各个方法利用先验知识处理核心问题的方式,该综述将 FSL 方法分为三大类:

  • 数据:利用先验知识加强监督信号
  • 模型:利用先验知识缩小假设空间的大小
  • 算法:利用先验知识更改给定假设空间中对最优假设的搜索

基于此,该综述将现有的 FSL 方法归入此框架,获得以下分类体系:

2. DATA

数据加强的方式有不少种,平时也被使用的比较多,在这里做者将数据加强的方法归纳成三类:

总之,数据加强没有什么神秘感,能够是手动在数据上修改(例如图片的旋转、句子中的同义词替换等),也能够是复杂的生成模型(生成和真实数据相近的数据)。数据加强的方式有不少种,大量合适的加强必定程度上能够缓解FSL问题,但其能力仍是有限的。

3. MODEL

和模型剪枝中的理念相似,你一开始给一个小的模型,这个模型空间离真实假设太远了。而你给一个大的模型空间,它离真实假设近的几率比较大,而后经过先验知识去掉哪些离真实假设远的假设。

做者根据使用不一样的先验知识将MODEL的方法分红4类:

3.1 Multitask Learning

对于多个共享信息的任务(例如数据相同任务不一样、数据和任务都不一样等),均可以用多任务学习来训练。

多任务分为硬参数共享和软参数共享两种模式:

  • 硬参数共享认为任务之间的假设空间是有部分重叠的,体如今模型上就是有部分参数是共享的。而共享的参数能够是模型的前面一些层,表征任务的低阶信息。也能够是在嵌入层以后,不一样的嵌入层将不一样任务嵌入到同一不变任务空间,而后共享模型参数等。
  • 软参数共享再也不显示的共享模型参数,而是让不一样的任务的参数类似。这就能够经过不一样任务的参数正则,或者经过损失来影响参数的类似,以此让不一样任务的假设空间相似。

多任务经过多个任务来限制模型的假设空间:

  • 对于硬参数共享,多个任务会有一个共享的假设空间,而后每一个任务还有本身特定的假设空间。
  • 对于软参数共享也相似,软参数更灵活,但也须要精心设计。

3.2 Embedding Learning

嵌入学习很好理解,将训练集中全部的样本经过一个函数 f 嵌入到一个低维可分的空间Z,而后将测试集中的样本经过一个函数 g 嵌入到这个低维空间Z,而后计算测试样本和全部训练样本的类似度,选择类似度最高的样本的标签做为测试样本的标签。

根据task-specific和task-invariant,以及二者的结合能够分为三种,嵌入学习以下:

  • Task-specific是在任务自身的训练集上训练的,经过构造同类样本相同,不一样类样本不一样的样本对做为数据集,这样数据集会有一个爆炸式的扩充,能够提升样本的复杂度,而后能够用如siamese network等来训练。
  • Task-invariant是在一个大的且和任务类似的source数据集上训练一个嵌入模型,而后直接用于当前任务的训练集和测试集嵌入。
  • 实际上如今用的比较多的仍是二者的结合,既能够利用大的通用数据集学习通用特征,又能够在特定任务上学习特定的特征,而如今经常使用的训练模式是meta learning中的metric-based的方式,此类常见的模型有match network、prototypical network、relation network等。

3.3 Learning with External Memory

具备外部存储机制的网络均可以用来处理这一类问题,其实本质上和迁移学习同样。只不过这里不更新模型的参数,只更新外部记忆库。外部记忆库通常都是一个矩阵,如神经图灵机,其外部记忆库具备读写操做。

在这里就是在一个用大量相似的数据训练的具备外部存储机制的网络上,用具体task的样原本更新外部记忆库。这类方法须要精心设计才能有好的效果,好比外部记忆库写入或更新的规则可能就影响模型可以在当前任务上的表现。具体的以下图所示:

3.4 Generative Modeling

引入了生成式的模型来解FSL问题。

4. ALGORITHM

在机器学习中,一般使用SGD及其变体(例如ADAM、RMSProp等)来寻找最优参数。可是在FSL中,样本数量不多,这种方法就失效了。

在这一节,咱们再也不限制假设空间。根据使用不一样的先验知识,能够将ALGORITHM分为下面3类:

4.1 Refine Existing Parameters

本质就是pretrained + fine-tuning的模式,最多见的就是直接在pre-trianed的模型上直接fine-tuning参数,还能够在一个新的网络上使用pre-trained的部分参数来初始化等。

4.2 Refine Meta-learned Parameters

该小节是基于 meta learning 的解决方法,利用元学习器学习一个好的初始化参数。以后在新的任务上,只要对这个初始化参数少许迭代更新就能很好的适应新的任务。这种方法最经典的模型就是MAML,MAML的训练模式以下图所示:

上面的参数是元学习器的参数,最后用多个任务的梯度矢量和来更新参数。这样的方式也有一个问题,就是新的任务的特性必需要和元训练中的任务相近,这样值才能做为一个较好的初始化值,不然效果会不好。所以,也就有很多研究在根据新任务的数据集来动态的生成一个适合它的初始化参数。

4.3 Learn Search Steps

上一节使用元学习来得到一个较好的初始化参数,而本节旨在用元学习来学习一个参数更新的策略。针对每个子任务能给定特定的优化方式其实是提升性能的惟一方法,这里就是设计一个元优化器来为特定的任务提供特定的优化方法,具体的以下图所示:

梯度的更新也能够写成:

在这里使用RNN来实现,由于RNN具备时序记忆功能,而梯度迭代的过程当中正好是一个时序操做。具体的训练以下图所示:

训练过程大体以下:

  • 对于每一个任务,一样划分训练集和测试集,训练集通过meta-learner获得一系列的梯度,由于RNN每一个时刻都有输出,所以每一个时刻的梯度都去依次更新learner的参数ϕ。这样看就至关于一个batch的样本就更新了T次learner
  • 训练完一轮以后,用测试集在learner上的到的梯度来更新meta-learner的参数

这和上一节面临的问题同样,meta-learner 学到的更新策略是针对这一类任务的,一旦新任务和元训练中的任务误差较大时,这种更新策略可能就失效了。

5. FUTURE WORKS

将来的方向可能有:

  • 从使用的先验数据:例如利用更多的先验知识、多模态的数据等
  • 从使用的模型方法:用新的网络结构去替换之前的,例如用transformer替换RNN
  • 从使用的场景:如今FSL在字符识别、图像识别、小样本分割等取得效果,在目标检测、目标跟踪、NLP中的各项任务上等值得尝试
  • 理论分析
  • ......

3、生成对抗网络 GAN 综述

说到小样本学习,就想说比较时髦的生成对抗网络GAN。别误会,生成对抗网络并非只针对小样本生成,还有不少别的丰富应用。

1. GAN

GANs是一种结构化的几率模型,由两个对立的模型组成:生成模型(G)用于捕获数据分布,判别模型(D)用于估计生成数据的几率,以肯定生成的数据是来自真实数据分布,仍是来自G的分布。D和G使用基于梯度的优化技术(同时梯度降低)玩一个极小极大零和博弈,直到纳什均衡。

GANs在一些实际任务中表现良好,例如图像生成、视频生成、域自适应和图像超分辨率等。传统的GANs虽然在不少方面都取得了成功,可是因为D和G训练的不平衡,使得GANs在训练中很是不稳定。D利用迅速饱和的逻辑损失。另外,若是D能够很容易的区分出真假图像,那么D的梯度就会消失,当D不能提供梯度时,G就会中止更新。

近年来,对于模式崩溃问题的处理有了许多改进,由于G产生的样本基于少数模式,而不是整个数据空间。另外一方面,引入了几个目标(损失)函数来最小化与传统GANs公式的差别。最后,提出了几种稳定训练的方法。

2. DCGAN

顾名思义,DCGAN主要讨论CNN与GAN如何结合使用并给出了一系列建议。另外还讨论了GAN特征的可视化、潜在空间插值等问题。

3. ImprovedGAN

Ian Goodfellow等人提供了诸多训练稳定GAN的建议,包括特征匹配、mini-batch识别、历史平均、单边标签平滑以及虚拟批标准化等技巧。讨论了GAN不稳定性的最佳假设。

4. PACGAN

PACGAN讨论的是的如何分析model collapse,以及提出了PAC判别器的方法用于解决model collapse。思想其实就是将判别器的输入改为多个样本,这样判别器能够同时看到多个样本能够从必定程度上防止model collapse。

5. WGAN

WGAN首先从理论上分析了原始GAN模型存在的训练不稳定、生成器和判别器的loss没法只是训练进程、生成样本缺少多样性等问题,并经过改进算法流程针对性的给出了改进要点。

6. CycleGAN 

CycleGAN讨论的是image2image的转换问题,提出了Cycle consistency loss来处理缺少成对训练样原本作image2image的转换问题。Cycle Consistency Loss 背后的主要想法,图片A转化获得图片B,再从图片B转换获得图片A',那么图片A和图片A'应该是图一张图片。

7. Vid2Vid

Vid2Vid在生成器中加入光流约束,判别器中加入光流信息及对前景和背景分别建模,重点解决视频转换过程当中先后帧图像的不一致性。

8. PGGAN

PGGAN创造性地提出了以一种渐进增大(Progressive growing)的方式训练GAN,利用逐渐增大的PGGAN网络实现了效果使人惊叹的生成图像。“Progressive Growing” 指的是先训练 4x4 的网络,而后训练 8x8,不断增大,最终达到 1024x1024。这既加快了训练速度,又大大稳定了训练速度,而且生成的图像质量很是高。

9. StackGAN

StackGAN是由文本生成图像,StackGAN模型与PGGAN工做的原理很像,StackGAN 首先输出分辨率为64×64 的图像,而后将其做为先验信息生成一个 256×256 分辨率的图像。

10. BigGAN

BigGAN模型是基于 ImageNet 生成图像质量最高的模型之一。该模型很难在本地机器上实现,并且 有许多组件,如 Self-Attention、 Spectral Normalization 和带有投影鉴别器的 cGAN等。

11. StyleGAN 

StyleGAN应该是截至目前最复杂的GAN模型,该模型借鉴了一种称为自适应实例标准化 (AdaIN) 的机制来控制潜在空间向量 z。虽然很难本身实现一个StyleGAN,可是它提供了不少有趣的想法。

12. 小结

固然前文有一些方法没有提到的,例如CGAN、自编码GAN等。

说到这里,放一张大佬整理的GAN家族主要模型的概要图:

  • 左边部分主要是改进模型解决例如图片转换、文本转图像、生成图片、视频转换等实际问题。
  • 右边部分主要是解决GAN框架自己存在的一些问题。

同时,再分享一下生成式对抗网络(GANs)最新2020综述,分类更全面更细致:[认真看图][认真看图]

  • 主要包括基于从新设计的网络结构、新的目标函数和替代优化算法的技术三个大类

GAN 已经在一些特定应用上与其它机器学习算法相结合,例如半监督学习、迁移学习、强化学习和多模态学习等。GAN 在图像处理与计算机视觉(例如图像超分辨率、图像生成、目标检测和视频处理等)、天然语言处理(例如文本生成等)、音乐(例如歌词生成等)、语音与音频、医学以及数据科学中的典型应用(例如以前个人随笔里提到的数据补全、异常检测、时间序列预测等)。

同时,GAN 被用于特征学习领域(例如特征选择、哈希和度量学习等)和其它机器学习任务(例如主动学习、在线学习 、零/小样本学习和多任务学习等)。能够说,计算机领域的不少研究分支中的算法模型都可以互相迁移、彼此融合,从而在不一样领域有了拓展性的应用。

4、迁移学习综述

说到小样本学习,我也想再说说迁移学习。可是别误会,迁移学习也并非只针对小样本学习,还有不少别的丰富应用。

本文主要参考了一篇综述:A Survey on Transfer Learning

1. 基本概念

在许多机器学习和数据挖掘算法中,一个重要的假设就是目前的训练数据和未来的训练数据,必定要在相同的特征空间而且具备相同的分布。然而,在许多现实的应用案例中,这个假设可能不会成立。这种状况下,若是知识的迁移作得成功,咱们将会经过避免花费大量昂贵的标记样本数据的代价,使得学习性能取得显著的提高。近年来,为了解决这类问题,迁移学习做为一个新的学习框架出如今人们面前。

迁移学习主要有如下三个研究问题:1)迁移什么,2)如何迁移,3)什么时候迁移。

  • “迁移什么”提出了迁移哪部分知识的问题。 一些知识对单独的域或任务有用,一些知识对不一样的领域是通用的,能够用来提升目标域或目标任务的性能。
  • “什么时候迁移”提出了哪一种状况下运用迁移学习。当源域和目标域无关时,强行迁移可能并不会提升目标域上算法的性能,甚至会损害性能。这种状况称为负迁移。
  • 当前大部分关于迁移学习的工做关注于“迁移什么”和“如何迁移”,隐含着一个假设:源域和目标域彼此相关。然而,如何避免负迁移是一个很重要的问题

基于迁移学习的定义,咱们概括了传统机器学习方法和迁移学习的异同见下表:

在这里插入图片描述

(1)inductive transfer learning:推导迁移学习,也叫概括迁移学习。其目标任务和源任务不一样,不管目标域与源域是否相同。这种状况下,要用目标域中的一些已标注数据生成一个客观预测模型以应用到目标域中。根据源域中已标注和未标注数据的不一样状况,能够进一步将inductive transfer learning分为两种状况:

  • 源域中大量已标注数据可用。这种状况下推导迁移学习和多任务学习相似。然而,推导迁移学习只关注于经过从源任务中迁移知识以便在目标任务中得到更高性能,然而多任务学习尝试同时学习源任务和目标任务。
  • 源域中无已标注数据可用。这种状况下推导迁移学习和自我学习类似。自我学习中,源域和目标域间的标签空间可能不一样,这意味着源域中的边缘信息不能直接使用。所以当源域中无已标注数据可用时这两种学习方法类似。

transductive transfer learning:转导迁移学习,也叫直推式迁移学习。其源任务和目标任务相同,源域和目标域不一样。这种状况下,目标域中无已标注数据可用,源域中有大量已标注数据可用。根据源域和目标域中的不一样情况,能够进一步将转导迁移学习分为两类:

  • 源域和目标域中的特征空间不一样
  • 源域和目标域间的特征空间相同,但输入数据的边缘几率分布不一样。这种状况与自适应学习相关,由于文本分类、样本选择误差和协方差移位中的知识迁移都有类似的假设。

(3)unsupervised transfer learning:无监督迁移学习。与推导迁移学习类似,目标任务与源任务不一样但相关。然而,无监督迁移学习专一于解决目标域中的无监督学习问题,例如聚类、降维、密度估计等。这种状况下,训练中源域和目标域都无已标注数据可用。

2. 迁移学习的分类

上述三种迁移学习能够基于“迁移什么”被分为四种状况:

(1)Instance-based TL(样本迁移):能够被称为基于实例的迁移学习。尽管source domain数据不能够整个直接被用到target domain里,可是在source domain中仍是找到一些能够从新被用到target domain中的数据。对它们调整权重,使它能与target domain中的数据匹配以后能够进行迁移。

instance reweighting(样本从新调整权重)和importance sampling(重要性采样)是instance-based TL里主要用到的两项技术。

例如在这个例子中就是找到例子3,而后加剧它的权值,这样在预测的时候它所占权重较大,预测也能够更准确。

(2)Feature-representation-transfer(特征迁移):能够被称为基于特征表示的迁移学习。找到一些好的有表明性的特征,经过特征变换把source domain和target domain的特征变换到一样的空间,使得这个空间中source domain和target domain的数据具备相同的分布,而后进行传统的机器学习就能够了。

特征变换这一块能够举个栗子:好比评论男生的时候,你会说“好帅!好有男人味!好有担当!”,评论女生的时候,你会说“好漂亮!好有女人味!好温柔!”能够看出共同的特征就是“好看”。把“好帅”映射到“好看”,把“好漂亮”映射到“好看”,“好看”即是它们的共同特征。

(3)Parameter-transfer(参数/模型迁移):能够被称为基于参数的迁移学习。假设source tasks和target tasks之间共享一些参数,或者共享模型hyperparameters(超参数)的先验分布。这样把原来的模型迁移到新的domain时,也能够达到不错的精度。

(4)Relational-knowledge-transfer(关系迁移):能够被称为基于关系知识的迁移学习。把类似的关系进行迁移,好比生物病毒传播到计算机病毒传播的迁移,好比师生关系到上司下属关系的迁移。最近,统计关系学习技术主导了这一领域。

3. 小结

综合第1小节和第2小节的内容,下图展现了不一样迁移学习分类中不一样方法的使用状况:

与生成对抗网络GAN同样,迁移学习一样能够在不少领域使用,同时,能够与很其余机器学习算法相结合,道理是相通的。

说到这里,前面各类方法中的统计学习实现实在是太恐怖了,我只想接下来重点介绍一下深度迁移学习的内容,即深度学习+迁移学习

4. “小王爱迁移”系列学习内容:含深度迁移学习!

本小节主要分享一下大佬的知乎专栏的学习内容,主要包括迁移学习领域经典的各大方法,用于辅助对上文的理解:

(1)迁移成分分析(TCA):Domain adaptation via transfer component analysis,2009-2011

主要思想是:属于基于特征的迁移学习方法。PCA是一个大矩阵进去,一个小矩阵出来,TCA是两个大矩阵进去,两个小矩阵出来。从学术角度讲,TCA针对domain adaptation问题中,源域和目标域处于不一样数据分布时,将两个领域的数据一块儿映射到一个高维的再生核希尔伯特空间。在此空间中,最小化源和目标的数据距离,同时最大程度地保留它们各自的内部属性。直观地理解就是,在如今这个维度上很差最小化它们的距离,那么就找个映射,在映射后的空间上让它们最接近,那么不就能够进行分类了吗?

主要步骤为:输入是两个特征矩阵,首先计算L和H矩阵,而后选择一些经常使用的核函数进行映射(好比线性核、高斯核)计算K,接着求[公式]的前m个特征值。而后,获得的就是源域和目标域的降维后的数据,就能够在上面用传统机器学习方法了。

(2)测地线流式核方法(GFK):Geodesic flow kernel for unsupervised domain adaptation,2011-2012

SGF方法的主要思想:把source和target分别当作高维空间(Grassmann流形)中的两个点,在这两个点的测地线距离上取d个中间点,而后依次链接起来。这样,由source和target就构成了一条测地线的路径。只须要找到合适的每一步的变换,就能从source变换到target了。

SGF方法的主要贡献在于:提出了这种变换的计算及实现了相应的算法。可是它有很明显的缺点:到底须要找几个中间点?就是说这个参数d是无法估计的。

GFK方法解决了SGF的问题:

  • 如何肯定source和target路径上中间点的个数。它经过提出一种kernel方法,利用路径上的全部点的积分,把这个问题解决了。
  • 当有多个source的时候,咱们如何决定使用哪一个source跟target进行迁移?GFK提出Rank of Domain度量,度量出跟target最近的source来解决这个问题。

GFK方法有如下几个步骤:选择最优的子空间维度进行变换、构建测地线、计算测地线流式核、以及构建分类器。

(3)联合分布适配(JDA):Transfer feature learning with joint distribution adaptation,2013

主要思想是:属于基于特征的迁移学习方法。是一个几率分布适配的方法,并且适配的是联合几率。JDA方法同时适配两个分布,而后很是精巧地规到了一个优化目标里。用弱分类器迭代,最后达到了很好的效果。

和TCA的主要区别有两点:

  • 1)TCA是无监督的(边缘分布适配不须要label),JDA须要源域有label。
  • 2)TCA不须要迭代,JDA须要迭代。

-------------------------------------------------------------------------------------------

(4)在线迁移学习:A framework of online transfer learning,2010-2014

这是在线迁移学习研究的第一篇文章,做者分别对同构OTL和异构OTL提出了相应的方法,就是基于SVM以及集成学习进行组合。

基本思想是:先针对可用的源域数据创建一个分类器,而后,每来一个目标域数据,就对这个新数据创建一个分类器,而后与在源域上创建的这个分类器进行组合。

核心问题是:肯定源域和新数据分类器各自应该以怎么样的权重进行组合。

(5)负迁移:提出“传递迁移学习”的解决思路,2015-2017

若是两个领域之间基本不类似,那么就会大大损害迁移学习的效果。仍是拿骑自行车来讲,拿骑自行车的经验来学习开汽车,这显然是不太可能的。由于自行车和汽车之间基本不存在什么类似性。因此,这个任务基本上完不成。这时候,能够说出现了负迁移(negative transfer)

产生负迁移的缘由主要有:

  • 源域和目标域压根不类似,谈何迁移?------数据问题
  • 源域和目标域是类似的,可是,迁移学习方法不够好,没找到可迁移的成分。 ------方法问题

所以,在实际应用中,找到合理的类似性,而且选择或开发合理的迁移学习方法,可以避免负迁移现象。

随着研究的深刻,已经有新的研究成果在逐渐克服负迁移的影响:

  • 杨强教授团队2015在数据挖掘领悟顶级会议KDD上发表了传递迁移学习文章《Transitive transfer learning》,提出了传递迁移学习的思想。
  • 杨强教授团队在2017年人工智能领域顶级会议AAAI上发表了远领域迁移学习文章《Distant domain transfer learning》,能够用人脸来识别飞机。

这些研究的意义在于,传统迁移学习只有两个领域足够类似才能够完成,而当两个领域不类似时,传递迁移学习却能够利用处于这两个领域之间的若干领域,将知识传递式的完成迁移。这个是颇有意义的工做,能够视为解决负迁移的有效思想和方法。

(6)开放集迁移学习:Open Set Domain Adaptation,2017

现有的domain adaptation都针对的是一个“封闭”的任务,就是说,source和target中的类别是彻底同样的,source有几类,target就有几类。这些方法都只是理想状态下的domain adaptation。而真正的环境中,source和target每每只会共享一些类的信息,而不是所有。

整个文章的解决思路大体是这样的:

  • 利用source和target的关系,给target的样本打上标签
  • 并将source转换到和target同一个空间中

二者依次迭代,直到收敛。做者根据target domain是否有label,把问题分红了unsupervised和semi-supervised domain adaptation,而后分开解决。

(7)张量迁移学习:When Unsupervised Domain Adaptation Meets Tensor Representations,2017

现有的那些domain adaptation方法都只是针对向量(vector)的。而这种表示所带来的问题就是,当把这些数据应用于高维度表示(如卷积)时,数据首先要通过向量化(vectorization)。此时,没法精准完备地保留一些统计属性。因此做者提出,不通过向量化来进行domain adaptation的方法,很天然地用到了tensor(张量)

(8)从经验中学习迁移:Learning To Transfer,2018

提出了一个新颖的研究问题:相似于增量学习,如何最大限度地利用已有的迁移学习经验,使得其对新问题的泛化能力很好?同时也能够避免一出现新问题就从头进行学习。

在解决问题的方法上,虽然用的都是老方法,可是可以想到新已有方法很好地应用于这个问题。引来的拓展思考:在深度网络中如何持续学习?

(9)探秘任务迁移:Taskonomy: Disentangling Task Transfer Learning,2018

诸如物体识别、深度估计、边缘检测等一些常见的计算机视觉任务,彼此之间都或多或少地有一些联系。好比,咱们很清楚地知道曲面的法线和深度是相关的:它们是彼此的梯度。但与此同时,另外一些任务咱们却不清楚,例如,一个房间中的关键点检测和阴影是如何协同工做完成姿态估计的?

已有的相关工做均忽略了这些任务的关联性,而是单独地对各个任务进行建模。不利用任务之间的相关性,无疑是十分耗时和复杂的。即便是要在不一样的任务之间进行迁移,因为不一样任务的不一样任务空间之间的联系尚不清楚,也没法实现简单有效的任务迁移。

(10)选择性对抗迁移学习:Partial Transfer Learning with Selective Adversarial Networks,2018

传统的迁移学习问题情境都是,源域和目标域的类别空间同样。在大数据时代,一般咱们会有大量的源域数据。这些源域数据比目标域数据,在类别上一般都是丰富的。好比基于ImageNet训练的图像分类器,必然是针对几千个类别进行的分类。咱们实际用的时候,目标域每每只是其中的一部分类别。

所以,就要求相应的迁移学习方法可以对目标域,选择类似的源域样本(类别),同时也要避免负迁移。可是目标域一般是没有标签的,不知道和源域中哪一个类别更类似。做者指出这个问题叫作partial transfer learning(部分迁移学习)。

(11)联邦迁移学习:2018

事实上,Google在2017年的一篇论文里进行了去中心化的推荐系统建模研究。其核心是,手机在本地进行模型训练,而后仅将模型更新的部分加密上传到云端,并与其余用户的进行整合。一些研究者也提出了CryptoDL深度学习框架、可扩展的加密深度方法、针对于逻辑回归方法的隐私保护等。可是,它们或只能针对于特定模型,或没法处理不一样分布数据。

正是为了解决上述这些挑战,香港科技大学杨强教授和微众银行AI团队,最近提出了联邦迁移学习 (Federated Transfer Learning, FTL)。FTL将联邦学习的概念加以推广,强调在任何数据分布、任何实体上,都可以进行协同建模学习。

这项工做在国内,是杨教授与微众银行AI团队主导,目的是创建数据联邦,以解决大数据没法聚合的问题。在国外,目前是Google在进行相关的研究。两者的区别:微众银行AI团队的作法是,用户维度部分重叠,特征维度不重叠;而Google则是反过来:特征重叠,用户不重叠。

联邦迁移学习 vs 迁移学习 vs 多任务学习

  • 多任务学习和FTL都注重多个任务的协同窗习,最终目标都是要把全部的模型变得更强。可是,多任务学习强调不一样任务之间能够共享训练数据,破坏了隐私规则。而FTL则能够在不共享隐私数据的状况下,进行协同的训练。
  • 迁移学习注重知识从一个源领域到另外一个目标领域的单向迁移。而这种单向的知识迁移,每每伴有必定的信息损失,由于一般只会关注迁移学习在目标领域上的效果,而忽略了在源领域上的效果。FTL则从目标上就很好地考虑了这一点,多个任务之间协同。
  • 迁移学习和多任务学习均可以解决模型和数据漂移的问题,这一点在FTL中也获得了继承。

-------------------------------------------------------------------------------------------

(12)深度神经网络的可迁移性:How transferable are features in deep neural networks,2014

深度网络的一个事实:前面几层都学习到的是通用的特征(general feature),后面的网络更偏重于学习特定的特征(specific feature)。

虽然该论文并无提出一个创新方法,可是经过实验获得了如下几个结论,对之后的深度学习和深度迁移学习都有着很是高的指导意义:

  • 神经网络的前3层基本都是general feature,进行迁移的效果会比较好。
  • 深度迁移网络中加入fine-tune,效果会提高比较大,可能会比原网络效果还好。
  • Fine-tune能够比较好地克服数据之间的差别性。
  • 深度迁移网络要比随机初始化权重效果好。
  • 网络层数的迁移能够加速网络的学习和优化。

(13)深度迁移学习:例如DaNN、DDC、DAN等,2014-2015

DaNN(Domain Adaptive Neural Network)的结构异常简单,它仅由两层神经元组成:特征层和分类器层。做者的创新工做在于,在特征层后加入了一项MMD适配层,用来计算源域和目标域的距离,并将其加入网络的损失中进行训练。因此,整个网络的优化目标也相应地由两部分构成:在有label的源域数据上的分类偏差,以及对两个领域数据的判别偏差。

可是,因为网络太浅,表征能力有限,故没法颇有效地解决domain adaptation问题(通俗点说就是精度不高)。所以,后续的研究者大多数都基于其思想进行扩充,例如将浅层网络改成更深层的AlexNet、ResNet、VGG等,例如将MMD换为多核的MMD等。

DDC(Deep Domain Confusion)针对预训练的AlexNet(8层)网络,在第7层(也就是feature层,softmax的上一层)加入了MMD距离来减少source和target之间的差别。这个方法简称为DDC。下图是DDC的算法插图。

从上图能够很明显地看出,DDC的思想很是简单:在原有的AlexNet网络的基础上,对网络的fc7层(分类器前一层)后加一层适配层(adaptation layer)适配层的做用是,单独考察网络对源域和目标域的判别能力。若是这个判别能力不好,那么咱们就认为,网络学到的特征不足以将两个领域数据区分开,于是有助于学习到对领域不敏感的特征表示。

DAN(Deep Adaptation Network)是在DDC的基础上发展起来的,它很好地解决了DDC的两个问题:

  • 一是DDC只适配了一层网络,可能仍是不够,由于Jason的工做中已经明确指出不一样层都是能够迁移的,因此DAN就多适配几层。
  • 二是DDC是用了单一核的MMD,单一固定的核可能不是最优的核。DAN用了多核的MMD(MK-MMD),效果比DDC更好。

DAN的创新点是多层适配和多核MMD。下图是DAN的网络结构示意图。

DDC和DAN做为深度迁移学习的表明性方法,充分利用了深度网络的可迁移特性,而后又把统计学习中的MK-MMD距离引入,取得了很好的效果。DAN的做者在2017年又进一步对其进行了延伸,作出了Joint Adaptation Network (JAN),进一步把feature和label的联合几率分布考虑了进来,能够视做以前JDA(joint distribution adaptation)的深度版。

(14)深度迁移学习文章解读:Simultaneous Deep Transfer Across Domains and Tasks,2015

针对状况:target的部分class有少许label,剩下的class无label。文章最大的创新点是:现有的方法都是domain classifier加上一个domain confusion,就是适配。做者提出这些是不够的,因此提出了还要再加一个soft label loss。意思就是在source和target进行适配的时候,也要根据source的类别分布状况来进行调整target的。其实本意和JDA差很少。

网络结构以下图所示。网络由AlexNet修改而来,前面的几层都同样,区别只是在第fc7层后面加入了一个domain classifier,也就是进行domain adaptation的一层,在fc8后计算网络的loss和soft label的loss。就如今的研究成果看来,绝大多数也都是在深度网络后加一些相关的loss层,以之来提升网络的适配性。本质并无很大的创新性。

(15)深度迁移度量学习:Deep Transfer Metric Learning,2015

已有的metric learning研究大多数集中在传统方法和深度方法中,它们已经取得了长足的进步。可是这些单纯的度量研究,每每只是在数据分布一致的状况下有效。若是数据分布发生了变化,已有的研究则不能很好地进行处理。所以,迁移学习就能够做为一种工具,综合学习不一样数据分布下的度量,使得度量更稳定。

另外一方面,已有的迁移学习工做大多都是基于固定的距离,例如MMD,所以没法学习到更好的距离表达。虽然近年来有一些迁移度量学习的工做,但它们都只考虑在数据层面将特征分布差别减少,而忽略了在源领域中的监督信息。于是,做者提出要在深度迁移网络中对度量进行学习,有效利用源领域中的监督信息,学习到更泛化的距离表达。

(16)用于部分迁移学习的深度加权对抗网络:Importance Weighted Adversarial Nets for Partial Domain Adaptation,2018

做者提出了一个深度加权对抗网络,以下图所示。网络的主要部分是:分别做用于源域和目标域的两个特征提取器(分别叫作 [公式] [公式] ),以及两个领域分类器(分别叫作 [公式][公式] )。第一个领域分类器用来筛选出源域中与目标域类似的那部分样本(或者源域中与目标领域共享的那部分类别),第二个领域分类器进行正常的domain adaptation。

本文核心创新点是,从任务出发,直观地构造出两阶段式对抗网络,对源域中与目标域共享的类别样本进行有效筛选。另外一个与已有工做不一样的地方是,做者分别对源域和目标域采用了不一样的特征提取器。

(17)基于条件对抗网络的领域自适应:Conditional Adversarial Domain Adaptation,2018

Domain adaptation问题一直以来是迁移学习和计算机视觉领域等的研究热点。从传统方法,到深度方法,再到最近的对抗方法,都在尝试解决此问题。做者在本文中提出,如今的对抗方法面临两个挑战:

  • 一是当数据特征具备很是复杂的模态结构时,对抗方法没法捕获多模态的数据结构,容易形成负迁移。
  • 二是当上面的问题存在时,domain classifier就很容易出错,因此形成迁移效果很差。

本文提出了基于条件对抗网络的领域自适应方法,主要由Condition + Adversarial + Adaptation这三部分构成。进行condition的时候,用到了一个叫作multilinear map的数学工具,主要是来刻画多个特征和类别之间的关系。

(18)深度迁移学习用于时间序列分类:Transfer learning for time series classification,2018

基本方法与在图像上进行深度迁移一致,先在一个源领域上进行pre-train,而后在目标领域上进行fine-tune。

网络的结构以下图所示。网络由3个卷积层、1个全局池化层、和1个全链接层构成。使用全链接层的好处是,在进行不一样输入长度序列的fine-tune时,不须要再额外设计池内化层。

与图像的区别就是,输入由图片换成了时间序列。注意到,图片每每具备必定的通道数(如常见的R、G、B三通道)。时间序列也有通道,即不一样维的时间序列数据。最简单的便是1维序列,能够认为是1个通道。多维时间序列则能够认为是多个通道。

 (19)最大分类器差别的领域自适应:Maximum Classifier Discrepancy for Unsupervised Domain Adaptation,2018

方法的主要思想很是简单:用源域训练的网络若是用到目标域上,确定由于目标域与源域的不一样,效果也会有所不一样。效果好的咱们就无论了,重点关注效果很差的,由于这才能体现出领域的差别性。为了找到这些效果差的样本,做者引入了两个独立的分类器 [公式][公式] ,用两者的分歧表示样本的置信度不高,须要从新训练。

 (20)异构网络的迁移:Learn What-Where to Transfer,2019

本文另辟蹊径,从根源上研究不一样架构的深度网络如何进行迁移,并提供了行之有效的解决方案。

深度网络都是对迁移学习最为友好的学习架构。从最简单的finetune(微调),到固定网络的特征提取层不变在倒数第二层加入可学习的距离,再到经过领域对抗的思想学习隐式分布距离,深度迁移学习方法大行其道。在诸多图像分类、分割检测等任务上取得了不错的效果。

纵观这些方法的思路,大多均逃脱不开一个固有的模式:源域和目标域的网络架构彻底相同,固定前若干层,微调高层或在高层中加入分布适配距离。然而,在迁移模型变得愈来愈臃肿、特定数据集精度不断攀升的同时,极少有人想过这样一个问题:

  • 这种固定+微调的模式是不是惟一的迁移方法?
  • 若是2个网络结构不一样(好比),则上述模式直接失效,此时如何作迁移?

本文将这一思路具体表述为2点:What to transferWhere to transfer

  • What部分解决网络的可迁移性:源域中哪些层能够迁移到目标域哪些层?
  • Where部分解决网络迁移多少:源域中哪些层的知识迁移多少给目标域的哪些层?

简单来讲就是:学习源域网络中哪些层的知识能够迁移多少给目标域的哪些层。

5、深度迁移学习综述

说到迁移学习,我想最时髦的就是深度迁移学习了。有了深度学习的加持,迁移学习在人工智能领域有着丰富的应用。

上一节的内容其实已经包含了深度迁移学习的不少方法,包括很是多的idea,本节就做为辅助理解用吧!

本文参考了一篇综述:A Survey on Deep Transfer Learning

这里强推大佬的知乎专栏和guthub:https://github.com/jindongwang/transferlearning

1. 基本概念

深度迁移学习是经过深度神经网络研究如何利用其余领域的知识。随着深度神经网络在各个领域的普遍应用,大量的深度迁移学习方法被提出。包括离线/在线、增量学习、生成对抗、同构/异构等,能够说是很是丰富。

2. 深度迁移学习的分类

本文将深度迁移学习分为四类:基于实例的深度迁移学习、基于映射的深度迁移学习、基于网络的深度迁移学习和基于对抗的深度迁移学习。

(1)基于实例的深度迁移学习。与迁移学习分类中的第一类是一致的,这里再也不赘述。

(2)基于映射的深度迁移学习。与迁移学习分类中的第二类是一致的,这里再也不赘述。

(3)基于网络的深度迁移学习。将原领域中预先训练好的部分网络,包括其网络结构和链接参数,从新利用,将其转化为用于目标领域的深度神经网络的一部分。

(4)基于对抗的深度迁移学习。在生成对抗网络 GAN 的启发下,引入对抗性技术,寻找既适用于源域又适用于目标域的可迁移表达。

负迁移和可迁移性测度是传统迁移学习中的重要问题。如何利用深度神经网络在无监督或半监督学习中进行知识的迁移会受到愈来愈多的关注。

补充一点,元学习与迁移学习的区别联系是什么?

  • 元学习关注的是一组任务T~p(T),元学习的目标是从T1,T2...中不断学习,从中学到更通用的知识,从而具备适应新任务Ti的能力,它关注的是任务T到Ti这个过程。
  • 迁移学习一般只有一个源域A(固然能够有多个),一个目标域B,目标是学习A到B的迁移,更关注的是A到B的这个过程。

固然,二者有不少重叠之处,要结合着看,互相补充,互相学习。

6、其余概念介绍:知识蒸馏、增量学习

1. 知识蒸馏

知识蒸馏被普遍的用于模型压缩和迁移学习当中。

知识蒸馏能够将一个网络的知识转移到另外一个网络,两个网络能够是同构或者异构。作法是先训练一个teacher网络,而后使用这个teacher网络的输出和数据的真实标签去训练student网络。

  • 能够用来将网络从大网络转化成一个小网络,并保留接近于大网络的性能。
  • 能够将多个网络的学到的知识转移到一个网络中,使得单个网络的性能接近emsemble的结果。

2. 增量学习

主要关注的是灾难性遗忘,平衡新知识与旧知识之间的关系。即如何在学习新知识的状况下不忘记旧知识。

引用Robipolikar对增量学习算法的定义,即一个增量学习算法应同时具备如下特色:

  • 能够重新数据中学习新知识
  • 之前已经处理过的数据不须要重复处理
  • 每次只有一个训练观测样本被看到和学习
  • 学习新知识的同时能保持之前学习到的大部分知识
  • 一旦学习完成后训练观测样本被丢弃
  • 学习系统没有关于整个训练样本的先验知识

在概念上,增量学习与迁移学习最大的区别就是对待旧知识的处理

  • 增量学习在学习新知识的同时须要尽量保持旧知识,无论它们类别相关仍是不相关的。
  • 迁移学习只是借助旧知识来学习新知识,学习完成后只关注在新知识上的性能,再也不考虑在旧知识上的性能。

 

若是您对异常检测感兴趣,欢迎浏览个人另外一篇博客:异常检测算法演变及学习笔记

若是您对智能推荐感兴趣,欢迎浏览个人另外一篇博客:智能推荐算法演变及学习笔记 CTR预估模型演变及学习笔记

若是您对知识图谱感兴趣,欢迎浏览个人另外一篇博客:行业知识图谱的构建及应用基于图模型的智能推荐算法学习笔记

若是您对时间序列分析感兴趣,欢迎浏览个人另外一篇博客:时间序列分析中预测类问题下的建模方案 深度学习中的序列模型演变及学习笔记

若是您对数据挖掘感兴趣,欢迎浏览个人另外一篇博客:数据挖掘比赛/项目全流程介绍 机器学习中的聚类算法演变及学习笔记

若是您对人工智能算法感兴趣,欢迎浏览个人另外一篇博客:人工智能新手入门学习路线和学习资源合集(含AI综述/python/机器学习/深度学习/tensorflow)人工智能领域经常使用的开源框架和库(含机器学习/深度学习/强化学习/知识图谱/图神经网络)

若是你是计算机专业的应届毕业生,欢迎浏览个人另一篇博客:若是你是一个计算机领域的应届生,你如何准备求职面试?

若是你是计算机专业的本科生,欢迎浏览个人另一篇博客:若是你是一个计算机领域的本科生,你能够选择学习什么?

若是你是计算机专业的研究生,欢迎浏览个人另一篇博客:若是你是一个计算机领域的研究生,你能够选择学习什么?

若是你对金融科技感兴趣,欢迎浏览个人另外一篇博客:若是你想了解金融科技,不妨先了解金融科技有哪些可能?

以后博主将持续分享各大算法的学习思路和学习笔记:hello world: 个人博客写做思路

相关文章
相关标签/搜索