您的位置:首页 > 其它

迁移学习总结(One Shot Learning, Zero Shot Learning)

2017-09-05 12:58 337 查看

目录

目录

迁移学习
综述

Source Data 与Target Data 都有标签
Fine-tuning

Multitask Learning

Source Data 有标签Target Data 没有标签
Domain-adversarial training

Zero-shot Learning

Source Data没有标签 Target Data 有标签
Self-taught Learning

Self-taught learning

Source Data 与Target Data 都没有标签
Self-taught Clustering

迁移学习

综述

这段时间要做元学习相关的工作所以,首先对迁移学习了简单的学习分类,接下来会持续更新对于元学习论文的阅读还有理解。

以前接触最多的是图像的分类问题,我们将一个很大的数据集分为两个部分,一部分作为训练集,剩下的部分作为测试集。我们在训练集上面根据神经网络的基础算法比如back propagation 和 SGD算法对网络进行训练,训练结束之后用测试集对网络的泛化能力进行测试,通常用准确率表示。这就是简单的深度学习,这些学习任务的重点是训练出一个泛化能力很强的网络,由于是从相同的数据集里面抽离出来的,所以训练集还有测试集的种类都是相同的,没有多余的类。比如说,MNIST是一个简单的手写数字识别的库,训练集和测试集都是手写的数字,只包含0,1,2,3,4,5,6,7,8,9,0 十个数,不会让你完成其他的任务。

相类似的问题如下图:



可以看到在后面的两个任务里面做了我们看起来毫无关系的迁移学习,这实现起来是相当困难的,甚至可能不会取得很好的效果。

更多的例子见:1 and 2

下面我们对目前存在的迁移学习的种类进行分类,在迁移学习的学习任务中通常包括两个集合,Source Data还有 Target Data,source data。source data是我们解决问题之前就知道的相关的数据,它和Target任务之间存在一定的关系。Target Data

Source Data 与Target Data 都有标签

Fine-tuning

任务描述:Source data: (xs,ys) 拥有大量的数据。然而,Target data:(xt,yt)只有少量的数据。

简单的例子: (supervised) speaker adaption

Source data: audio data and transcriptions from many speakers

Target data: audio data and its transcriptions of specific user

核心思想:training a model by source data, then fine-tune the model by target data,也就是说用大量的source data进行训练然后等到做实际的任务的时候就用Target Data对网络进行微调。在这个过程中,防止过拟合的出现显得尤为重要,这也是Model Fine-turning 的挑战。

简单的分类

1:Conservative Training



可以从上图看到,我们先用Source Data进行参数的训练,然后将训练好的参数考到Target Data的网络中(网络结构相同),然后用Target Data中的少量的数据对网络的参数进行微调达到迁移学习的目的,但是这个过程很可能会产生overfitting,为了解决这个问题,我们采用了下面的方法



为了防止过拟合的发生,我们通常选择上图所示的方式,就是固定大多数的参数,只对神经网络中的某一些层进行训练,根据以往的经验,总结出了规律:

Which layer can be transferred (copied)?

Speech: usually copy the last few layers

Image: usually copy the first few layerswangwang

也就是当遇到语音识别的问题时,往往固定最后面的参数,然后用Target Data训练前面的层的参数,然而 当遇到Image问题时,通常选择保存前面的层的参数,然后对后面的层的参数进行微调。

Multitask Learning

多任务学习简单的理解就是,想让你用一个网络完成多种功能,甚至这个网络在完成多个任务训练之后,产生的效果比训练比训练单独的任务的效果好。



可以看到,我们将speech的数据输入到一个网络中,然后在网络的某一层分为多个任务,然后对多个任务进行训练,在前面共同的层里面会保存这些语言的共同的特征,这样的话,识别的效果甚至比单独针对于特定语言的训练结果好,这里需要注意的问题是:这些任务之间要具有一定的相似性才行,比如,他们都是语言,只不过是语言的不同的分支,这些不同的task也可以用来做猫科动物,犬科动物等等的识别,相信比单独做效果要好。

Multi-task learning for multiple language translation

如果我们希望实现一个网络,他进行初始的训练之后具有一定的经验,比如说我们先学会了打篮球,然后用打篮球的网络去训练打排球,但是我们又不希望忘了打篮球的经验?



我们用一定的数据训练网络1,网络学会任务一的时候,我们用网络做任务一的经验去训练网络二同时不希望破坏网络一,这个时候我们将任务一的output按照图片所示给网络二,但是在更新参数的时候只更新网络二的参数,这样就不会改变网络一的参数。同时可以对网络2进行训练,但是这样做的话网络的参数会无限制增大,这会导致参数爆炸,所以为了解决这个问题,DeepMind又想出了另外一种方法。

PathNet,它会对网络规模做一定的限制,对减少网络参数非常有意义。

Source Data 有标签,Target Data 没有标签

Domain-adversarial training

这种方法类似于GAN,我没有详细的了解这种方法,因为感觉和我目前要做的东西没有相关性。这里提供原文,有兴趣的可以自己去看看。

Unsupervised Domain Adaptation by Backpropagation

Zero-shot Learning

这类问题可以用下面方式进行描述:

Source Data 有标签而Target Data没有标签,同时Train和Test完成的任务是不同的。比如说,Source Data 是一些具有标签的小动物,猫猫狗狗。但是Target Data是草泥马的图片,并且没有标签告诉你这个是草泥马。问题描述如下图所示:



那么这个问题怎么去解决呢?第一个解决方案是进一步细化特征,比如说我们原来训练了猫,狗,然后用这个网络去测试一个我们都没有见过的物种,那么很明显是不能得到很好的结果的,那么如果是人,他就会进行推断。比如,这个物种,有几只眼睛几条腿。根据这些特征推断这个物种可能是哪种物种的变异体或者是近亲。



举个例子,我们将动物的特征细化到是不是两个眼睛,是不是四条腿,是不是毛茸茸的,用多少条腿走路等等的信息,这样的话,训练的时候我们就可以训练出一个网络,这个网络可以识别出图片中特征的个数,这个时候当我们见到没有见过的生物的时候仍然可以通过特征对他们进行大致的识别和区分。

当没有source data 的时候,我们使用可以通过Convex Combination of Semantic Embedding的方法进行优化,具体的实现方式比较简单,比如说我们训练完了ImageNet 的网络,输入一张图片进行测试的时候网络会对图片有预测,预测的结果是5个,每个结果都会给出一定的概率,比如说举下面这个例子:



这个例子中 ,我们选择了一张狮虎兽的照片输入网络进行测试,网络的输出结果是50%是狮子,50%是老虎,那么我们可以把两个的Vector做加权平均,得到的结果更加的准确。



Source Data没有标签 Target Data 有标签

Self-taught Learning

Self-taught learning

Source Data 与Target Data 都没有标签

Self-taught Clustering

Self-taught Clustering
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  迁移