迁移学习基础

1、迁移学习简介

  学习算法通常被设计用来单独处理任务或问题,即根据特定的领域、数据和任务,对每个模型进行单独的训练;而迁移学习是通过从已学习的相关任务中转移知识来改进学习的新任务。

2、迁移学习的优点

  迁移学习除了提供重用已建模型的能力外,可以使用在缺少大量数据但存在其他不直接相关的数据,还具有以下优点:

   提升基线性能 :当使用迁移学习时,基线性能可能会而得到提升。
   节省模型开发时间 :与从零开始学习的目标模型相比,利用迁移学习能大大缩短模型学习所需的时间。
   提升最终性能 :利用迁移学习可以获得更高的最终性能。
.
   如下图,相比于无迁移学习,迁移学习有更好的基线性能(更高的起点)、效率提升(更高的斜率)和更好的最终性能(更高的渐近线)。
在这里插入图片描述

3、迁移学习的概述

   在迁移学习中,有与任务直接关系的数据,还有与任务没有直接关系的数据,根据是否有标签,可以分成四类:

3.1 第一类迁移学习

   第一类迁移学习是 target data 和 source data 都是有标签的情况。这种情况下我们可以进行模型的微调多任务学习

模型微调

   假设现有一组大量的 source data 和一组少量的 target data,并且它们都有标签。
在这里插入图片描述
   当目标数据集远小于源数据集时,微调有助于提升模型的泛化能力。
在这里插入图片描述

如上图所示,微调由以下4步构成:

1、在source data 数据集上预训练一个神经网络模型,即源模型。
2、创建一个新的神经网络模型,即目标模型。它复制了源模型上除了输出层外的所有模型设计及其参数。
   假设这些模型参数包含了源数据集上学习到的知识,且这些知识同样适用于目标数据集。
   还假设源模型的输出层跟源数据集的标签紧密相关,因此在目标模型中不予采用。
3、为目标模型添加一个输出大小为目标数据集类别个数的输出层,并随机初始化该层的模型参数。
4、在target data 数据集上训练目标模型。将从头训练输出层,而其余层的参数都是基于源模型的参数微调得到的。

.

多任务学习

   多任务学习,就是希望机器能同时学会多个不同的任务。存在两种情况,一种是不同的任务可以共用同一组输入特征,另一种是不同的任务不可以共用一组输入特征。
.
   如下图,假设任务A和任务B可以共用同一组输入特征,即表明它们前面几层是共用的,只是在某个隐藏层会产生两个分支,一条产生的是任务A的分支,另一条是任务B的。
在这里插入图片描述
.

   如下图,假设任务A和任务B不可以共用同一组输入特征,那么可以在这两个神经网络中对不同的输入特征做一些转换,然后丢到共用的网络层中去,再从共用的层中分两个分支出来。

.

3.2 第二类迁移学习

  第二类迁移学习是针对 target data 无标签的情况,也分两种情况,第一种是领域对抗性训练,第二种是零次学习。

领域对抗性训练

  领域对抗性训练的前提是 source data 和 target data 有相同的任务,在概念上可以把有标签的 source data 当成训练数据,把无标签的 target data 当成测试数据,但是这样的效果肯定是很差的,因为它们的分布不同。
在这里插入图片描述

  以手写数字识别为例,现有标签的 MNIST 的数据,识别的对象是无标签的 MNIST-M 的数据,在 MNIST-M 中的数字甚至是彩色的,显然它的数据样本分布和原来的 MNIST 分布不一样,如下图:
在这里插入图片描述

  如果不对数据做任何处理,直接用 source data 来训练一个分类器,它输入是一个图像,输出是该图形的类别,那得到的特征分布则可能是下面这样子:
在这里插入图片描述
MNIST 的数据是蓝色的点,可以看到它们分成一群一群的,把几群数据的点放到分类器中得到的结果可能是左边的样子,能区分出4,0和1。 但是把与 MNIST 分布不同的 MNIST-M 手写数字的图放到到这个分类器中去,它们的特征分布可能像红点一样,红点和蓝点根本没有交集。如果这个NN无法用同样的特征表示这两种数据,那么就会无法得到好的分类结果。

   因此,所以需要特别的处理,让它们有同样的分布。Domain-adversarial training 可以看成 GAN 的一种,可以把 source data 和 target data 转换到同样的领域上,让它们的分布相同。我们知道在一个NN中,前面几个网络层做的事是特征抽取,如下图所示,这个特征抽取器可以把不同领域的source data和target data都转成同样的特征。

在这里插入图片描述
转成同样的特征,也就是希望红点和蓝点的分布是混合在一起,如下图:
在这里插入图片描述
  如何让特征抽取器把不同领域的 source data和target data 转成同样的特征?这里需要引入一个领域的分类器 Domain Classifier,如下图所示,它也是一个神经网络。
在这里插入图片描述
Domain-adversarial training 作用是侦测出现在特征抽取器输出的特征是属于哪个领域的(来自哪个分布的),而 Domain Classifier 的作用就是去除 source 领域和 target 领域不一样的地方,让提取出来的特征分布接近可以骗过领域分类器。但是如果只有这两个神经网络是不够的,因为绿色的特征抽取器可以轻易的骗过红色的分类器,只要它不管输入是什么,只把所有的输出都变成0就可以了,所以需要引入标签预测器(Label predictor)。

  现在特征抽取器不仅要骗过分类器,还要让预测器尽量有准确的预测结果,这是一个很大的神经网络,但是这三个不同的部分有不同的目标。用梯度下降来训练,红色的分类器部分要调整参数,去让分辨领域的结果越正确越好;蓝色的预测器需要调参数,让标签的预测正确率越高越好;如图4所示梯度反向传播过程。
在这里插入图片描述
.

零次学习

  零次学习是指 source data 和 target data 的任务都不相同。
在这里插入图片描述

   例如,source data 的任务是猫和狗的分类,而 target data的任务是马和羊的分类。
在这里插入图片描述
   target data 中需要正确找出马,但是 source data 中都没出现过马,那要怎么做这件事情呢?可以联想到语音识别,语音识别一直都有训练数据(source data)和测试数据(target data)是不同任务的问题。 很有可能在测试数据中出现的词汇,在训练数据中从来没有出现过。语音识别在处理这个问题的时候,做法是找出比词汇更小的单位。通常语音识别都是拿音位(phoneme,可以理解为音标)做为单位。如果把词汇都转成音位,在识别的时候只去识别音位,然后再把音位转换为词汇的话就可以解决训练数据和测试数据不一样的问题。其实在图像上的处理方法也很类似,这里不展开。

3.3 第三类迁移学习

   第三类迁移学习是自我学习。
   自我学习(Self-taught learning)其实和半监督学习很像,都是有少量的有标签数据,和非常多的无标签数据。但是与半监督学习有个很大的不同是,有标签数据可能和无标签数据是没有关系的。

3.4 第四类迁移学习

   第四类迁移学习是自学成簇。如果 target data 和 source data 都是无标签的话,可以用Self-taught Clustering来做。可以用无标签的 source data,可以学出一个较好的特征表示,再用这个较好的特征表示用在聚类上,就可以得到较好的结果。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值