文章

02 One-Shot Learning(一次性学习)

02 One-Shot Learning(一次性学习)

02 One-Shot Learning(一次性学习)

一、问题背景

人脸识别的实际应用场景中,常常面临 “一次性学习(One-shot learning)” 的挑战:

  • 每个身份(如员工)在数据库中仅有一张参考图像
  • 系统需要仅凭这一张图像,就能识别出新输入的人脸是否属于该身份;
  • 若使用传统分类方法(如 Softmax 分类器),则:

    • 训练数据极少(每人仅1张图),无法训练出鲁棒的深度模型;
    • 当有新人加入时,输出类别数变化,需重新训练整个网络,效率低下且不实用。

核心问题:如何在只有单一样本的情况下,实现对新个体的准确识别?


二、传统方法的局限性

假设数据库中有 $N$ 个人(如 $N=4$:Kian, Danielle, Younes, Tian),再加上“非数据库人员”类别,则 Softmax 输出维度为 $N+1 = 5$。

但这种方法存在两大问题:

  1. 数据不足:每人仅一张图,无法有效训练 CNN;
  2. 扩展性差:新增人员需修改网络输出层并重新训练。

❌ 因此,直接使用分类模型不适合 One-shot Learning 场景


三、解决方案:学习相似度函数(Similarity Function)

核心思想

不再将问题建模为多类分类,而是转为人脸验证(Face Verification) 问题:

  • 学习一个函数 $d(\mathbf{x}^{(1)}, \mathbf{x}^{(2)})$,衡量两张人脸图像 $\mathbf{x}^{(1)}$ 和 $\mathbf{x}^{(2)}$ 的差异程度(即“不相似度”)。

函数性质

  • 若 $\mathbf{x}^{(1)}$ 与 $\mathbf{x}^{(2)}$ 是同一人 → $d(\mathbf{x}^{(1)}, \mathbf{x}^{(2)}) \approx 0$(很小);
  • 若是不同人 → $d(\mathbf{x}^{(1)}, \mathbf{x}^{(2)})$ 较大。

决策规则(带阈值 $\tau$)

\[\text{若 } d(\mathbf{x}^{(1)}, \mathbf{x}^{(2)}) \leq \tau \quad \Rightarrow \quad \text{判定为同一人}\] \[\text{若 } d(\mathbf{x}^{(1)}, \mathbf{x}^{(2)}) > \tau \quad \Rightarrow \quad \text{判定为不同人}\]

其中 $\tau$ 是一个超参数,可通过验证集调优。


四、应用于人脸识别(Identification)

给定一张新输入图像 $\mathbf{x}$,执行以下步骤:

  1. 将 $\mathbf{x}$ 与数据库中每张参考图像 $\mathbf{x}_{\text{db}}^{(i)}$($i = 1, 2, …, N$)逐一比较;
  2. 计算所有差异值:$d(\mathbf{x}, \mathbf{x}_{\text{db}}^{(i)})$;
  3. 若存在某个 $i$ 使得 $d(\mathbf{x}, \mathbf{x}_{\text{db}}^{(i)}) \leq \tau$,则识别为第 $i$ 个人;
  4. 若对所有 $i$ 都有 $d(\mathbf{x}, \mathbf{x}_{\text{db}}^{(i)}) > \tau$,则判定为未知人员

✅ 此方法天然支持动态扩展:新增人员只需将其图像加入数据库,无需重新训练模型


五、关键优势总结

优势说明
解决小样本问题不依赖大量每类样本,仅需学习“成对比较”
模型可复用网络一旦训练好,可用于任意新身份(zero-shot 扩展)
计算高效推理时只需 $N$ 次前向传播($N$ 为数据库大小)
工程友好易于部署、更新和维护

六、后续方向预告

为了实现上述目标,我们需要训练一个神经网络来学习函数 $d(\cdot, \cdot)$。常用方法包括:

  • Siamese 网络(孪生网络)
  • Triplet Loss(三元组损失)

🔜 这些内容将在下一节(4.3)中详细讲解。


七、公式汇总

  • 相似度/差异函数:

    \[d(\mathbf{x}^{(1)}, \mathbf{x}^{(2)})\]
  • 识别决策规则:

    \[\text{Identity} = \begin{cases} i, & \text{if } \min_{i} d(\mathbf{x}, \mathbf{x}_{\text{db}}^{(i)}) \leq \tau \\ \text{Unknown}, & \text{otherwise} \end{cases}\]
本文由作者按照 CC BY 4.0 进行授权