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$。
但这种方法存在两大问题:
- 数据不足:每人仅一张图,无法有效训练 CNN;
- 扩展性差:新增人员需修改网络输出层并重新训练。
❌ 因此,直接使用分类模型不适合 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}$,执行以下步骤:
- 将 $\mathbf{x}$ 与数据库中每张参考图像 $\mathbf{x}_{\text{db}}^{(i)}$($i = 1, 2, …, N$)逐一比较;
- 计算所有差异值:$d(\mathbf{x}, \mathbf{x}_{\text{db}}^{(i)})$;
- 若存在某个 $i$ 使得 $d(\mathbf{x}, \mathbf{x}_{\text{db}}^{(i)}) \leq \tau$,则识别为第 $i$ 个人;
- 若对所有 $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 进行授权