文章

04 Triplet 损失

04 Triplet 损失

04 Triplet 损失

🧠 一、Triplet 损失的核心思想

Triplet 损失是一种用于度量学习(Metric Learning) 的损失函数,特别适用于人脸识别等需要学习“相似性”的任务。

  • 目标:训练一个神经网络,使其对同一个人的两张人脸图像生成相近的编码(embedding) ,而对不同人的图像生成相距较远的编码
  • 实现方式:通过构造三元组(Triplet) 样本进行训练:

    • Anchor(A) :基准图像
    • Positive(P) :与 Anchor 同一个人的图像
    • Negative(N) :与 Anchor 不同人的图像

📐 二、Triplet 损失的数学定义

1. 基本目标

我们希望网络学到的编码函数 $f(\cdot)$ 满足:

\[\|f(A) - f(P)\|^2 < \|f(A) - f(N)\|^2\]

即:Anchor 与 Positive 的距离 小于 Anchor 与 Negative 的距离。

2. 引入间隔(Margin)

为了避免平凡解(如所有编码都为零向量),引入一个间隔超参数 $\alpha > 0$,要求:

\[\|f(A) - f(P)\|^2 + \alpha < \|f(A) - f(N)\|^2\]

等价地:

\[\|f(A) - f(P)\|^2 - \|f(A) - f(N)\|^2 + \alpha < 0\]

3. Triplet 损失函数

针对一个三元组 $(A, P, N)$,其损失定义为:

\[\mathcal{L}(A, P, N) = \max\left( \|f(A) - f(P)\|^2 - \|f(A) - f(N)\|^2 + \alpha,\ 0 \right)\]
  • 当不等式满足(即距离差足够大)时,损失为 0;
  • 否则,损失为正,驱动网络调整参数以增大类间距离、减小类内距离。

4. 总体代价函数

若训练集中有 $M$ 个有效三元组,则总损失为:

\[\mathcal{J} = \sum_{i=1}^{M} \mathcal{L}(A^{(i)}, P^{(i)}, N^{(i)})\]

通过梯度下降最小化 $\mathcal{J}$,即可学习到有效的嵌入空间。


⚠️ 三、关键挑战与解决方案

❗问题:随机采样三元组效率低

  • 如果随机选择 $A, P, N$,大多数三元组天然满足 $|A-P| \ll |A-N|$,导致损失为 0,梯度为零,网络无法学习。
  • 这种“太容易”的样本对训练无益。

✅解决方案:难例挖掘(Hard Negative Mining)

  • 只选择“困难”的三元组:即那些接近违反约束的样本,满足:

    \[\|f(A) - f(P)\|^2 \approx \|f(A) - f(N)\|^2\]
  • 这些样本能提供非零梯度,有效推动模型优化。
  • 实践中常采用:

    • Semi-hard negative mining:选择满足 $|A-P| < |A-N| < |A-P| + \alpha$ 的 Negative 样本。
    • 或在线动态生成最难的三元组。

💡 论文参考:FaceNet (Schroff et al., 2015) 中详细讨论了三元组选择策略。


📦 四、数据集要求

  • 必须包含每个身份(identity)的多张图像,才能构建 $(A, P)$ 对。

    • 例如:1000 个人 × 每人 10 张图 = 10,000 张图。
  • 若每人仅一张图,则无法构造 Positive 对,Triplet Loss 无法训练。
  • ⚠️ 注意:训练阶段需要多图/人,但推理阶段可支持 One-shot Learning(仅用一张注册图做人脸识别)。

🔧 五、工程实践建议

  • 大规模数据是关键:工业级人脸识别系统通常在百万至亿级图像上训练。
  • 使用预训练模型:由于数据和算力门槛高,推荐使用公开的预训练 FaceNet 或类似模型(如 Google 的 FaceNet、InsightFace 等)。
  • 理解原理仍很重要:即使使用预训练模型,在定制化场景(如特定人群、低光照等)中可能需微调或重新训练。

📚 六、命名惯例 & 扩展阅读

  • 深度学习模型常以 “任务名 + Net” 或 “Deep + 任务名” 命名:

    • FaceNet(本课)、DeepFace、DeepID 等。
  • 推荐论文:

    FaceNet: A Unified Embedding for Face Recognition and Clustering
    Florian Schroff, Dmitry Kalenichenko, James Philbin (CVPR 2015)


✅ 七、总结要点(速记)

要点内容
目标学习一个嵌入空间,使同类样本靠近,异类远离
三元组(Anchor, Positive, Negative)
损失公式$\displaystyle \mathcal{L} = \max\left( |f(A)-f(P)|^2 - |f(A)-f(N)|^2 + \alpha,\ 0 \right)$
超参数间隔 $\alpha > 0$(常用 0.2)
关键技巧难例挖掘(Hard Triplet Mining)
数据要求每人 ≥2 张图(用于构造 Positive 对)
应用场景人脸识别、Re-ID、相似性检索等
本文由作者按照 CC BY 4.0 进行授权