Transfer Learning
前言
真实图像任务场景下,往往存在拥有数据并不直接与任务相关的问题。此外,数据可能属于同一个域,但是不同的任务,例如,猫的图片和老虎的图片。或者,训练图片的风格和目标task的风格完全不一样。
对于人来说,人是经常在做且较容易做类比,迁移学习的。
Source Data 表示与当前任务没有直接关系,但是这种没有直接关系的定义非常模糊。
迁移学习分类
Model Fine-tuning
目标数据和源数据都是有标签的。
- Target data: 非常少(如果非常多的话就可以直接在该数据上训练模型)
- Source data: 非常多
如果target data非常非常少,可以叫One-shot learning。
示例:
- Target data:辨识某个人的声音,但是声音可能非常少。
- Source data:用很多人的声音样本
用Source data训练一个模型,再根据目标任务进行fine-tune,即Source data当做模型初始化参数。但如果Target data 非常非常少,就容易过拟合。
Conservative Training
增加一些正则,防止fine-tune后的模型与原模型差距过大。
Layer Transfer
训练好原模型后,将某几个层训练参数拷贝到新模型中,只有部分层是没有参数的。
这样仅训练剩下几层的参数来防止过拟合的发生。
Which layer can be transferred?
- Speech:通常只复制最后几层,因为可能前几层用来提取特征,后几层根据高阶特征来进行任务,因此后几层可能和说话者无关的。
- Image:通常复制前面几层,CNN前几层用来学习图片的模式。
Multitask Learning
Progressive Neural Networks
如果task1和task2 非常不像,可以将task1的隐层接到task2的隐层,这样最差的情况就是将task1的隐层的影响减少到0。
Domain-adversrial training
- Source data: Training data
- Target data: Testing data
源数据有标签,但是目标数据没有标签,但是两个数据之间的分布是不同的。
目标是将不同domain的数据的特征可以分类到一起,因此增加一个Domain classifier,同时增加一个Label predictor类似多任务。
同时,这两个任务是有对抗的特性的。
Zero-shot Learning
- Source data: Training data
- Target data: Testing data
源数据和目标数据是完全不同的任务,例如:所给数据是猫和狗的图片,而目标数据是草泥马的图片。
用多个丰富的特性来表示每个类别。
Attribute embedding
将图片通过NN进行embedding,将其对应属性进行embedding,让这两个embedding越相近越好。当模型未见过的图片输入时,同样转为embedding,看看和那个属性相近。
- 将图片进行映射
- 将word or attribute进行映射
但这样会有问题,因为模型将所有的图片和word都投影到一个点,就结束了,图片之间没有差别。
如果,我们知道图片和word的对应关系,可以做类似负采样的方法,将图片和不对应word的距离拉大。