对比学习目标函数怎么设

wen IT资讯 1

本文目录导读:

对比学习目标函数怎么设

  1. 经典基础:对比损失
  2. 主流基石:NT-Xent损失
  3. 变体:InfoNCE损失
  4. 不需要负样本:BYOL 和 SimSiam 的损失
  5. 其他常见损失
  6. 总结:如何选择?

对比学习(Contrastive Learning)的目标函数核心思想是:拉近相似样本(正样本对)的距离,推远不相似样本(负样本对)的距离

根据具体的实现方式和应用场景,目标函数主要有以下几种经典设计:

经典基础:对比损失

这是最原始的对比损失,由 LeCun 等人提出,主要用于训练孪生网络(Siamese Network)。

  • 公式L = (1-Y) * 0.5 * D² + Y * 0.5 * max(0, margin - D)²
  • 解读
    • Y:标签,Y=1 表示正样本对(相似),Y=0 表示负样本对(不相似)。
    • D:两个样本特征向量之间的欧氏距离(或其他距离度量)。
    • margin:一个超参数,对于负样本对,如果距离已经大于 margin,则损失为 0(不再推远);如果距离小于 margin,则继续推远。
  • 效果:正样本对距离越小越好,负样本对距离越大越好,但有一个“天花板”(margin)。

主流基石:NT-Xent损失

这是SimCLRMoCo 等主流对比学习框架使用的核心损失函数,全称是“归一化温度标度的交叉熵损失”。

  • 公式(通常针对一个正样本对 (i, j)): [ L_{i,j} = -\log \frac{\exp(\text{sim}(z_i, zj) / \tau)}{\sum{k=1}^{2N} \mathbf{1}_{[k \neq i]} \exp(\text{sim}(z_i, z_k) / \tau)} ]
  • 解读
    • sim:余弦相似度(cosine similarity)。sim(A, B) = A·B / (|A|*|B|),这保证了特征被归一化到单位球上。
    • 分母:批次中所有其他样本(包括其他正样本和所有负样本)与样本 i 的相似度之和。
    • 分子:唯一正样本对 (i, j) 的相似度。
    • τ:温度系数(超参数),用于控制对负样本的惩罚力度,τ 越小,模型越关注“困难”的负样本(即与锚点相似的负样本)。
  • 本质:这是一个多类分类问题,把当前样本 i 当作一个类别,j 是它的正例,其余 2N-2 个样本都是负例,损失函数计算的是“正样本对 (i, j) 被正确识别出来”的交叉熵。

变体:InfoNCE损失

这是 NT-Xent 的一个通用形式,尤其在CPC(对比预测编码)MoCo 中被使用。

  • 公式: [ Lq = -\log \frac{\exp(q \cdot k+ / \tau)}{\exp(q \cdot k+ / \tau) + \sum{i=1}^{K} \exp(q \cdot k_i / \tau)} ]
  • 解读
    • q:查询(query),例如当前样本。
    • k+:正键(positive key),与 q 对应的正样本。
    • k-:负键(negative key),一个很大的负样本队列(MoCo 中的字典队列)。
  • 与 NT-Xent 的区别:NT-Xent 是 InfoNCE 在 SimCLR 这种一个批次内所有样本互为负样本场景下的特例,InfoNCE 更通用,允许负样本来自一个更大的、动态更新的队列(如 MoCo)。

不需要负样本:BYOL 和 SimSiam 的损失

这些方法不需要显式的负样本,而是通过不对称的网络结构(如预测器 predictor 或动量编码器)来防止模型坍塌。

  • BYOL 损失(负余弦相似度): [ L = 2 - 2 \cdot \frac{\langle q{\theta}(z{\theta}), z{\xi}' \rangle}{||q{\theta}(z{\theta})|| \cdot ||z{\xi}'||} ] 即 2 - 2 * cosine_similarity,它计算在线网络(online network)对某一视图的预测与目标网络(target network)对另一视图的投影之间的余弦相似度,目标是被约束为不会剧烈更新的(动量编码器)。

  • SimSiam 损失(对称的负余弦相似度): [ L = -0.5 * [\text{sim}(p_1, z_2) + \text{sim}(p_2, z_1)] ] p 是预测头(predictor)的输出,z 是投影头(projector)的输出,sim 是余弦相似度,它对称地对两个视图进行预测,并且不依赖动量编码器或负样本。

其他常见损失

  • Triplet Loss:适用于度量学习,公式:L = max(0, D(a, p) - D(a, n) + margin),它要求正样本对 (a, p) 的距离比负样本对 (a, n) 的距离至少小一个 margin,缺点是需要精心选择困难样本(hard negative mining)。
  • Margin Loss:常用于多模态对比学习(如 CLIP),公式:L = max(0, margin - (sim(pos) - sim(neg))),它只维护一个距离差异,而不是 Softmax 概率。

如何选择?

应用场景 推荐目标函数 关键特点
图像自监督学习 NT-Xent (SimCLR) / InfoNCE (MoCo) 需要大量负样本,适合大规模预训练。
图像自监督学习(省资源) BYOL / SimSiam 不需要负样本,避免了大 batch size 或 memory bank,但训练稳定性需调试。
度量学习 / 人脸识别 Triplet Loss / Contrastive Loss 需要定义 margin,对困难样本挖掘敏感。
多模态对齐(如文本-图像) InfoNCE (如 CLIP) 每个模态形成一个 batch,互相作为负样本。
推荐系统 / 图学习 InfoNCE 对比用户-物品或节点-邻居的嵌入。

核心建议

  1. 对于新手或通用视觉任务NT-Xent 损失(SimCLR 风格)是最稳妥、最容易复现的选择,它实现简单,效果好。
  2. 如果需要节省显存或数据有限:尝试 SimSiamBYOL
  3. 温度系数 τ 是关键:通常设置在 0.07 到 0.5 之间,过小会导致模型只关注极少数困难样本,不稳定;过大会导致对所有负样本一视同仁,缺乏区分度。
  4. 归一化:在计算相似度前,务必对特征向量进行 L2 归一化(z / ||z||),这会让损失函数只关注方向(角度),而不受特征模长影响,显著提升性能。

抱歉,评论功能暂时关闭!