简述迁移学习

本篇并不是对迁移学习的一个概述,只是简单说明什么情景应该使用迁移学习,以及迁移学习的一些基本算法思路

首先介绍的是使用情景

Data not directly related to the task considered

直译过来就是使用的数据与任务目标不是直接相关。举个例子来帮助大家明白这句话,我是在今年夏天时的一个比赛中了解到这个算法的,当时我的任务是通过分析 EMG (肌电信号)来识别以及预测手势。当时的问题是,我们小组内并没有足够的数据,这里的数据指的是使用我们小组研发的 EMG 采集器收集的数据,基本都是组内人员自己制作的。那么问题在于,我们花费了大量时间收集数据,但是数据量还是相对而言较少,如果直接将这些数据给神经网络训练的话,最后得到的结果可能无法避免的过拟合。

这种情况就可以采用迁移学习的思想,使用自己的少量数据与使用其他与当前任务相关不大的数据源一同训练。在上述例子中,我最后使用了国外的一个大学实验室收集的 EMG 信号当 Source Data。

这里插入一下迁移学习中的两个常用术语

  • Target Data:与当前 Task 有关的数据
  • Source Data:与当前 Task 无关的数据

上诉两种数据都可以细分为 labeledunlabeled

在上面的例子中,我们小组内自己收集的数据就是 Target Data,国外实验室的数据就是 Source Data。


下面就是针对数据的不同形式,从而对迁移学习常用算法进行一个简单介绍。我将从 Source Data 与 Target Data 的 labeled 与 unlabeled 两个状态分为四个较大的模块。具体可以见下图

Model Fine-Tuning

使用数据情景:Target Data 与 Source Data 都是 labeled

Task description

  • Target Data: (xt, yt) -> (very little)
  • Source Data: (xs, ys) -> (a large amount)

“One-shot learning: only a few examples in target domain”

具体思想

Training a model by source data, then fine-tune the model by target data.

该方法主要面临问题:因为只有有限的 target data,所以要谨慎处理过拟合问题

一些防止过拟合的训练方法

  1. Conservative training

方法主要思想

加入限制,让 Source data 训练出的 model 与 Target data 训练出的 model 差距不要过大

  1. Layer Transfer

方法主要思想

先用 Source Data 训练好一个模型,将该模型的大部分 Layer 复制到新模型,用 Target Data 训练该模型中非复制部分的 Layer。

该方法的优点

训练 Target Data 时只用考虑非常少的参数

那么使用该方法时,我们要将哪些 layer 复制过去呢?

答案是需要分情况讨论。拿目前主要的两个应用方面,语音识别与图片识别,来举例。

  • 语音识别:通常复制最后几层的 layer,因为这最后几层的作用往往是分辨词汇,与语种的关系不是很大
  • 图片识别:通常是复制前几层 layer,因为前几层往往是分辨简单的几何图形,与最后的图片识别结果关系不是很大

Multitask Learning

使用数据情景:Target Data 与 Source Data 都是 labeled

Task description

  • Target Data: (xt, yt) -> (very little)
  • Source Data: (xs, ys) -> (a large amount)

“Multitask Learning: The multi-layer structure makes NN suitable for multitask learning.”

简单来说,通过训练一个神经网络,使得最后得到多种分类。一般该模型主要分为两类。

  • 第一类是输入的数据是相同的类型,最后得到多个不同的分类。比如输入都是图片,最后的结果是得到猫的图片与狗的图片。
  • 第二类是输入的数据不是相同的类型,最后得到多个不同的分类。

下面举一个使用多任务学习的例子,是一个语音识别模型。

输入数据为“声音(acoustic features)”,输出的类别分别为“法语,德语,西班牙语,意大利语和汉语”

Domain-Adversarial Training

使用数据情景:Target Data 是 unlabeled 的,Source Data 是 labeled 的

Task description

  • Target Data: (xt, yt) -> (testing data)
  • Source Data: (xs, ys) -> (training data)

“Domain-Adversarial Training: Not only cheat the domain classifier, but satisfying label classifier at the same time”

上图神经网络中,不同部分的具体分工见下:

  • Feature extractor: Maximize the label classification accuracy + Minimize domain classification accuracy
  • Label predictor: Maximize the label classification accuracy
  • Domain predictor: Maximize the domain classification accuracy

Ps:本来是想自己做的,发现ppt绘制3D图形太操蛋,就直接挪用了介绍该算法的论文里的图片。论文地址

Zero-shot Learning

使用数据情景:Target Data 是 unlabeled 的,Source Data 是 labeled 的

Task description

  • Target Data: (xt, yt) -> (testing data)
  • Source Data: (xs, ys) -> (training data)

其中,Target data 与 Source data 是 in different tasks,即在 Source data 中从未出现过 Target data 中的数据。

“Zero-shot Learning: Representing each class by its attributes”

该模型适用于语言识别,因为语言 data 中不可能出现所有单词的发音,所以我们建立一个子表,让模型去识别发音,让识别的发音与子表中的数据去匹配。

下面为了方便理解,使用一个简单的图片识别做一个浅显易懂的例子,下图中分别对狗、鱼还有猩猩划分了一个简单的子表

其中,分别对其是否有毛发、腿的数量与是否有尾巴等进行判断,若有则标记为“1”,没有则为“0”。子表建立好之后,用输入的数据进行匹配,若该数据有皮毛有四条腿而且有尾巴,那么其大概率是一只狗。

在训练时,我们不直接辨识那张图片属于哪一类,而是去辨识每张图片它具备怎样的 attribute。

在测试时,尽管输入一张训练集中没有的事物,但只要找到图中的 attribute,然后查找表,看表中的那个分类最接近结果。

有时,你的 attribute 会很复杂,这时可以借鉴词向量的思想,对其进行 embedding;甚至当我们没有 dataSet 时,我们可以借用 word2vec,即同时使用 Attribute embedding + word embedding,此时需要计算 loss function。当然,还有一种更简单的 zero-shot learning 方法,即 Convex Combination of Semantic Embedding,读者有兴趣的话可以自行去网上搜索这些算法的具体实现方式,这里写的话会占用超级长的篇幅,并且与“简述”这个主题不符。

Self-taught Learning

使用数据情景:Target Data 是 labeled 的,Source Data 是 unlabeled 的

Task description

  • Target Data: (xt, yt)
  • Source Data: (xs, ys)

该思想有两种主要解释方法,分别针对于非监督学习和监督学习

针对非监督学习:

“Self-taught Learning: Learning to extract better representation from the source data”

针对监督学习:

“Self-taught Learning: Extracting better representation for target data”

Self-taught Clustering

使用数据情景:Target Data 与 Source Data 都是 unlabeled 的

Task description

  • Target Data: (xt, yt)
  • Source Data: (xs, ys)

很少有人在这种情况下,即两个数据集都是 unlabeled 的,使用迁移学习,大家对这个思想了解下就好,论文地址