表示/嵌入差异-7.1-间隔/边际对齐(Alignment Margin)-算法-Contrastive Loss(对比损失)-Triplet Loss (三元组损失)-InfoNCE / NT-Xe

1. Contrastive Loss(对比损失):

Contrastive Loss 是最早的度量学习损失之一,直接对成对样本(正/负)施加 Margin 约束,分为两部分分别优化正、负样本对:

  • 对正样本对:强制距离尽可能小(趋近于 0);
  • 对负样本对:强制距离至少大于 Margin 值 α\alphaα,否则惩罚。

数学公式
L=12N∑i=1N[yi⋅d(ai,pi)2+(1−yi)⋅max⁡(α−d(ai,ni),0)2]\mathcal{L} = \frac{1}{2N} \sum_{i=1}^N \left[ y_i \cdot d(a_i, p_i)^2 + (1-y_i) \cdot \max(\alpha - d(a_i, n_i), 0)^2 \right]L=2N1i=1N[yid(ai,pi)2+(1yi)max(αd(ai,ni),0)2]
其中:

  • yiy_iyi:样本对标签(yi=1y_i=1yi=1 表示正样本对,yi=0y_i=0yi=0 表示负样本对);
  • α\alphaα:Margin 参数(通常取 1.0~2.0);
  • NNN:样本对数量。
  • d=∥ai−pi∥2=(∑i=1N(ai−pi)2)1/2d = \|a_i - p_i\|_2 = (\sum_{i=1}^N(a^i-p^i)^2)^{1/2}d=aipi2=(i=1N(aipi)2)1/2

1.1 核心逻辑

  1. 损失函数的本质:模型训练的目标是最小化损失值,损失越大,模型调整参数的“动力”越强;
  2. 距离函数 d(a,p)d(a,p)d(a,p):这里默认是欧式距离(L2 距离),即 d(a,p)=∥a−p∥2=(a1−p1)2+(a2−p2)2+...+(ad−pd)2d(a,p) = \|a - p\|_2 = \sqrt{(a_1-p_1)^2 + (a_2-p_2)^2 + ... + (a_d-p_d)^2}d(a,p)=ap2=(a1p1)2+(a2p2)2+...+(adpd)2,距离越大,说明两个嵌入向量越“远”,匹配度越低;
  3. Margin 参数 α\alphaα:是人为设定的“阈值”(比如取 1.0),代表我们希望负样本对的距离至少要达到这个值才“合格”。
1.1.1 正样本对

正样本对的标签 yi=1y_i=1yi=1,代入 Contrastive Loss 公式:
Lpos=yi⋅d(a,p)2=1⋅d(a,p)2=d(a,p)2\mathcal{L}_{pos} = y_i \cdot d(a,p)^2 = 1 \cdot d(a,p)^2 = d(a,p)^2Lpos=yid(a,p)2=1d(a,p)2=d(a,p)2

  • d(a,p)2d(a,p)^2d(a,p)2 是距离的平方(非负),距离和损失呈正相关
    • 如果 aaappp 完全重合(匹配度 100%),d(a,p)=0d(a,p)=0d(a,p)=0,损失 Lpos=0\mathcal{L}_{pos}=0Lpos=0(模型最满意,无需调整);
    • 如果 aaappp 距离远(比如 d(a,p)=2d(a,p)=2d(a,p)=2),损失 Lpos=4\mathcal{L}_{pos}=4Lpos=4(损失大,模型必须调整)。

模型的目标是最小化损失,为了让 Lpos\mathcal{L}_{pos}Lpos 变小,必须让 d(a,p)d(a,p)d(a,p) 变小——也就是让锚点 aaa 和正样本 ppp 的嵌入向量“靠近”。
一句话总结:正样本对的损失直接等于距离的平方,距离越远损失越大,模型为了减少损失,会主动把匹配的两个实体嵌入往一起“拉”。

1.1.2 负样本对

负样本对的标签 yi=0y_i=0yi=0,代入 Contrastive Loss 公式:
Lneg=(1−yi)⋅max⁡(α−d(a,n),0)2=1⋅max⁡(α−d(a,n),0)2\mathcal{L}_{neg} = (1-y_i) \cdot \max(\alpha - d(a,n), 0)^2 = 1 \cdot \max(\alpha - d(a,n), 0)^2Lneg=(1yi)max(αd(a,n),0)2=1max(αd(a,n),0)2
这里的 max⁡(⋅,0)\max(\cdot, 0)max(,0) 是关键——它让损失只有在“负样本对距离小于阈值 α\alphaα”时才生效:

  • 情况 1:d(a,n)<αd(a,n) < \alphad(a,n)<α(比如 α=1.0\alpha=1.0α=1.0d(a,n)=0.5d(a,n)=0.5d(a,n)=0.5):
    max⁡(1.0−0.5,0)=0.5\max(1.0 - 0.5, 0) = 0.5max(1.00.5,0)=0.5,损失 Lneg=(0.5)2=0.25\mathcal{L}_{neg} = (0.5)^2 = 0.25Lneg=(0.5)2=0.25(损失>0,模型需要调整);
  • 情况 2:d(a,n)≥αd(a,n) ≥ \alphad(a,n)α(比如 α=1.0\alpha=1.0α=1.0d(a,n)=1.5d(a,n)=1.5d(a,n)=1.5):
    max⁡(1.0−1.5,0)=0\max(1.0 - 1.5, 0) = 0max(1.01.5,0)=0,损失 Lneg=02=0\mathcal{L}_{neg} = 0^2 = 0Lneg=02=0(损失=0,模型无需调整)。

模型的目标是最小化损失,仅当负样本对距离不足 α\alphaα 时,模型才有调整动力:

  • d(a,n)<αd(a,n) < \alphad(a,n)<α:损失 (α−d(a,n))2(\alpha - d(a,n))^2(αd(a,n))2 是正的,且 d(a,n)d(a,n)d(a,n) 越小(负样本靠得越近),损失越大;
  • 模型为了减少损失,必须让 d(a,n)d(a,n)d(a,n) 变大,直到 d(a,n)≥αd(a,n) ≥ \alphad(a,n)α(此时损失为 0,模型停止调整)。

优缺点:

  • ✅ 优点:

    • 比 triplet 更简单,只需 pair;
    • 计算开销小;
    • 适合二分类式对齐任务。
  • ❌ 缺点

    • 需要平衡正负样本比例;
    • 负样本若太“容易”,模型学不到判别性;
    • 不如 triplet 利用相对关系强。
  • 🎯 适用场景

    • 手写体识别(原始 Siamese Network)
    • 句子语义相似度(如 STS-B)
    • 小规模跨模态对齐(图像-标题)

2 Triplet Loss (三元组损失)

通过一个 锚点(anchor)、一个 正样本(positive)(与 anchor 同类/对齐)、一个 负样本(negative)(不同类/不对齐),强制模型满足:

“anchor 与 positive 的距离 < anchor 与 negative 的距离 - margin”
只有当正样本距离比负样本距离近得不够多(小于 margin)时,才产生损失。

设嵌入函数为 ( f(\cdot) ),距离函数通常为欧氏距离 ( d(x, y) = |f(x) - f(y)|_2 ),则:
Ltriplet=max⁡(d(a,p)−d(a,n)+α, 0) \mathcal{L}_{\text{triplet}} = \max\left( d(a, p) - d(a, n) + \alpha,\ 0 \right) Ltriplet=max(d(a,p)d(a,n)+α, 0)

其中:

  • aaa: anchor
  • ppp: positive
  • nnn: negative
  • α>0\alpha > 0α>0: margin(间隔)

总损失为所有三元组的平均。

  • 仅关注三元组内的相对距离,而非绝对距离;
  • 优化目标是让锚点到正样本的距离,比到负样本的距离至少小 γ\gammaγ,强制拉大正负样本的区分度。
    扩展版本(Batch Hard Triplet Loss)
    为提升优化效率,实际中常用「批次内最难样本」挖掘:
    L=1N∑i=1Nmax⁡(0,d(ai,pi+)−d(ai,ni−)+γ)\mathcal{L} = \frac{1}{N} \sum_{i=1}^N \max(0, d(a_i, p_i^+) - d(a_i, n_i^-) + \gamma)L=N1i=1Nmax(0,d(ai,pi+)d(ai,ni)+γ)
    其中 pi+p_i^+pi+ 是批次内与 aia_iai 距离最远的正样本,ni−n_i^-ni 是批次内与 aia_iai 距离最近的负样本(最难优化的样本对)。

✅ 优点

  • 直观、几何解释清晰;
  • 显式建模相对距离;
  • 广泛用于人脸、Re-ID、跨模态检索。

❌ 缺点

  • 采样困难:需构造有效三元组(避免 trivial triplets);
  • 训练效率低:大量无效三元组导致收敛慢;
  • margin 超参敏感

🔧 改进策略

  • Hard Negative Mining:只选难负样本;
  • Batch All / Batch Hard:在 batch 内挖掘所有或最难三元组;
  • 使用 semi-hard 三元组(正负距离差在 (0, margin) 之间)。

🎯 适用场景

  • 人脸识别(FaceNet)
  • 行人重识别(Person Re-ID)
  • 跨知识图谱实体对齐
  • 图像-文本对齐(早期 CLIP 前身)

3 InfoNCE / NT-Xent(Noise-Contrastive Estimation噪声对比估计)(归一化温度标度交叉熵损失)

注:严格来说 InfoNCE 是理论框架,NT-Xent 是其在 SimCLR 中的具体实现。

InfoNCE(Information Noise Contrastive Estimation)是对比学习的核心损失,NT-Xent(Normalized Temperature-scaled Cross Entropy)是其在批量对比学习中的实现(常用于 SimCLR/MoCo 等框架),核心是将对齐问题转化为「多分类任务」:

  • 把锚点的正样本视为“正确类别”,批次内所有负样本视为“错误类别”;
  • 通过温度系数 ttt 控制 Margin 强度,让模型对正样本的相似度远高于负样本。

一个正样本多个负样本 放在同一个 softmax 分母中,最大化正样本的 log-likelihood。
核心是 多分类代理任务:给定 anchor,从 batch 中找出哪个是它的正样本。
设 batch 中有 2N2N2N 个样本(每对增强视为正样本),对第 iii 个样本:

Li=−log⁡exp⁡(sim(zi,zj)/τ)∑k=1Kexp⁡(sim(zi,zk)/τ) \mathcal{L}_i = -\log \frac{\exp(\text{sim}(z_i, z_j) / \tau)}{\sum_{k=1}^K \exp(\text{sim}(z_i, z_k) / \tau)} Li=logk=1Kexp(sim(zi,zk)/τ)exp(sim(zi,zj)/τ)

其中:

  • zi,zjz_i, z_jzi,zj 是同一原始样本的两种增强视图(正对);
  • sim(u,v)=u⊤v/(∥u∥∥v∥)\text{sim}(u, v) = u^\top v / (\|u\|\|v\|)sim(u,v)=uv/(u∥∥v)(余弦相似度);
  • τ>0\tau > 0τ>0温度参数(temperature),控制分布 sharpness;
  • 总 loss 为所有 iii 的平均。

虽然 没有显式 margin,但 温度 τ 隐式控制“分离程度”:τ 越小,正负越分离。

✅ 优点

  • 利用 batch 内所有样本作为负例,高效;
  • 无需 hard mining;
  • 在自监督学习中 SOTA(SimCLR、MoCo 等)。

❌ 缺点

  • 依赖大 batch size(否则负样本不足);
  • 温度 τ 需调参;
  • 对数据增强敏感。

🎯 适用场景

  • 自监督视觉表示学习(SimCLR, MoCo)
  • 多语言句子嵌入(如 LaBSE)
  • 跨模态预训练(ALIGN, CLIP 的变体)
  • 推荐系统中的用户-物品对比学习
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

natide

觉得有帮助就好

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值