社区计算机视觉课程文档

简介

Hugging Face's logo
加入 Hugging Face 社区

并获得增强型文档体验

入门

简介

除了基础知识外,本单元还假设您熟悉迁移学习和多模态学习的概念。如果您没有按照提供的顺序依次观看课程,建议您至少阅读单元 2 中的迁移学习部分和单元 4 的全部内容。

关于泛化

现在我们已经像学生一样为考试拼命学习所有时期,真正的考试开始了!我们希望模型在训练期间获得的知识能够超越它学习的特定图片(例如猫的图片),使它能够识别像 Alice 和 Ted 的毛茸茸朋友这样的未见过的猫。把它想象成模型学习了猫的本质,而不仅仅是它在训练期间看到的那些特定的毛茸茸的脸。这种将知识应用于新情况的能力被称为 **泛化**,它将一个好的猫模型与一个简单的猫图片记忆者区分开来。你能想象一个没有泛化的平行宇宙吗?是的,实际上非常简单,你只需要在世界上所有猫的图片上训练你的模型(假设它们只存在于地球上),包括 Alice 和 Ted 的猫,然后找到一种方法来阻止现在的猫群繁殖。所以,是的,没什么大不了的。

实际上,当我们说模型预计会泛化到它从未见过的所有猫的图片时,我们是错误的。预计它会泛化到与它训练的图像数据来自相同分布的所有猫的图片。简单来说,如果你在猫的自拍上训练你的模型,然后向它展示一张猫的卡通图片,它可能无法识别它。这两张图片来自完全不同的分布或域。使你的猫自拍模型能够识别卡通猫被称为 **域自适应**(我们将在稍后简要讨论它)。就像利用你的模型在真实猫身上学到的所有知识来教它识别它们的动画表亲一样。

因此,我们从泛化开始,识别未见过的 Alice 和 Ted 的猫的图片,到域自适应,识别动画猫的图片。但我们比这贪婪得多。你不想让你的模型只能识别你的猫的图片,或者 Alice 和 Ted 的,甚至卡通猫!拥有一个在猫的图片上训练的模型,你还要让它识别羊驼和猎鹰的图片。

好吧,现在我们正在零样本学习(也称为 ZSL)的领域。

什么是零样本学习?

让我们先用一个定义来热身。零样本学习是一种设置,其中模型在测试时被呈现出属于 **仅** 它在训练期间没有接触过的类别的图像。换句话说,训练集和测试集是 **不相交** 的。提醒一下:在经典的 ZSL 设置中,测试集只包含模型之前从未见过的类别的图片,而不是它训练期间的任何图片。这可能看起来有点不切实际,就像要求学生只参加他们从未学习过的材料的考试。幸运的是,ZSL 有一种更务实的版本,没有这个严格的规则,被称为广义零样本学习或 GZSL。这种更灵活的方法允许测试集包含已知和未知类别。这是一个更现实的场景,反映了现实世界中事物的工作方式。

零样本学习的历史

我们是否可以构建在他们没有明确训练过的任务上表现良好的模型的问题,是在深度学习开始变得可行后不久出现的。2008 年,ZSL 的种子在人工智能促进协会 (AAAI) 大会上发表的两篇独立论文中播下。第一篇论文名为 **无数据分类**,探讨了在自然语言处理 (NLP) 上下文中零样本学习的概念。第二篇名为 **零数据学习**,专注于将 ZSL 应用于计算机视觉任务。零样本学习这个词本身最早出现在 2009 年 NeurIPS 上,由…… Geoffrey Hinton 共同撰写的一篇论文中!

让我们下面列出 ZSL 中最重要的时刻的概述。

2008 零样本学习(问题)的最初火花
2009 零样本学习这个词被创造出来
2013 广义 ZSL 的概念被引入
2017 将编码器-解码器范式首次应用于 ZSL
2020 OpenAI 的 GPT-3 在零样本 NLP 上取得了令人印象深刻的成果
2021 OpenAI 的 CLIP 将零样本计算机视觉提升到一个全新的水平

CLIP 的影响是深远的,它开启了零样本计算机视觉研究的新纪元。它的多功能性和性能开辟了激动人心的新可能性。可以说,零样本计算机视觉的历史可以分为两个时代:**CLIP 之前** 和 **CLIP 之后** 的时代。

零样本学习在计算机视觉中如何运作?

既然我们已经了解了零样本学习是什么,那么了解它是如何应用于计算机视觉的会很好,对吧?这部分将在后面的章节中详细介绍,但让我们在这里描绘一幅概况图来打破僵局。

在 NLP 中,零样本学习(虽然并不总是这样)非常简单。许多语言模型在大量的文本数据集上进行训练,学习预测给定序列中的下一个词。这种捕捉语言中潜在模式和语义关系的能力使这些模型能够在它们没有明确训练过的任务上表现出色。一个很好的例子是 GPT-2 能够在提示中附加 TL;DR 时总结一段话。零样本计算机视觉则是另一个故事。

让我们从回答一个简单的问题开始,*我们人类是如何做到的?我们如何识别以前从未见过的物体?*

是的,你完全正确!我们需要关于该物体的某些 **其他信息**。我们可以很容易地识别老虎,即使我们以前从未见过,因为我们知道狮子是什么样的。老虎是长着条纹的狮子,没有鬃毛。斑马是黑白色条纹的马。死侍是红黑相间的蜘蛛侠。

由于这些其他信息,零样本计算机视觉本质上是多模态的。如果泛化就像通过阅读书籍和与人交谈来学习一门外语,那么零样本计算机视觉就像通过阅读字典和听别人描述它听起来像什么来学习一门外语。

我们可以将零样本学习视为无监督学习问题吗?不,这仍然是监督学习。在无监督学习中,模型从未标记数据中学习。在零样本学习中,模型从无数据标签中学习,记住它在早期被称为无数据分类。

其他信息?

为了使零样本计算机视觉起作用,我们需要在训练期间向模型提供除视觉特征之外的信息。这些信息被称为语义或辅助信息。它提供了视觉特征和未见类之间的语义桥梁。通过整合这种多模态信息(文本和图像),零样本计算机视觉模型可以学习识别即使从未在视觉上见过也从未见过的物体。换句话说,语义信息将见类未见类嵌入到高维向量中,并且它以多种不同的形式存在。

  1. 属性向量:将属性视为物体不同特征的表格表示。
  2. 文本描述:描述图像中包含物体的文本,类似于图像字幕。
  3. 类标签向量:这些是类标签本身的嵌入。

使用这些语义信息,您可以训练一个模型来学习图像特征和语义特征之间的映射函数。在推断时,模型通过使用例如 k 最近邻来寻找语义空间中最接近的标签,来预测类标签。我们可以说,我们借助语义信息从已知类中转移了获得的知识。

不同的零样本计算机视觉方法在它们使用的语义信息和在推断时使用的嵌入空间方面有所不同。

这与迁移学习有什么不同?

好问题!零样本学习 (ZSL) 属于迁移学习的更广泛类别,具体来说属于异构迁移学习。这意味着 ZSL 依赖于将从源域(已知类)获得的知识转移到不同的目标域(未见类)。

由于源域和目标域之间的差异,ZSL 在迁移学习中面临着特定的挑战。这些挑战包括克服域迁移,其中数据分布存在显著差异,以及处理目标域中缺乏标记数据。但我们将在稍后详细讨论这些挑战,所以现在不用担心。现在,让我们简单介绍一下零样本计算机视觉的不同方法。

零样本计算机视觉的方法

零样本计算机视觉方法的领域非常广泛且多样化,提出了众多方法,并有多种分类框架。但我发现一个有吸引力的框架是,这些方法可以广泛地分为基于嵌入的方法基于生成的方法。该框架提供了一个有用的视角,可以用来理解和比较不同的零样本计算机视觉方法。

  • 基于嵌入的方法:模型学习一个公共嵌入空间,其中图像及其语义特征/表示都被投影到其中。然后使用该空间中的相似性度量来预测新的未见类。例如,CLIP。
  • 基于生成的方法:这些方法利用生成模型基于已知类的样本和两类的语义表示来创建未见类的合成图像或视觉特征。这允许即使没有真实数据也能在这些未见类上训练模型。这样,我们就有点作弊,将零样本问题转化为监督学习问题。例如,CVAE[^6]。

在基于嵌入的方法和基于生成的方法之间进行选择,就像你在机器学习中必须做出的其他所有选择一样,取决于手头任务的具体情况和可用资源。基于嵌入的方法通常因其效率和可扩展性而更受欢迎,而基于生成的方法提供了更大的灵活性以及处理复杂数据的潜力。

但无论如何,在本单元中,我们将讨论基于嵌入的方法,包括基于注意力的基于嵌入的方法。零样本学习是一个很大的主题,全面覆盖可能需要单独的课程。感兴趣的读者可以查看提供的额外阅读材料,享受乐趣。

克隆的攻击:ZSL 与 X 有何不同?

我们已经走得很远了!我们现在对零样本学习、它的历史、它在计算机视觉中的应用以及它的一般工作原理有了很好的了解。为了完成这个介绍,我们将把 ZSL 与其他一些最初看起来可能很相似的方法进行比较。

  • 域自适应 (DA):你现在应该熟悉它了。我们可以将零样本学习视为域自适应的极端情况(贪婪的,贪婪的),它处理了在没有任何数据的情况下学习识别未见类的问题。域自适应专注于弥合两个具有不同分布但相关的域(数据集)之间的差距,它需要标记数据。
  • 开放集识别 (OSR):可以将其视为布尔零样本学习。与 ZSL 一样,在 OSR 问题中,模型处理已知类和未见类。但与 ZSL 不同的是,模型只需要在测试时进行分类,即实例是否属于已知类。就是这样,没有花哨的标签。尽管如此,这仍然是一个重大的挑战。
  • 分布外 (OOD) 检测:将此问题视为开放集识别的连续变体。这里我们不想检测任何未包含在训练过程中的实例,而是只检测那些与训练数据分布分布显著偏离的实例。通过有效地识别和处理意外数据,OOD 检测可以为更可靠和稳健的 AI 系统铺平道路,这些系统可以适应不可预测的环境。
  • 开放词汇学习 (OVL):这就是零样本学习的目标。就像,ZSL 的升级版。总的来说,OVL 可以被视为 ZSL 的扩展,它包含了从未见类的有限数据中学习的能力,同时还扩展到处理已知类,并有可能处理无限的新类和任务。

参考

< > 在 GitHub 上更新