Coursera 笔记

Module 04 · Special Applications: Face recognition & Neural Style Transfer

One Shot Learning一次学习

Coursera ↗

面部识别系统的一个主要挑战是需要解决 一次学习问题。这意味着,在大多数面部识别应用中,你需要能够仅凭 一张图片 或 一个示例 就能识别某个人。而 深度学习算法 在仅有一个训练样本的情况下往往表现不佳。

让我们通过一个示例来理解这个问题,并探讨如何解决它。


一次学习示例:如何通过一张图识别同一个人

假设你有一个员工数据库,其中包含四张员工的照片,这些员工是我在 Deeplearning AI 的同事,分别是:Khan、Danielle、Younes 和 Thian。

现在,假设有一个人来到公司,想通过 旋转门 进入,系统的任务是:

  • 即使它只看到 Danielle 的一张照片,它也需要识别出这个人是否就是 Danielle。
  • 如果出现了一个 不在数据库 中的人,系统也应该能识别出他并非数据库中的任何一个人。

在 一次学习 问题中,你必须从 仅有的一张照片 中学会识别一个人,并在之后的应用中做出准确判断。
这对于大多数面部识别系统非常重要,因为在员工数据库中,你可能只有每个员工的一张照片。


传统方法的局限性:训练集过小

一种常见的尝试方法是:

  • 将一个人的图片输入到卷积神经网络(ConvNet)中,并通过 softmax 单元 输出一个标签(例如,输出 4 或 5 个类别,代表四个员工或“不是以上任何人”)。
  • 然而,这种方法并不奏效。因为当你的训练集非常小(例如只有几张照片)时,这不足以训练一个足够健壮的神经网络。此外,如果有新成员加入你的团队,你又需要增加更多的输出节点来处理新的员工,这样就不得不重新训练整个神经网络,显然效率低下。

解决方案:学习相似度函数

为了应对这一挑战,我们不再使用传统的分类方法,而是学习一个 相似度函数(similarity function)。

具体来说,目标是训练一个神经网络来学习一个函数 d,它能够:

  • 输入 两张图片,输出它们之间的差异程度。
  • 如果两张图片是同一个人的照片,函数 d 应该输出一个 小的数字。
  • 如果两张图片是两个人的照片,函数 d 应该输出一个 大的数字。

识别时的应用:

  • 在识别阶段,如果两张图片的 差异度 小于某个阈值(τ),那么就认为这两张图片是同一个人。
  • 如果差异度大于 τ,则认为这两张图片是不同的人。

如何实现一次学习

  1. 面部验证:我们首先使用这个相似度函数 d 解决面部验证问题。假设有一张新图片,我们就可以使用函数 d 来比较这张图片与数据库中的每一张图片的相似度:
  • 比如,假设我们计算出的结果为 10,说明两者差异较大;
  • 然后,我们将这个新图片与数据库中的其他照片进行比较,期望输出一个很小的值(例如:接近0)来证明它们是同一个人。
  1. 与数据库匹配:通过计算与数据库中所有其他图片的相似度,我们可以确定这张新照片到底属于谁。
  • 如果与数据库中的图片(例如 Danielle)的差异度小,则认为这两张图片属于同一个人。
  • 如果与所有数据库中的图片的差异度都很大(例如差异度 > τ),则认为这张照片不是数据库中的任何一个人。

解决一次学习问题的关键

通过学习这个相似度函数 d,它能够输入两张图片并告诉你它们是同一个人还是不同的人,你就能解决 一次学习问题。

  • 一旦你学会了这个函数,添加新成员到数据库中时,你无需重新训练整个系统。只需为新成员添加一张照片,系统就能正常工作。

总结

在本视频中,我们展示了如何通过学习一个相似度函数来解决 一次学习问题。该函数的目标是,通过对两张图片的比较,判断它们是否是同一个人。
这使得面部识别系统能够在只有一个训练样本的情况下,依然有效地识别和验证新的人物。

在下一个视频中,我们将深入探讨如何训练神经网络来学习这个相似度函数 d,并具体实现 一次学习。