理解对比学习(contrasive learning)

1.什么是对比学习?

对比学习,顾名思义就是在训练中和某些东西进行对比从而学习,在自编码器中,输出与自己进行对比,从而得到一个中间量latent code,我认为这也是一种对比学习。

2.对比学习框架图

分三步,数据增强,编码,loss最小化(相似度)
在这里插入图片描述
第一步和第三步很好理解,第二步CNN将图像压缩成一个latent code,根然后又做了一个投影网络,去投影到一个更深的latent coder,据经验这个额外的步骤可以提升模型的利用率和性能。

余弦相似度

两个向量的相似度常用余弦相似度去计算,它是基于两个向量在空间中的角度去判断其是否相似的。角度越接近0,两个向量越相似。在这里插入图片描述

3.SimCLRv2(2020)

了解一个更进一步的操作,在第二章对比模型框架图,我们直接把它定义为latent code编码。
下图展示了一个更好性能的对比学习,即编码+微调+蒸馏。
一般情况下,我们通过CNN编码后,通过MLP投影头的输出与输入进行损失,在训练完成后,我们会丢弃MLP投影头,只使用encoder作为latent code编码器。在SimCLR中就是这样做的,把MLP整个丢掉,然后通过有标签的数据进行微调。v2呢保留了一层MLP然后再微调,相当于加入了一个全连接层。

微调

微调是非常简单的,在拥有具体任务时,例如分类任务,我们就使用训练好的encoder+一层MLP作为一个预训练模型,进行一定程度的监督,去微调这个模型,从而更好的完成他的工作。事实上微调是要有的,如果不进行微调就相当于直接拿一个预训练模型进行预测,当然是不合理的。
在这里插入图片描述

4.总结

总的来说,这个方法没感觉比自编码器高明到哪里去,只是说之前是输出和输入进行相似度可以使latent code表示此物体,对比学习呢通过增强输入,让两个增强后的输入和输出(还是原来的物体)进行相似,可以表达某一类物体?例如,旋转后的猫如果和不旋转的猫都很相似的话,我们更认为这个潜在表征是正确的,它消除了旋转带来的影响。但我个人感觉还是有一定的瑕疵,例如猫它本身不会旋转的,狸花猫和英短之间的潜在表征是否应该相似呢?我们是否可以用输入的多样性直接去计算相似度?不管如何,在无监督(自监督)的学习中,对比学习是一个很聪明的手法。

### 对比学习的概念 对比学习是一种无监督或自监督的学习范式,其核心目标是从数据中提取有意义的特征表示。通过构建正样本对负样本对,模型能够最大化正样本之间的相似度并最小化负样本之间的相似度[^1]。 具体而言,在对比学习框架下,输入的数据通常被转换成高维空间中的向量表示。这些向量之间可以通过某种距离度量(如余弦相似度或欧几里得距离)来衡量它们的接近程度。例如,某些研究采用基于余弦相似性的边界框分类器设计,其中类别预测由超球面内的RoI特征与类权重间的缩放余弦相似性计算得出[^2]。 ### 实现方法 对比学习的主要实现方式依赖于损失函数的设计。常用的对比损失函数形式如下: #### 1. **InfoNCE Loss** 这是目前最广泛使用的对比损失之一。给定一组锚点、正样本以及多个负样本,InfoNCE loss 的定义为: ```python import torch from torch.nn.functional import normalize def info_nce_loss(anchor, positive, negatives, temperature=0.5): anchor = normalize(anchor, dim=-1) positive = normalize(positive, dim=-1) negatives = normalize(negatives, dim=-1) pos_sim = torch.exp(torch.sum(anchor * positive, dim=-1) / temperature) neg_sims = torch.sum(torch.exp(torch.matmul(anchor.unsqueeze(1), negatives.T).squeeze() / temperature), dim=-1) return -torch.log(pos_sim / (pos_sim + neg_sims)).mean() ``` 上述代码实现了 InfoNCE 损失的核心部分,即通过温度参数调整后的 softmax 函数优化正负样本间的关系。 #### 2. **SimCLR Framework** SimCLR 是一种流行的对比学习框架,它利用增强技术生成同一图像的不同视图作为正样本,并将其他样本视为负样本。该框架的关键在于选择合适的增广策略以保持语义一致性的同时增加多样性[^3]。 ### 应用场景 对比学习的应用范围非常广泛,涵盖了计算机视觉、自然语言处理等多个领域。以下是几个典型应用案例: #### 计算机视觉 - 图像检索:训练一个网络使得查询图片与其相关联的目标更接近。 - 自动标注:通过对未标记数据进行预训练从而提升下游任务性能。 #### 自然语言处理 - 句子嵌入:生成高质量文本表示以便用于各种 NLP 下游任务。 - 跨模态匹配:比如图文配对问题,可以借助对比学习找到最佳对应关系。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值