简介
比如我们已经会编写Java程序,就可以类比着来学习C++,都是面向对象的语言,就很快学会了,或者在学会骑自行车之后,骑摩托车也自己比较容易了,因为这两种交通工具有许多相似之处。迁移学习,总结起来就是说我们要帮助机器获得举一反三的能力。
几种分类
-
基于实例的迁移:
- 通过权重的分配,来分别作用到源域和目标域来进行迁移,关于什么是源域,什么是目标域,这里可以先不用细究,你就明白是两个不同的空间就行了,具体的概念,后面的部分会详细的进行概述
- 举例:比如说在源域中有一个样本和目标域中的一个样本非常的相似,那么我们就可以加大此样本对应的权重。
-
基于特征的迁移:
- 将源域和目标域的特征变换到同一个空间。
- 举例:比如说在两个域上的feature具有很大的区别,那么我们就可以通过将这两个域的feature变换到同样的空间,这个时候我们就可以很方便的研究这两个域上的相关内容和性质了。
-
基于模型的迁移:
- 通过源域和目标域的参数共享机制
- 举例:这也是我们在做DL中用到最多的一个方法了,比如说,将pre-trained的模型拿过来,通过固定一些layer的parameters,修改部分layer的parameters得到最终的非常好的结果。
-
基于关系的迁移:
- 利用源域中某种一般性的逻辑关系进行迁移
几种具体迁移方法
介绍主要侧重于训练集有标记的方法,训练集无标记的方法仍需进一步学习
训练集目标集均有标记
微调
-
conservative training
此处的关键是确保参数变化不大,避免过拟合
-
Layer transfer
copy几层layer到新的模型,只训练没有被copy的层
几种策略
- 语音:往往copy最后几层,前几层从声音讯号到发音方式(主要需要迁移的部分),后几层与说话者无关系。
- 图片:前面copy前面几层,前几层是检测最简单的特征(例如直线、曲线),泛用性较强,后几层往往包含更多抽象特征,需要迁移。
多任务学习
- 可以共用输入:主要用于多层结构的学习共用前几层,后几层分别处理:
- 不可共用输入:共用中间几个layer
常见的使用:
例如单语言翻译为多种语言,在训练中文时即便借鉴英文(或其他语言)的知识,也可带来训练速度的提升:
渐进式神经网络(仍待提升)
所有的之前任务的网络,保留并且fix,每次有一个新任务就新建一个网络(一列)。而为了能使用过去的经验,他们同样也会将这个任务的输入输入进所有之前的网络,并且将之前网络的每一层的输出,与当前任务的网络每一层的输出一起输入下一层。
目前看来仍有较大的局限性,需要有相同的input feature
目标集无标记
Domain-adversarial learning
可以消除掉domain之间的区别
方法:在提取完Feature之后,增加一个domain classifier,再交给最后的classifier
我们希望特征可以尽可能的混合在一起
此处和GAN有关(不太了解)
结构大致如下:
feature extractor不仅要尝试骗过domain classifier,还要(保留足够特征)满足label predictor的需要。它要提取一个供B和P共享的feature,这个feature有两个目标:最小化目标loss(帮助B);最大化二分类误差(对抗P)。Why?
所谓的domain adaption,其实也就是feature对于两个不同的域是自适应的,所以我们的这个feature尽可能让两个域区分不开,feature自己不就渐渐趋于域自适应了吗?
feature extractor希望将两个domain提取出来的feature尽可能的混合在一起。但是domain classifier却希望他能够尽可能的把从feature extractor中提取出来的feature划分到两个domain中。所以增加一个负向梯度优化提供给domain classifier,DC必须努力不能被骗过,否则就无法优化FE的特征提取能力。
zero-shot learning(零次学习)
希望模型能够对其从没见过的类别进行分类,让机器具有推理能力,实现真正的智能。其中零次(Zero-shot)是指对于要分类的类别对象,一次也不学习。
用attributes表示每一个类,标记每种类型有哪些特性,需要有足够的attributes,它的维度是固定的,它包含了能够较充分描述数据集中类别的属性。
经过神经网络之后,输出对应的特征,然后进行查表。
假设我们的模型已经能够识别马,老虎和熊猫了,现在需要该模型也识别斑马,那么我们需要告诉模型,怎样的对象才是斑马,但是并不能直接让模型看见斑马。所以模型需要知道的信息是马的样本、老虎的样本、熊猫的样本和样本的标签,以及关于前三种动物和斑马的描述。
attribute embedding
让attribute embedding和word embedding尽可能的接近
假设目标函数是这个:
不妨思考一下,这个公式合理吗?
显然是不合理的,因为这样可能会导致所有的向量都聚在一起,所以应该还要考虑和其他向量的距离:
(k是自己定义的一个常量)
zero loss:
既要保证同类相近,又要保证不同的类尽可能的远
convex combination of semantic embedding
lion和tiger概率相近,则将这两个的向量混合,查看他更接近哪一个word embedding
对比
测试图片 卷积神经网络 Domain-adversarial zero-shot
翻译的zero-shot learning
已知英文<->韩文,英文<->日文
可以做到韩文<->日文
语言encode进向量空间再decode:
可以发现多个语言的同一种意思会在同一块空间,也可以理解为机器“发明”了自己的语言
训练集无标记目标集有标记
self-taught learning
和半监督学习不同(但可以说相似)
学习如何提取源数据的更好的表示(无监督方法)
获取目标数据的更好表示
均无标记
self-taught Clustering
和普通的transfer learning不同
以后有机会学习一下