什么是contrastive learning?

【自监督学习】对比学习(Contrastive Learning)介绍 我们知道,标注数据总是有限的,就算ImageNet已经很大,但是很难更大,那么它的天花板就摆在那,就是有限的数据总量。NLP领域目前的经验应该是:自监督预训练使用的数据量越大,模型越复杂,那么模型能够吸收的知识越多,对下游任务效果来说越好。这可能是自从Bert出现以来,一再被反复证明的真理,如果它不是唯一的真理,那也肯定是最大的真理。 阅读详情

阅读更多,欢迎关注公众号:论文收割机(paper_reader)
因为排版问题,很多图片和公式无法直接显示,欢迎关注我们的公众号点击目录来阅读原文。

引言


 

对比学习最近特别火,为了弄懂这个方向以及需要解决的问题,所以本文将各个领域内比较重要的一些工作拿出来介绍讨论一下。对比学习(Contrastive learning)的主要是与自学习(self-supervised learning)结合起来,从而挖掘数据集本身的一些特性,来帮助模型进行无标签的学习。

 

 

计算机视觉


 

  • SimCLR

对比学习在计算机视觉中的一篇代表作就是Hinton的SimCLR的模型

A Simple Framework for Contrastive Learning of Visual Representations, ICML 2020

这篇文章使用了一个非常简单的框架,将计算机视觉中任务的表现力都提升了不少。模型非常简单,如下图

图片

这里面涉及到四个模块:

  • 数据增广(data augmentation)$\tau$ (τ)。这个模块将数据进行变化,比如一张图片进行裁剪,颜色变化之类的操作,从而得到新的数据。这个部分是比较重要的,之后我们单独拿出来介绍。

  • 数据编码(encoder)f(·)。这个部分就是模型,比如一个深度的神经网络。

  • 投影首部(projection header)g(·)。这个部分是为了将两个编码的向量投影到共同的空间中进行对比学习。

  • 对比损失函数(contrastive loss)。也就是图中的maximize agreement。

 

整个对比学习的流程如下,首先对一个样本进行两次数据增广,这样就得到两个本身并不在数据中存在的样本,分别将两个样本通过左边的数据编码和投影头部,就能得到两个向量,z_i, z_j。此时因为这两个新的样本都是从同一个样本中产生出的,所以它们应该具有相似的信息。这时候,通过对比损失函数来最大化这两个向量之间的相似度,从而就可以优化模型。损失函数如下:

图片

可以看到,我们需要去定义sim函数,也就是相似度函数,一般是余弦相似度。同时,观察分母可以看到这个是把其他样本作为负样本来处理。

 

数据增广一般是与模型无关的方法, 在图片中有如下的操作

图片

crop,flip,color,rotate等等。这些操作如果都是针对一张图的,那么就是产生一对正样本,否则,就是负样本。通过不同数据增广的组合,实验得到如下的结论

图片

数值代表预测的准确率。可以看到简单的颜色变化以及截块的操作,就能够达到非常好的效果,所以结论就是数据增广的方式越简单,越能够反映样本的特性越好。

 

  • MoCo

除了Hinton的这篇文章,Kaiming也提出了一个新的计算框架,MOCO

Momentum Contrast for Unsupervised Visual Representation Learning, CVPR 2020

这篇文章的主要思路就是让训练过程中不再需要很大的batch size,也能够很好的产生对比损失,模型核心如下

图片

query和key都是与之前的数据增广相同的样本,不同的是,这里的key是在训练中用字典保存的,这样就可以保存大量的key样本,而每次训练的时候,只需要输入小batch就可以达到比较好的训练效果。伪代码如下:

图片


如果看一下文章中的伪代码,就会发现设计起来是这样子的思路:

  1. 首先初始化两个相同的模型;

  2. 拿出一组样本来生成数据增广样本;

  3. 计算损失函数;

  4. 将key分支的模型的update与query分支的模型分隔开,然后通过momentum的方式来更新key分支的模型;

  5. 将目前batch里的样本放到key 字典中 (enqueue/dequeue)

  6. 重复迭代。

 

通过这两篇文章,我们比较清楚的知道了对比学习中比较关键点就是在于如何构建augmentation,不同的方式得到的样本对下游任务提供的信息帮助是不同的。除了CV里的对比学习,接下来我们介绍NLP里的对比学习。

 

 

自然语言处理


 

NLP任务中的数据主要是文本数据,文本数据与图片最大的不同就是样本的输入形式就已经是离散的,所以这里面就会导致在数据augmentation的方式上会有所不同。

 

  • CLEAR

CLEAR: Contrastive Learning for Sentence Representation, arxiv 2020

这是一篇整体上对文书数据如何做augmentation讲的比较全面的对比学习的文章,训练框架基本上与SimCLR相同:

图片

但是在augmentation上,是通过以下的四种方式

  • 词语删除;

  • 片段删除;

  • 次序重排;

  • 同义词替换。

 

这四种方式能够重复的利用已有的数据去生成更多的新的样本,从而完成对比学习的训练。这篇文章在训练上将mask language model (MLM),也就是transformer中常用的训练方式与contrastive learning loss结合起来,构成了一个整体的loss:

图片

这样就能够充分利用好数据进行预训练。

 

讲到文本数据的augmentation,其实可以研究一下一篇2019年EMNLP的文章:

 

  • EDA

Wei, Jason, and Kai Zou. "EDA: Easy Data Augmentation Techniques for Boosting Performance on Text Classification Tasks."  EMNLP-IJCNLP. 2019.

 

这篇文章也介绍类似的数据增广的方式,虽然不是在对比学习中使用的,但是其中的设计也是借鉴的。文中提到了以下的数据增广的方式

  • 同义词替换(Synonym Replacement)

  • 随机插入

  • 随机交换

  • 随机删除

 

图片

图片

 

通过这样的几种方式,通过增加了训练的数据量来增强模型的健壮性。

 

 

图


 

相对文本以及图像数据,图数据具有更强的结构性,属于高维的数据。因此也是具有一些特殊的数据增广的方式。

 

  • GraphCL

Graph Contrastive Learning with Augmentations (GraphCL), NIPS 2020

图片

其中从node和edge的角度可以分别做augmentation。比如通过随机删除一些节点,或者对边进行随机的变化(perturbation)。

 

  • GCC

GCC: Graph Contrastive Coding for Graph Neural Network Pre-Training, KDD 2020

图片

除了GraphCL这种,GCC也提出了可以通过random walk来生成正样本以及负样本。GCC中的一个节点的样本是它周围通过随机游走产生的一个子图。如果两个子图是同一个节点随机游走生成的子图,那么就是一对正样本,否则就是负样本,这样就可以完成对比学习。

 

 

推荐系统


 

基于图的对比学习,也促进了推荐系统领域对于该训练框架的讨论,今年SIGIR2021 上就有一篇SGL的文章,通过将现有的图神经网络协同过滤模型与对比学习结合

Wu, Jiancan, et al. "Self-supervised Graph Learning for Recommendation." arXiv preprint arXiv:2010.10783 (2020).

 

值得注意的是该文的共同作者也是比较有名的NGCF,LightGCN的作者xiang wang以及xiangnan he。SGL模型在对比学习上的整体框架也是与之前类似的,需要进行数据增广,然后对比学习。当然,推荐系统中的对比学习更类似于图上的对比学习,所以SGL也是对node以及edge进行操作

图片

三种不同的augmentation:

  • node drop

  • edge drop

  • random walk

 

值得注意的是,这里的random walk不再是完全的随机游走,而是强调edge drop的layer-wise的特性。

 

 

总结


 

这篇文章简单梳理了图像,文本,图,以及推荐系统领域里的几个比较典型的使用对比学习来进行训练的模型。目前来看对比学习的核心点还是在于进行数据增广,以及应用对比损失函数来。不过也有一些最新的工作讨论到除了直接对样本进行修改,也可以考虑加drop-out来改变模型输出从而得到新的样本,比如SimCSE:

Gao, Tianyu, Xingcheng Yao, and Danqi Chen. "SimCSE: Simple Contrastive Learning of Sentence Embeddings." arXiv preprint arXiv:2104.08821 (2021).

这篇文章就提出只要在transformer里加一层drop-out mask,就可以进行很好的对比学习。

 

目前来看,对比学习还是处于蓬勃代发的状态,大家感兴趣的应该都可以参与进来这个方向进行研究。

笔者也在逐步整理了一些对比学习上的文章,可以大家一起学习,可以点击访问链接

https://github.com/ContrastiveSR/Contrastive_Learning_Papers

图片

阅读更多,欢迎关注公众号:论文收割机(paper_reader)
因为排版问题,很多图片和公式无法直接显示,欢迎关注我们的公众号点击目录来阅读原文。


往期文章:

对比学习(contrastive learning) 什么是自监督学习? 举个通俗的例子:即使不记得物体究竟是什么样子,我们也可以在野外识别物体。 我们通过记住高阶特征并忽略微观层面的细节来做到这一点。那么,现在的问题是,我们能否构建不关注像素级细节,只编码足以区分不同对象的高阶特征的表示学习算法?通过对比学习,研究人员正试图解决这个问题。 什么是对比学习? 对比学习是一种自监督学习方法,用于在没有标签的情况下,通过让模型学习哪些数据点相似或不同来学习数据集的一般特征。 让我们从一个简单的例子开始。想象一下,你是一个试图理解世界的新生婴儿。在家里,假设你有两只 阅读详情

相关推荐

WHAT SHOULD NOT BE CONTRASTIVE IN CONTRASTIVE LEARNING

WHAT SHOULD NOT BE CONTRASTIVE IN CONTRASTIVE LEARNING 一、背景介绍: ​ 现在的自监督对比学习方法,大多通过学习对不同的数据增强保持不变,从而学习到一个好的视觉表征。这里就隐含地假设了一组特定地表示不变性,(比如颜色不变性),但是如果下游任务不满足这种假设条件时,(比如区分黄色轿车和红色轿车),这种方法可能就会对任务起到反作用。 ​ 对于数据增强来说,我们在网络中引入的每一种增强都是鼓励网络对该种变换保持不变性。 ​ 如上图所示,自监督对比学习

Yore_的博客 2446

【深度学习】对比学习(Contrastive Learning)解析

本文详细介绍了一种自监督学习方法——对比学习(Contrastive Learning)。对比学习作为一种强大的自监督学习方法,已经在计算机视觉、自然语言处理、推荐系统等多个领域展现出巨大潜力。它不仅降低了对标注数据的依赖,还提升了模型的泛化能力和表示学习能力。

欢迎来到我的优快云个人博客主页! 1万+

Parametric Contrastive Learning:长尾问题中的对比学习

一、监督学习中的损失函数公式 在监督学习中,上面公式是我们最常见的形式,其中,q为query representation,也就是特征,w_y是fc层的权重,相乘得到logits。 二、长尾中重加权的损失函数公式 以Class-Balanced Loss Based on Effective Number of Samples这篇论文为例,为了解决数据的不平衡问题,通常在传统损失函数前面乘以权重。 三、无监督对比学习MoCo 简单介绍一下这个著名的算法MoCo,即Momentum Contrast。 首先

saya21的博客 2880

【AI知识点】对比学习(Contrastive Learning)

对比学习(Contrastive Learning) 是一种基于样本之间相似性和差异性的无监督或自监督学习方法,旨在通过构建正例和负例对来学习数据的有效表示。对比学习广泛应用于自然语言处理(NLP)、计算机视觉(CV)等领域,尤其在表征学习(Representation Learning) 中表现出色。通过对比正例和负例,模型能够学习到不同样本之间的相似性和差异性,从而生成更具区分性的特征表示。

AI完全体 3580

Representation Learning with Contrastive Predictive Coding 论文阅读

前阵子读了一篇对比学习(Contrastive Learning)领域的经典论文《Representation Learning with Contrastive Predictive Coding》(Contrastive Predictive Coding 又简称 CPC),因为论文确实有点难理解,洛基也是在网上翻找了许多博客资料(在此对他们表示感谢,参考博文的链接会在文末附上),前后花了有一周时间,硬啃公式之后才理解了几成,所以在此把自己的理解记录一下,希望能帮到同样在看这篇论文的你们。 首先要说的

sinat_34604992的博客 1518

对比学习(Contrastive Learning)中的损失函数

文章目录写在前面一、Info Noise-contrastive estimation(Info NCE)1.1 描述1.2 实现二、HCL2.1 描述2.2 实现三、文字解释四、代码解释4.1 Info NCE4.2 HCL 写在前面   最近在基于对比学习做实验,github有许多实现,虽然直接套用即可,但是细看之下,损失函数部分甚是疑惑,故学习并记录于此。关于对比学习的内容网络上已经有很多内容了,因此不再赘述。本文重在对InfoNCE的两种实现方式的记录。 一、Info Noise-contrasti

YYyyy 5万+

【机器学习】对比学习(contrastive learning)

SSL 中使用的最古老和最受欢迎的技术之一是对比学习,它使用“正”和“负”样本来指导深度学习模型。此后,对比学习得到了进一步发展,现在被用于完全监督和半监督的环境中,并提高了现有技术水平的性能。现在让我们讨论一下对比学习的工作原理。对比学习如何在 Vision AI 中发挥作用?对比学习模仿人类的学习方式。例如,我们可能不知道什么是水獭或什么是灰熊,但看到图像(如下所示),我们至少可以推断出哪些图片显示的是相同的动物。

TwcatL 6504

AI学习指南深度学习篇-对比学习(Contrastive Learning)简介

对比学习是一种无监督学习方法,旨在通过比较不同样本之间的相似性和差异性来学习数据的特征表示。对比学习中的关键操作是构建“正样本对”和“负样本对”。正样本对:两个样本具有相似的特征,比如在图片中,同一物体的不同角度或不同的光照条件。负样本对:两个样本具有不同的特征,比如不同物体的图像。通过学习模型将正样本对的距离缩小,负样本对的距离扩大,促进模型对数据的深入理解。对比学习作为一种新兴的无监督学习方法,正在快速发展并广泛应用于多个领域。

俞兆鹏的博客 2931

开源项目教程:Hierarchical Contrastive Learning

开源项目教程:Hierarchical Contrastive Learning 项目介绍 Hierarchical Contrastive Learning 是一个基于 PyTorch 的开源项目,旨在通过多标签层次对比学习框架来提升模型在未见数据和下游任务上的表现。该项目由 Salesforce 开发,并在 CVPR 2022 上被接受。该框架通过引入层次保持损失函数,能够利用所有可用标签并保...

gitblog_00080的博客 840

Contrastive Learning原理与代码实例讲解

Contrastive Learning原理与代码实例讲解 作者:禅与计算机程序设计艺术 / Zen and the Art of Computer Programming 1. 背景介绍 1.1 问题的由来

AI天才研究院 1209

SelfSupervised Contrastive Learning for Medical Image S

作者:禅与计算机程序设计艺术 1.简介 1.1 研究背景及意义 随着医疗图像数据的爆炸增长、普及及应用的广泛性,基于医学图像的数据分析在医疗诊断、病理分类、辅助诊断等多个领域发挥着越来越重要的作用。而基于自监督学习的方法可以克服数据集不足的问题,通过对大

AI天才研究院 2348

对比学习介绍Contrastive Learning

Generative Methods(生成式方法)这类方法以自编码器为代表,主要关注pixel label的loss。举例来说,在自编码器中对数据样本编码成特征再解码重构,这里认为重构的效果比较好则说明模型学到了比较好的特征表达,而重构的效果通过pixel label的loss来衡量。 对比式学习着重于学习同类实例之间的共同特征,区分非同类实例之间的不同之处。与生成式学习比较,对比式学习不需要关注实例上繁琐的细节,只需要在抽象语义级别的特征空间上学会对数据的区分即可,因此模型以及其优化...

小幸运 5612

卫星测试科普(三):卫星载荷的核心测试设备探秘

总的说来,卫星芯片与元器件,部组件与单机,整机与子系统,系统与整星的设计、定型、制造、验证、总装、发射、在轨等环节都离不开各种测试场景,对于这些卫星测试场景而言,“射频三大件”与高速数字示波器是构成强大测试系统的基础。卫星通信信号生成:覆盖Ka、Q等波段,具备扫频、脉冲、数字调制、噪声信号、雷达信号、数据链信号、OFDM 等多种信号库,用于测试和验证卫星电子设备的电气性能、频率响应、抗干扰能力等。卫星的通信需要高效、快速地传输大量数据,高速信号的质量至关重要,如果卫星信号不佳,卫星就会出现故障或者隐患。

spwbjss的博客 2319

Dual-Contrastive-Learning 开源项目教程

Dual-Contrastive-Learning 开源项目教程 项目介绍 Dual-Contrastive-Learning 是一个基于对比学习方法的开源项目,旨在通过双重对比机制提升模型的特征学习能力。该项目主要应用于图像和文本数据的特征提取,通过对比学习增强特征的判别性,从而提高下游任务的性能。 项目快速启动 环境配置 首先,确保你已经安装了必要的依赖包。可以通过以下命令安装: pip in...

gitblog_00134的博客 620

基于ENVI5.6与SARscape的哨兵一号时序InSAR实战:从数据准备到PS/SBAS结果解译

本文详细介绍了基于ENVI5.6与SARscape软件,利用哨兵一号(Sentinel-1)卫星数据,进行PS-InSAR与SBAS-InSAR时序分析,以监测地表形变的完整实战流程。内容涵盖从数据下载、软件配置、预处理、核心处理步骤到结果解译与质量评估,重点解析了PS与SBAS方法的关键参数设置、常见问题及解决方案,旨在帮助用户掌握从数据准备到成果分析的完整技术链条。

oo7890的博客 634

向量数据库安全实战:从Embedding反推到检索越权的全链路防护

随着RAG应用在企业中的普及,向量数据库已成为知识库系统的核心组件。但许多团队对向量数据的安全认知仍停留在传统数据库的账号密码、网络隔离和磁盘加密上。事实上,向量化并非加密,而是一种有损压缩的语义映射,向量本身可以被反推模型还原出原文关键信息,形成高保真的语义泄露通道。同时,相似度检索的模糊匹配特性打破了传统行列权限模型,使得越权检索和成员推断攻击成为新的安全威胁。理解这些原理,有助于企业在数据采集、向量化、索引构建、检索查询等环节构建分层防护体系,包括脱敏、扰动、过滤下推、网关控制等手段。本文从基础概念出

weixin_29323551的博客 259

Parametric-Contrastive-Learning 项目使用教程

Parametric-Contrastive-Learning 项目使用教程 1. 项目目录结构及介绍 Parametric-Contrastive-Learning/ ├── assets/ ├── GPaCo/ │ ├── LT/ │ ├── MAE-ViTs/ │ ├── Seg/ │ │ └── semseg/ │ └── sh/ ├── LICENSE ├── R...

gitblog_00286的博客 742

太美了!现代女主jk海军风穿搭四视图

哪个女孩子初高中的时候不买几套JK衣服啊,穿上完全是青春女孩。那还愣着干啥,不得也给你的漫剧女主也穿上!直接就是分享三套JK穿搭,红棕双麻花辫配经典水手服,是那种乖乖巧巧的元气学妹;粉色羊毛卷双马尾,搭配蝴蝶结和小挎包甜度直接拉满;还有灰棕色侧麻花辫,浅蓝上衣配黑色百褶裙,温柔里又带点小酷。下面把这三套角色的完整提示词分享出来,喜欢哪套就拿去参考,改改发型和配色,还能继续解锁新角色!

欢迎来到鸾姝淡月博客,专为程序员和编程爱好者打造的技术博客。我们分享编程语言趋势、开发工具、编程哲学、职业发展等,助你掌握新技术,优化技能,激发编程热情。 53

Decoupled Contrastive Learning 项目教程

Decoupled Contrastive Learning 项目教程 1. 项目的目录结构及介绍 Decoupled-Contrastive-Learning/ ├── README.md ├── requirements.txt ├── setup.py ├── data/ │ └── ... ├── models/ │ ├── __init__.py │ ├── model.py...

gitblog_00130的博客 556

第三篇:NVIDIA cuOpt Python API 详解:LP、QP、MILP 建模与求解,附核心术语名词解释

NVIDIA cuOpt是一款GPU加速的优化求解库,支持LP、QP、MILP和路径优化问题。本文详细介绍了其Python API使用方法,包括核心类Problem的变量定义、约束添加、目标设置和求解配置,并提供了术语解释。cuOpt通过GPU并行计算大幅提升大规模优化问题的求解效率,支持多种求解算法和参数配置,适用于需要高性能计算的优化场景。安装方式包含pip和Docker两种,验证安装后即可快速开始建模求解。

算法工程师 236

173、NPU的编译器开发:开源社区贡献指南

本文分享了在NPU编译器开源社区贡献的经验心得。作者通过实际案例(如卷积维度错误、NaN输出等)阐述了NPU编译器开发的特殊性:硬件迭代快、边界条件复杂、厂商代码不可全信。提出有价值的贡献应聚焦硬件适配测试、性能剖析工具和反模式文档三类内容。强调用实测数据沟通、主动承担维护责任、保持代码通用性等社区协作技巧,并建议通过RFC提前沟通、附硬件实测数据等方式提高PR通过率。最后指出,NPU编译器开发是与聪明人共同填坑的过程,鼓励开发者提交"有诚意的代码"而非完美代码。

m0_50546716的博客 35

Decoupled Contrastive Learning 开源项目教程

Decoupled Contrastive Learning 开源项目教程 项目介绍 Decoupled Contrastive Learning 是一个用于深度学习中的对比学习方法的开源项目。该项目通过解耦对比损失函数,提高了模型的性能和训练效率。对比学习是一种自监督学习方法,通过学习数据的高级表示来提高模型的泛化能力。 项目快速启动 环境准备 首先,确保你已经安装了必要的依赖包: pip in...

gitblog_00872的博客 682

HANA-公司间销售ICS-IDOC系统配置-保姆级配置文档

合作伙伴编号:这个客户表示收票方(销售公司在生产公司中所对应的客户代码,卖方开票,买方收票),也就是咱们在配置消息类型输出的时候合作伙伴的类型的一个具体的客户编码,这个是站在发货工厂的角度去看的,也就是EDI 输出的 BP 合作伙伴的编号;在项目实施过程中经常会遇到关联方交易的问题,有公司间采购的业务场景,也会存在公司间销售的业务场景,本文将着重讲解公司间销售在SAP系统中的实现场景。在这个过程中,销售公司向客户开票产生应收,而生产公司向销售公司开票产生自己的应收,同时销售公司向生产公司产生应付。

我小时候很黑的博客 2392

开源项目教程:Contrastive-Learning-Papers-Codes

开源项目教程:Contrastive-Learning-Papers-Codes 项目介绍 Contrastive-Learning-Papers-Codes 是一个收集了关于对比学习(Contrastive Learning)的论文和代码的开源项目。对比学习是一种无监督表示学习技术,旨在通过学习数据的表示,使得相似的数据点在表示空间中更接近,而不相似的数据点则更远离。该项目汇集了顶级会议上的对比...

gitblog_00218的博客 881

移动机器人路径规划中噪声环境下的鲁棒性测试仿真

设计一个二维或三维环境模型,包括静态障碍物和可能存在的动态障碍物。

amy_mhd的博客 126

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

SPCL:Siamese Prototypical Contrastive Learning

对比学习前沿论文解析

qq_45527974的博客 1319

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

上一篇: 序列推荐模型梳理(Sequential Recommendation)
下一篇: Claude Code 源码泄露后,我才看懂 AI 编程真正进化到了哪一步
paper_reader
博客等级 码龄8年 157粉丝 46原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值