19.迁移学习

  National Taiwan University (NTU)李宏毅老师的《Machine Learning》的学习笔记,因此在全文对视频出现的内容多次引用。初出茅庐,学艺不精,有不足之处还望大家不吝赐教。

  欢迎大家在评论区多多留言互动~~~~

0. 相关链接

  迁移学习发展至今天有了很大的进展,对其中比较经典的综述进行了相关总结《A Survey on Transfer Learning》,里面主要是关于迁移学习相关概念和方法的总结;当时深度学习孩还不是很流行,所以里面关于深度学习的内容不多,之后迁移学习在深度学习和神经网络中的应用博主也进行了相关的归纳,见《Learning and Transferring Mid-Level Image Representations using Convolutional Neural Networks》,还有《How transferable are features in deep neural networks?》,尚未进行整理。

  关于迁移学的相关基础概念,如域(domain)、任务(task)已经在《A Survey on Transfer Learning》进行了相关总结,所以不会再进行计算。

1. 迁移学习的四种类型

  主要根据源域与目标域中的数据的标签情况进行分类,具体如图1


图1. 按源域与目标域的的数据是否具有标签对迁移学习进行分类

  其中需要注意的是,迁移学习的种类特别多,别称也很多,所以在进行分类或者概念介绍的时候会出现分歧,但实际上只是概念上的区别,不需要过多的关注,主要关注算法的核心思想和使用情况。

2. Fine-tuning(微调)

  它使用的情况如图1 ,是源数据域与目标数据域的数据都具有标签,并且源域的数据量很大,而目标域的数据量很小,当目标数据域的数量特别小的时候就将称为“One-shot learning”。其主要想法是使用源域数据训练模型,使用目标域数据进行Fine-tuning(微调)。Fine-tuning 的主要难度在于目标域中只有有限的数据的时候,要小心模型会发生过拟合。

  下面将介绍在 Fine-tuning 的过程中防止模型过拟合的几种方法

2.1 Conservative Training(保守训练)

  在对通过源域数据得到模型上进行 Fine-tuning 的过程中加入了关于参数 w 的惩罚项,使得迁移前后模型的参数很相近,防止模型过拟合。

2.2 Layer Transfer(层迁移)

  将通过源域数据得到模型中的某些层保持不变,只将剩余的一层用目标域数据进行训练,大大减少了过拟合的风险。当然,当你的目标域数据量很大的时候,可以将整个网络进行 Fine-tuning ,而不是仅仅将其中的某一层进行 Fine-tuning。

  对于语音信号来讲,常常使用最后几层进行迁移学习。这是因为 speech 的底层特征得到的这段语音的发音方式,但是对于同样一段话每个人的发音方式是不同的,由于口腔的构造是不同,所以常常采用后面几层进行迁移学习。

  对于图像信号来讲,常常使用前几层进行迁移学习。这是因为图像的底层特征在检查图像中是否具有某些直线或者曲线,是否具有某些特殊的图案,如图 2 所示。


图2. 图像往往迁移底层的特征层

  下面是NIPS, 2014论文《How transferable are features in deep neural networks?》中关于图像层迁移的一些实验。

这里写图片描述

图3. 保持不变的层数与模型表现的关系

其中横坐标代表网络在第 n 层被切开并进行重新训练,实际上就是从第一层开始有几个层保持不变。最开始是 0 层,也就是相当于整个网络没有迁移学习,而是通过正常的训练得到的。其中需要注意的是,在这里目标域中的数据与源域中的数据量是相当的,所以当然可以直接进行训练而不会发生严重的过拟合。纵坐标是 top-1 正确率(越高越好)。

  4号线表示的是只训练剩余部分的网络。其中我们可以看到,保持不变的层数越大,网络的表现就下降的越多,这主要是因为越往后的层越是针对某一种特殊的特征表示,并且后面这些层在进行 fine tune 的过程中实际上是要与前面的层进行沟通,没有办法沟通当然效果的就会变差,这也证明了网络的前几层往往提取的是一些通用特征,可迁移性更高。

  5 号线表示的是同样是选取前面几个层,让前面几个层保持在源域得到的参数,而后面的层参数初始值不是源域训练得到的, 最后对整个网络进行fine-tune the whole network,可以看出这种效果是最好的。

  下面是这篇文章的另一个图。

这里写图片描述

图4. 源域与目标域数据相关性对于 fine tune 的影响

其中的横坐标与图4 中的横坐标相同,纵坐标为相对 top-1 正确率,其中的红色的线与图3 中 4 号线是同一条线。黄色的线表示,当源域与目标域的数据相关度不是很高的时候(比如说源域中都是自然风景的图片,而目标域中都是人造物品的图片),那么他在保持前两个层不变的时候还没有较大的差别,但是越往后效果退化的越严重。我们可以看出源域与目标域的数据相关程

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VGG19是一种非常流行的深度卷积神经网络架构,用于图像分类任务。在PyTorch中,可以通过迁移学习来利用已经预训练好的VGG19模型进行自己的任务。 迁移学习是指使用已经在大规模的任务上训练好的模型,在新的任务上进行微调或者作为特征提取器来使用。对于VGG19模型,我们通常可以利用ImageNet数据集上预训练好的权重,这些权重已经能够很好地表示图像的特征。 在PyTorch中,可以使用torchvision库来加载VGG19模型的预训练权重。首先,我们需要导入必要的库: ```python import torch import torchvision.models as models ``` 然后,我们可以通过调用`models.vgg19`函数来加载VGG19模型的预训练权重: ```python model = models.vgg19(pretrained=True) ``` 此时,`model`就是一个已经加载了预训练权重的VGG19模型。我们可以通过修改输出层的结构,来适应自己的任务。例如,对于图像分类任务,我们可以将VGG19模型的最后一层线性层替换成一个新的全连接层,输出我们想要的类别数。 ```python model.classifier[6] = torch.nn.Linear(4096, num_classes) ``` 这样,我们就可以利用VGG19模型进行新的图像分类任务了。在训练过程中,我们可以冻结已经加载的预训练权重,只训练新添加的层,或者对整个网络进行微调。 总而言之,通过使用PyTorch的torchvision库,我们可以很方便地进行VGG19模型的迁移学习。只需要加载预训练权重,根据自己的任务修改模型结构,并进行训练即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值