首页 / 资料库 / 微软 · AI 入门

资料库15 分钟读完MIT迁移学习预训练模型计算机视觉

预训练网络与迁移学习

译自《Pre-trained Networks and Transfer Learning》 · 查看英文原文

原文出处Pre-trained Networks and Transfer Learning 原作者:Microsoft · 许可证:MIT License 中文译本由诸葛AI学院整理,仅供学习参考,版权归原作者与微软所有。

训练 CNN 耗时很长,还需要大量数据。其中不少时间是花在学习低层滤波器上的,网络正是靠这些滤波器从图像里提取模式。自然会引出一个问题:一个在某个数据集上训练好的神经网络,能不能改造一下去分类别的图像,不用走完整的训练流程?

课前测验

这种做法叫迁移学习(transfer learning),因为我们把一个神经网络模型里的部分知识转移给了另一个模型。迁移学习通常从一个预训练模型(pre-trained model)起步,这个模型已经在某个大规模图像数据集上训练过,比如 ImageNet。这类模型本来就能从一般图像里提取各种特征,做得不差。很多时候,只要在提取出的特征上面搭一个分类器,就能拿到不错的结果。

迁移学习这个词在其他学科里也能遇到,比如教育学。它指的是把一个领域学到的知识用到另一个领域。

预训练模型当特征提取器

上一节讲的卷积网络有很多层,每层都负责从图像里提取一些特征:从低层的像素组合(横、竖线条或笔画),到更高层的特征组合,对应的是眼睛这样的部件。只要在一个足够大、足够多样的通用图像数据集上训练 CNN,网络就应该能学会提取这些通用特征。

Keras 和 PyTorch 都提供了便捷的函数,可以直接加载常见架构的预训练权重,这些权重大多是在 ImageNet 图像上训练出来的。最常用的几种,前面一节课的 CNN 架构页面里有介绍。具体可以考虑这几个:

  • VGG-16/VGG-19:模型相对简单,准确率却不低。拿 VGG 做迁移学习的第一次尝试,往往是个稳妥的选择。
  • ResNet:微软研究院(Microsoft Research)2015 年提出的一族模型,层数更多,因此也更吃资源。
  • MobileNet:体积缩小的一族模型,适合移动设备。资源紧张、愿意牺牲一点准确率时就用它。

原文此处有一张图,展示的是 VGG-16 从一张猫的照片中提取出来的特征。

猫狗数据集

这个例子我们使用 Cats and Dogs(猫与狗)数据集,它和真实场景的图像分类非常接近。

练习:迁移学习

到配套的 notebook 里看迁移学习的实际操作:

可视化对抗猫

预训练的神经网络,它的大脑里存着各种模式,其中就包括理想猫(ideal cat)的概念(还有理想狗、理想斑马等等)。想办法把这张图可视化出来会很有意思,但这并不容易:模式散布在整个网络的权重里,还组织成层次结构。

一种做法是从一张随机图像出发,用梯度下降优化(gradient descent optimization)技术不断调整这张图,直到网络开始认为它是一只猫。原文此处有一张图,画的就是这个优化循环:图像喂给网络,网络的判断反过来修正图像。

真这么做,得到的东西和随机噪声非常像。原因在于让网络把输入判成猫的办法有很多,其中一些在视觉上毫无意义。这类图像确实含有大量猫的典型模式,只是没有任何约束让它们看起来清晰可辨。

要改善结果,可以在损失函数里再加一项变化损失(variation loss)。这个指标衡量图像相邻像素有多相似。把它调小,图像会更平滑,噪声随之消失,视觉上更有吸引力的模式就显现出来。原文此处有并列的两张图,一张"理想猫"、一张"理想斑马",它们都被网络以很高的概率正确分类。

类似的思路还能对神经网络做所谓的对抗攻击(adversarial attack)。假设我们想骗过网络,把狗看成猫。拿一张被网络识别为狗的图,用梯度下降稍微调一调,直到网络把它分给猫。原文此处有一组对比图:左边是原来的狗,右边是被网络判成猫的狗,改动在肉眼看来并不明显。

复现上面结果的代码在这个 notebook 里:

小结

用迁移学习,你可以很快搭出一个自定义对象的分类器,还能拿到高准确率。也能看到,我们解决的任务越来越复杂,算力需求跟着涨,CPU 已经不好办了。下一单元我们会换一种更轻量的实现,用更少的算力训练同样的模型,准确率只低一点点。

挑战

配套的 notebook 末尾有笔记提到:新数据和原来的训练数据比较相似时(比如同一种类的新动物),知识迁移的效果好。试一试用完全不同的图像做实验,看看迁移出来的模型表现能好到什么程度、差到什么程度。

课后测验

复习与自学

读一读 TrainingTricks.md,了解训练模型的其他一些办法。

作业

这个实验使用真实场景的 Oxford-IIIT 宠物数据集,里面有 35 个猫狗品种,我们要用迁移学习搭一个分类器。

这篇在讲什么,跟咱们的课怎么对?

资料库是大厂公开教材的中文译本,偏原理和工程做法。想看面向中小企业的白话版本,去入门课场景课