【转载】 迁移学习简介(tranfer learning)
原文地址:
https://blog.csdn.net/qq_33414271/article/details/78756366
土豆洋芋山药蛋
--------------------------------------------------------------------------------------------------------
目录:
一、什么是迁移学习?
二、为什么要迁移学习?
三、具体怎么做?
3.1目标数据和原始数据都有标签
3.1.1模型Fine-tune
3.1.2模型Multitask Learning
3.2原始数据有标签,目标数据没有标签
3.2.1域对抗 Domain-adversarial training
3.2.2零样本学习 Zero-shot Learning
四、总结一下
一、什么是迁移学习?
迁移学习将一个场景中学到的知识迁移到另一个场景中
达叔也说将来迁移学习也会向现在的机器学习一样的火
例如将猫狗分类的学习模型迁移到其它相似的任务上面,用来分辨老鹰和布谷鸟(因为都是拍摄的真实图片,所以属于相同的域,抽取特征的方法相同),或者是分别卡通图像(卡通图像和真实图片属于不同的域,迁移时要消除域之间的差异)
二、为什么要迁移学习?
使用深度学习技术解决问题的过程中,最常见的障碍在于:模型有大量的参数需要训练,因此需要海量的训练数据作支撑
在面对某一领域的具体问题时,通常可能无法得到构建模型所需的规模的数据
借助迁移学习,在一个模型训练任务中针对某种类型数据获得的关系也可以轻松地应用于同一领域的不同问题
三、具体怎么做?
具体有如下方法:
由于在最后一列的两种情况中,截止写博客的时间还应用的不广,所以就先介绍第一列的两种情况。
3.1目标数据和原始数据都有标签
3.1.1模型Fine-tune
任务现状:
1. 原始数据和目标数据都有标签
2. 目标数据很少
例子:(有监督学习)电商小品类商品识别
源数据:Imagenet多种物体图片
目标数据:电商小品类商品图片
基本思想:
1.用原始Imagenet训练一个效果比较好的模型
2.用训练好的模型在自己的数据集上进行调优(重点:微微调整,防止过拟合)
模型Fine-tune实现方法:
方法1:保守训练 Conservative Training
方法2:层迁移 Layer Transfer
方法1:保守训练 Conservative Training
保守训练的做法:
先训练好一个Model,得到参数和是某类图片的概率向量,接着有两种不同角度来训练新的数据(注意:重点是微微调整,防止过拟合):
-
保证原模型参数变化不大
-
让输出结果的概率向量很接近
方法2:层迁移 Layer Transfer
层迁移做法:
规定某些层的参数固定(learning rate设置为0或者很小),不允许抖动。
防止无法无天的变动
问题:应该拷贝哪些层的参数呢?
- 语音识别问题一般是最后的一些层
- 图像的通常是开始的一些层
3.1.2模型Multi-task Learning
在原来任务和目的任务的效果都不会差组合网络,公用某些层
基本思想:将不同的任务数据线放在一起共同提取出共性,然后分开训练,已解决具体的问题(捕捉共性以提升两个任务的效果)
相比较而言,上图左边方式的比较常用
典型应用:不同语种的识别问题上,提取人类语言特性,然后再去识别不同的语言
3.2原始数据有标签,目标数据没有标签
3.2.1域对抗 Domain-adversarial training
如下图任务:识别彩色的识别手写体
MNIST中,数据有标签
MNIST-M中,不使用数据标签
思想:
两类不同Domain的图像目标:将Domain消除掉
实际上识别过程可以分为两部分:1.抽取特征(如得到一个4096维的向量),2.分类(到底是1,2,3···)
那么我们就可以通过feature区分,如果用feature区分不出来是来自哪个Domain的(同时还要保证能分出来1,2,3……),就说明说明成功了
我们需要设置一个警察,时刻监督是否真的区分不出来是哪个Domain图片
注意:红色区域表示负责监督的警察,警察要把自己的loss降低,警察的loss越低说明越容易区分,所以要做一个反向的变换,我越不让你能区分是哪一个,如此反复警察直至分不清(对抗),这样就得到了通用的特征。
3.2.2零样本学习 Zero-shot Learning
任务描述:
有了一个能区分猫和狗的模型,但此时来了一个之前从未见过的草泥马,应该怎么区分呢?
解决思路:
不识别动物本身,只识别动物的属性,将动物的属性放在一个大的数据库里面,有了新的样本,直接对比数据库中的属性来区分是哪种动物
在语音识别领域这种思路就像是提取出语言的属性,所有语言在某些属性上都很相似,就像是世界通用语言一样,但不同语言又有独特的属性
四、总结一下
迁移学习就是将已得到的结果迁移到那些难以解决的问题上去
而问题难以解决的原因大概有两个:1.数据不够,2.无法区分
对于问题1可以将原有的Model稍微改一下拿过去用,或者共同训练
对于问题2可以和原问题结合,消除数据间差异(不同域之间的迁移)或划分属性(直接拆分后判断属性)来将原问题的结果给现问题参考借鉴
--------------------------------------------------------------------------------------------------------
posted on 2019-05-03 23:24 Angry_Panda 阅读(538) 评论(0) 编辑 收藏 举报