一、小白版InfoNCE原理(一句话速记:拉近正例、推开负例,做对比学习的"择优匹配")
InfoNCE 是 对比学习 里常用的损失函数(全称:Information Noise Contrastive Estimation),核心是让模型学会区分"对的配对"和"错的干扰项",从而学到有用的特征,不用依赖人工标注。
- 核心设定
- 正例:一对"真正相关"的样本(比如同一张图的不同裁剪、同一句话的不同表达)。
- 负例:和当前样本"不相关"的干扰样本(比如其他图片、其他句子)。
- 目标:让模型计算出正例之间的相似度远大于正例与所有负例的相似度。
- 计算逻辑(大白话步骤)
- 给一个锚点样本(比如一张图),找它的1个正例和k个负例,组成一个"候选池"。
- 用模型把这些样本都转换成特征向量(数字串)。
- 计算锚点和每个候选样本的相似度(常用点积,值越大越像)。
- 用softmax函数把相似度转换成"概率",让模型预测哪个是正例。
- 损失函数会惩罚模型把负例认错成正例的情况,反向优化模型,让正例的预测概率越来越接近100%。
二、温度系数τ(tau)的作用(一句话速记:调节"区分难度"的旋钮)
温度系数是InfoNCE损失里的一个超参数,放在softmax之前对相似度做缩放,公式里一般是 相似度/τ。
- 核心作用
- τ>1:软化概率分布。相似度的差距被缩小,模型区分正例和负例的难度降低,训练更平滑,避免过拟合,但可能导致特征区分度不足。
- τ<1:锐化概率分布。相似度的差距被放大,模型会更"较真"地区分正例和负例,特征区分度更强,但容易过拟合,训练不稳定(比如梯度爆炸)。
- τ=1:无缩放,默认状态。
- 小白类比
好比给模型的"眼睛"加滤镜:- τ大=加柔光镜,模糊差异,适合训练初期或负例太多的场景;
- τ小=加锐化镜,强化差异,适合训练后期或需要精细区分的场景。
三、进阶补充
- 原始InfoNCE是用来估计互信息的,后来被广泛用于对比学习(如SimCLR、MoCo等模型)。
- 温度系数的选择是经验活,常用范围是0.05~0.2(视觉任务),需要通过验证集调参。
- 本质上,InfoNCE是把"互信息最大化"转化成"噪声对比分类"问题,让模型在一堆负例中找到正例。
Softmax 函数(也叫归一化指数函数)是深度学习里核心的归一化函数,专门用于把一组任意实数(常称 "logits / 对数几率 / 得分")映射成0 到 1 之间、总和为 1 的概率分布,常作为分类模型的输出层激活函数。