上一章:七、卷积神经网络
下一章:八、(二)深度学习训练技巧
更多章节:人工智能入门课程
目录
训练CNN网络可能需要花费很多时间,并且需要大量数据。训练的大部分时间都用于学习神经网络可以用来从图片中提取模式的最优低级滤波器上。一个自然的问题产生了,我们是否可以使用在一个数据集上训练的神经网络,将其调整为在不需要完整训练过程的情况下,对其他不同的图像进行分类?
这种方法叫做迁移学习,因为我们把知识从一个神经网络模型迁移到另一个。在迁移学习中,我们通常从一个已经在某些大规模数据集(比如ImageNet)上预训练了的模型开始。这些模型已经能够很好的从普通图片上提取不同的特征,在很多情况下,只需要这些已提取的特征的基础上构建一个分类器就可以产生良好的结果。
✅ 迁移学习是其他学术领域,比如说教育业,的专业术语。它是指将一个领域的知识应用到另一个领域的过程。
预训练模型作为特征提取器
我们前面章节讨论到的卷积网络包含许多的层,每个层都能够从图像中提取一些特征,从低级像素组合(比如水平/垂直线条或笔画)开始,逐渐到高级特征组合(相应于一些像眼睛的火焰之类的东西)。如果我们在足够大规模的通用和多样化图像数据集上训练CNN,网络应该能够学会提取这些常见特征。
Keras和PyTorch都包含了可以轻松加载一些常见架构的预训练网络权重的函数,其中大多数网络都是在ImageNet 图像数据集上训练的。最常用的神经网络架构在上一课时的CNN 架构页面中中进行了描述。特别是,您可能会考虑使用以下之一:
- VGG-16/VGG-19相对简单并且提供优秀的准确率。通常首次使用(神经网络)选择VGG是个好选择,来看看迁移学习如何工作。
- ResNet是微软研究院于2015年提出的一系列模型。它们具有更多的层,因此需要耗费很多资源。
- MobileNet是一系列体积更小,适合移动设备的模型。如果您资源有限,并且可以牺牲一些准确度,您可以使用它们。
这是一些使用VGG-16网络从一只猫的照片中提取的样本特征。
猫与狗数据集
在这个例子中,我们将使用一个猫与狗的数据集,这非常接近真实的图像分类场景。
✍️ 练习:迁移学习
让我们看看相应的笔记中迁移学习的实际应用:
可视化对抗性猫
预训练神经网络模型在它的大脑中包含各种不同的模式,包括理想猫(以及理想狗、理想斑马等)的概念。将这种图像使用某种方法可视化将会非常有趣。然而,这并不简单,因为模式分散在整个网络权重中,同时以层次结构组织。
我们可以采用的一种方法是,我们从一张随机图像开始,然后使用梯度下降优化技术来调整这张图片,直到神经网络开始认为它是一只猫。
![](https://img-blog.csdnimg.cn/img_convert/292fe5e0a4a89f424d0b55720168b849.png)
但是,如果我们这么做,我们将得到一些与随机噪音非常相似的东西。这是因为让网络认为输入图像是猫的方法有很多种,其中包括一些在视觉上没有意义的方法。虽然这些图像包含许多典型的猫的模式,但没有什么约束这些模型是具有视觉独特性的。
为了改善结果,我们可以在损失函数中增加另一项,叫做变化损失(variation loss)。它是一个衡量图像的相邻像素点相似度的指标。最小化变化损失使得图像更平滑,消除噪音,从而显示出更具视觉吸引力的模式。这是一个这样子的“理想”的图像的示例,它们被高概率的被分类为猫和斑马:
![]() |
![]() |
理想猫 | 理想斑马 |
类似的方法可以用于对神经网络执行所谓的对抗性攻击(adversarial attacks)。设想我们想欺骗神经网络,使得(它认为)一只狗看起来像一只猫。如果我们拿一张被神经网络识别为狗的图像,然后我们使用梯度下降优化对它(图像)微调,直到网络开始将图像分类为一只猫:
![]() |
![]() |
狗的原始图片 | 被分类为猫的狗的图片 |
查看以下笔记中的代码,重现上述结果:
总结
使用迁移学习,您可以快速组建一个具有高准确率的用于自定义对象分类任务的分类器。您可以看到我们正在解决的问题越复杂,我们需要的算力越高,并且在CPU上并不容易解决。在下一个单元,我们将尝试使用一个更轻量级、更少计算资源的实现方式来训练相同的模型,并且只会略微降低一些准确度。
挑战
在附带的笔记中,底部有说明如何将迁移知识最好的适用略微相似的训练数据(也许是新类型的动物)。在完全不同的图像上实验,看看您的知识迁移模型表现得好还是差。
复习和自学
通读TrainingTricks.md以加深您对使用其他方法训练您的模型的理解。
作业
在本实验中,我们将使用现实生活中的Oxford-IIIT宠物数据集,其中包含35个品种的猫和狗,并且我们将构建一个迁移学习分类器。
上一章: 七、卷积神经网络
下一章:八、(二)深度学习训练技巧
更多章节:人工智能入门课程