机器学习:深度学习中的迁移学习

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shinian1987/article/details/83869071

迁移学习也是最近机器学习领域很火热的一个方向,尤其是基于深度学习的迁移学习。迁移学习,顾名思义,就是要迁移,有句成语叫触类旁通,模型在某个任务上学习到知识,当遇到类似任务的时候,应该可以很快的把以前任务学到知识迁移过来。这是拟人化的描述,按照目前主流的 “数据驱动” 型的学习方式,我们所能迁移的 “知识”,可能也只是模型的架构和参数了,至于规则,符合什么的,可能没有办法迁移。

迁移学习,在深度学习之后,已经越来越普遍了,今天,我们先来介绍两个比较常见的迁移学习,特征迁移和域自适应。

特征迁移

先来说说特征迁移,我们知道,在 CNN 出现之前,常规的图像识别的流程或者套路,就是特征提取加分类,我们以前比较常用的特征有 SIFT, HOG, LBP,Gabor filter 等,然后结合 Bag of Words 等,这些特征几乎会用在所有的分类识别问题上,比如人脸识别,人脸表情识别,物体识别,行人识别等等,特征提取可以有很多作用:比如说降维,一般原始的图像如果拉成一维向量的话,都是几万甚至几十万的维度,这样的维度,对于分类器来说,是很重的负担,而且样本样不够的话,也很容易造成过拟合。特征提取的另外一个作用,就是寻找类内之间的共有属性,同一类的物体,总是应该或多或少存在共有的属性,特征提取,就是帮我们找到这些共有属性。

深度学习之前,所有的特征基本都是人为设计的,不管是 SIFT 还是 HOG,都是我们所说的 hand-designed,这个可以理解成,人类的知识,迁移到了计算机视觉里,为什么特征要这样设计,肯定是有人类的知识在起作用,这些特征被用在各种各样的分类问题上,这也是一种迁移。

进入深度学习时代以后,人为设计的特征,越来越少用了,改为基于学习的特征了,我们都已经知道,用大网络,比如 VGG, Google-Net, ResNet 等在 ImageNet 上训练之后,把最后的 FC 层去掉,就可以看成是一个特征提取器,越底层的卷积层,可能只是一些 general 的特征,越上层的特征,就越抽象,越 specific,越生成的特征,维度也比较小,相信大家都发现,这种网络特征提取器提取的特征,在识别性能上,往往超越了人为设计的特征。可能是因为人为设计的特征,很多时候把一张图像的所有区域都按同样的方式处理,没有体现局部的差异,而基于学习的特征,在做了很多次的训练,见过了大量的图像之后,具备了一定的对图像差异处理的能力,对于分类来说,一张图像不会是所有的地方都是同等重要的,肯定是有的区域,有些纹理会更有用,而有些区域可能完全没有用,甚至可能会起到干扰的作用。基于学习的特征,可能具备了一定的选择能力,因为在经过层层复杂的卷积运算,各种滤波器的线性组合之后,这就类似一个非常复杂的非线性映射,是从原始的图像空间到特征空间的一个映射。这个映射,不仅把高维的图像空间,映射到低维度的特征空间,而且让这些特征的类内聚合性更好,类间的分离性更高,网络特征提取器提取特征的过程,就类似人为设计的特征,而且这种特征,也可以迁移到很多不同的分类问题上。

而且,更方便的是,这种网络特征的迁移,既可以只迁移 high-level 的特征,也可以只迁移 low-level 的特征,也就是我们所说的 fine-tune,当我们把一个训练好的网络,应用于新的任务时,可能对于网络底层的参数是不会去改变的,而会在底层的基础上,接上其他的网络结构,或者直接 fine-tune 这些卷积层的参数。

深度学习时代的特征迁移,可以理解成是网络结构和模型参数的一种迁移。这些卷积核的参数,是在经过大量数据训练的基础上得到的。

域自适应

域自适应,可以理解成一种半监督的学习方式,我们可以将图像看成是对现实世界的一个采样,那么一个数据集,就可以理解成是某个采样的集合,比如说 MNIST 数据集,可以看成是对 0-9 的一个采样,或者说 0-9 这十个数字,在真实世界的一个采样,因为这些数字肯定是真实的人写出来的,那么,这样一个数据集肯定是有一个分布了,我们可以设为 P s P_s 。假设我们还有另外一个数据集,也是 0-9 这些数字的图片,只是这些图片的形态和 MNIST 的不一样,比如说这些图片不是二值化的黑白图像,可能是彩色图像,或者背景会更复杂,那么这个新的数据集也存在一个分布,我们设为 P t P_t

现在,我们假设 MNIST 这个数据集是有标签的,而另外一个数字数据集是没有标签的,如果我们只用 MNIST 数据训练一个分类模型,虽然这个分类模型也是识别 0-9 这 10 个数字,但是这个模型在新的数据集上能工作吗? 答案是否,很多实验证明,神经网络很多时候,很容易被愚弄或者对抗攻击,在 MNIST 上训练的分类模型,换一个数据集,效果可能就很糟糕。而这,就是域自适应想要解决的问题。

我们可以把 MNIST 这个数据集称为源域(source domain),新的数据集称为目标域(target domain),source domain 的数据分布为 P s P_s , target domain 的数据分布为 P t P_t ,虽然他们都是对同样的真实世界(比如说数字 0-9)的采样,但是他们的分布可能差异很大,域自适应,就是希望能在特征空间把他们的分布拟合在一起,虽然两个数据的分布不一样,但是既然都是同一类,那么他们应该存在共同的属性,这些属性,可以在特征空间找到,这就是域自适应想要解决的问题。说简单一点,就是希望把不同边缘分布的数据映射到某个特征空间,使其在特征空间的条件概率分布是比较接近的。

目前,比较主流的域自适应的方法,都是利用对抗训练的方式,利用一个判别器,当 source domain 和 target domain 的数据在特征上无法被区分开来,说明他们在特征空间上已经融为一体了。

猜你喜欢

转载自blog.csdn.net/shinian1987/article/details/83869071
今日推荐