Triplet Loss的采样策略与困难样本挖掘
Triplet Loss在人脸识别、度量学习中至关重要。请解释其公式、Anchor-Positive-Negative三元组的构成,以及三种采样策略(Easy/Hard/Semi-hard)的优缺点。
回答
苦行僧
Triplet Loss公式: L = max(d(a,p) - d(a,n) + margin, 0) 其中a(anchor)是锚点,p(positive)同类,n(negative)异类,d是欧氏距离,margin是间隔超参数。
优化目标:拉近同类(减少d(a,p)),推远异类(增大d(a,n)),使同类间距至少比异类间距小margin。
三种采样策略:
-
Easy Triplets:d(a,n) ≥ d(a,p) + margin
- 损失=0,不产生梯度
- 适合验证但不适合训练
-
Hard Triplets:d(a,n) < d(a,p)
- 损失最大,梯度最强
- 但可能导致模型崩溃(仅关注最难样本,忽略一般样本)
-
Semi-hard Triplets:d(a,p) < d(a,n) < d(a,p) + margin
- 平衡策略,FaceNet中采用此策略
- 挖掘出'尚有距离但不够远'的负样本
工程实践:
- Batch-hard策略:在一个Batch内,为每个anchor选择最远的正样本和最近的负样本
- 在线挖掘:前向传播时在当前Batch中选择三元组
- 分布式训练下,需跨GPU共享embedding以扩大候选池(如SyncBN+HN)
FaceNet使用Semi-hard Mining在LFW上达到99.63%准确率。