1. 前言
本系列主要记录和整理自己在学习对比学习过程中的一些笔记和心得。本篇内容为第一章,主要是对于一些基本内容做解释,之后也会出系列经典的对比学习论文。内容表诉可能并不准确,欢迎大家友好交流~
2. 自监督学习(Self-Supervised Learning)
在了解对比学习之前,我们先聊聊监督学习、无监督学习、自监督学习。
监督学习: 用一句话讲,就是有标签的学习。模型通过一组输入数据和对应的标签label进行训练。
无监督学习: 顾名思义,无监督就是无标签的学习。在没有给定明确标签的情况下对数据进行建模。聚类分析就是典型的无监督学习。
那什么是自监督学习: 自监督学习是一种特殊的无监督学习形式,它利用数据本身的一部分作为监督信号来构建预训练任务。用直白的话说就是:虽然提供给模型训练的数据本身没有标签,但我们可以通过这些原始数据构造一个任务目标 (代理任务,Pretext Task),让模型通过完成这些任务来学习,从而获得通用的特征表达能力。一旦模型具备了这种能力,就可以被微调并应用到各种下游任务中。
最典型的例子就是:NLP中的BERT模型。在BERT的训练过程中,输入文本中的一部分词会被随机掩盖,然后模型的任务就是预测这些被掩盖的词是什么。通过这种代理任务迫使模型去理解上下文,并根据周围的词汇来推测缺失的信息,从而有效地学习到双向的上下文信息。
3. 什么是对比学习(Contrastive Learning)?
对比学习,按照字面意思,就是通过对比去学习。
因为只是对比着去学习,所以训练过程无需提前标注好标签。在自监督学习概念没有火起来之前,大家更多把对比学习归为无监督学习。后自监督学习的概念火起来之后,现在更多把它归为自监督学习。
在对比学习中,模型通过构造正样本对(Positive Pair,即相似或相关的样本)和负样本对(Negative Pair即不相关或差异较大的样本),并尝试区分这两者来学习数据的表示。这种学习方式允许模型捕捉到数据中的内在结构,并学习到对于下游任务有用的特征表示,而不需要依赖于人工标注的数据。
图片来源:https://blog.csdn.net/weixin_54338498/article/details/131986565
4. 对比损失( Contrastive loss)
前面的内容都算比较好理解。接下来上一点干货,为后面的论文精读系列提前打好基础哈哈
交叉熵损失(Cross-entropy Loss)
之前一般去做分类任务,我们会使用交叉熵损失(Cross-entropy Loss) 。对于一个多分类问题,假设我们有C 个类别,交叉熵损失可以表示为:
L
CE
=
−
∑
i
=
1
C
y
i
log
(
y
^
i
)
\mathcal{L}_{\text{CE}} = -\sum_{i=1}^{C} y_i \log(\hat{y}_i)
LCE=−i=1∑Cyilog(y^i)
其中C为类别数,
y
i
y_i
yi是第 i 类别的真实标签(0 或 1),即一个one-hot编码向量。
y
^
i
\hat{y}_i
y^i是模型对第 i 类别的预测概率,通常通过softmax函数从模型输出的原始分数转换而来。(对于每一个预测的类别,希望它预测的结果越接近1,那么log后它就约接近0,那乘以其他原标签的1就越小)
Noise Contrastive Estimation Loss(NCE loss)
在对比学习中,所输入的数据无标签label、输入的形式为一个正样本或者负样本数据对、分类中可能会把单个示例看作单独的一个类别导致类别数量十分庞大无法进行softmax计算等等原因,传统的交叉熵损失并不适合。
NCE loss是从nlp领域提出的,主要解决的分类问题中类别数过多导致的softmax交叉熵损失函数计算量过大的问题。它的核心思想是将问题转化为二分类问题:给定一个正样本,判断另一个样本是来自数据分布(正样本,比如数据增强后的版本)还是噪声分布(负样本,非本类别的样本)。
NCE loss的计算规则如下:
这里的f函数,是一个评分函数,用来衡量两个样本之间的相似度或匹配程度,xi与xj之间为正样本,xi与xk之间为负样本。其实就是想让后面的部分接近1,负log后的loss就接近0。然后
τ
\tau
τ是温度参数,为超参数,用于调整相似度得分的锐度(记住就行)。
InfoNCE Loss
InfoNCELoss 是NCE Loss的一个改进,它专注于对比学习,特别是在自监督学习环境中,试图最大化正样本对之间的互信息,同时最小化负样本对之间的互信息。
其中:
其中,NCELoss 中的评分函数 f(.,.) 可以是任意形式,而 InfoNCELoss 中通常使用余弦相似度或点积。
总结来说:InfoNCELoss 是在NCELoss 的一个优化,更适合对比学习任务中。