アカリの部屋

迁移学习

如果想使用迁移学习,任务之间要有一定的关联,比如用照相机拍下来的猫狗照片做分类,可以迁移到老鹰和布谷鸟的分类(相通Domain不同任务),也可以迁移到卡通高飞狗和招财猫(不同Domain相同任务)上。

Fine-tune

在工业界中,因为监督学习占了机器学习任务的主体,所以用途最广泛的迁移学习是有监督模型到新的有监督模型的,比如微调再优化(Fine-tune)。

在深度学习领域当中,通常认为特征是可以自己抽出来的,所以要面临的最大的问题就是数据的数量和质量,然而在很多领域数据是很难获取的(比如医疗影像)。Fine-tune就可以解决这个问题,比如拿ImageNet这样大型数据集生成的模型做权重初始化,再一个少量的数据集上再优化,但是因为模型容量太大,随便动动就能把小数据都背下来,所以这种做法很容易导致过拟合。这个问题降低学习率是没用的,学习率只影响速度,轮次多照样过拟合。

保守训练(Conservative Training)

在迁移学习中有保守训练(Conservative Training)的概念,解决这个问题有两个思路。

第一是约束模型参数很接近,在神经网络中正则化的方式有Dropout和L1/L2,借用L1/L2的思路,即假设之前的模型是一个范化能力很好的模型,为了保证在新的小数据集上不损失泛化能力,需要加一个正则化限制,保证新的参数和原来接近,变动幅度不是很大。做法就是,原始的网络实际就是一堆权重w,只要在损失函数的尾巴上把各维度差值(比如2范数)加上,当成另一个损失项,再训练即可。

第二是约束输出向量很接近,新的数据集经过老的和优化后的网络后,都会输出概率向量,所以只要定义好两个输出的差距算法,加到lost上面即可。

这两种的方式本质上都是要保证新的模型离老的模型不要太远。

logo

层迁移(Layer Transfer)

我们可以把一个训练好的神经网络每一层的所有参数都直接Copy到新的模型上,在这之后可以直接把之前一些层的学习率调成0(或者很小的值比如0.00001),只学习新的层,这样可以调整的参数就少了,新层就不能无法无天地去变动,还受到其他层的约束,就不会给新的模型太大的空间,可以防止过拟合。

对于图像识别,通常复用开始的一些层,因为它们概括的是最底层的特征信息,并不偏重很上层的理解,而可以不要最后的高层特性和分类器。而语音识别则复用后面的层,因为前面的层偏重每个人的发声方式,后面的层偏重于语义。

logo

Multitask Learning

Fine-tune在意的是在新的任务上表现不错,即拿来A任务的模型去改造,更关注在B上的表现,而不关注在A上的表现,Multitask Learning则希望保证抽出来改造后的部分在两个任务上都表现不错。比如在图像识别领域,当从照片分类迁移到卡通分类时,倾向于公用中间的一些层,因为它们抽的一些特征可能是可能共用的,但是业界也没什么好的方法确认哪些层是可以共用的。

它的一个典型的应用是在语音识别上,神经网络前面一些层可以做一些共同的抽象,比如人的发声共性,而后面的层则可以用到各个语种的识别任务上。(即便在汉语语音数据很少的情况下,也能达到不错的效果)

logo

渐进式神经网络

首先对任务1训练一个神经网络,存下来,然后把任务1每一层的数据,以某些权重接入到任务2网络的每一层中,这样就可以让任务1的一些结论补充到任务2中,当然,权重也是可以学习的。

logo

域对抗训练

MNIST数据很规范,黑底白字,而且有标签,然而MNIST-M则是带有颜色背景纹理的,而且无标签,把MNIST有监督学到的模型迁移到MNIST-M无监督的场景的一种方法是域对抗(Domain-adversarial training)。

对于一个CNN,前面的部分在抽特征,后面的部分在做分类,那么前面的部分就能拿出来作为一个特征抽取器得到一个比如4096维的向量,对它降为可视化后会发现之所以能做分类是因为数据被分割到了不同的区域,所以用一个线性分类器能做分类。然而拿到MNIST-M上会发现数据都集中在空间中的一大坨里,没法直接用原来的分类器做分类。

所以希望训练一个分类器,在能对原先数字做识别的同时,能消除掉对“域”(来自哪个图片数据集)的认识。这里需要三个网络,第一个网络是一个特征抽取器,第二个网络是0-9的分类器,第三个网络用来区分是来自哪个数据集。第一个网络会很努力地抽特征,使得特征即要在0-9分类上表现得好,又要使得第二个网络很努力地去区分来自哪个数据集(域)却又无法识别出来,这类似于生成对抗网络的思路。走前两个网络的时候,只用MNIST,因为它有标签,走1和3网络的时候,两个数据集都要使用。第一条路就是个CNN梯度下降,第二条路的“警察“是个SGD,然而特征抽取器并不想让它能够区分两个域,所以”警察“的梯度要反着传递回来。

这样一来,第一个网络抽到的特征就可以在两个数据集上都能有不错的效果,虽然会影响院线MDIST的准确率,但是去掉域信息后,即复用了MDIST的网络,又在MDIST-M无监督数据上也能够表现很好。

logo

其他迁移学习方式

从有监督到无监督的迁移方式还有零样本学习(Zero-shot learning),而从无监督到有监督及从无监督到无监督还有Self-taught Learning和Self-taught Clustering。

实操过程

通常习惯先对训练数据做扩增,测试集不做扩增。在训练时,把一个既有网络的最后一层干掉,接入一个和新目标输出数量一样的层,然后调低学习率开始学习。提高效果的方式是,对验证集的数据做旋转/翻转扩增来强化对训练过程的回馈能力,甚至可以用交叉验证。