对比学习(ContrastiveLearning)综述——无监督学习+特征抽象,损失函数:同类尽可能近,不同类尽可能远,思想和聚类类似bonelee

深度学习的成功往往依赖于海量数据的支持,其中对于数据的标记与否,可以分为监督学习和无监督学习。

2.1主要思路:自主地从大量数据中学习同类数据的相同特性,并将其编码为高级表征,再根据不同任务进行微调即可。

2.2分类:

2.2.1生成式学习

生成式学习以自编码器(例如GAN,VAE等等)这类方法为代表,由数据生成数据,使之在整体或者高级语义上与训练数据相近。

2.2.2对比式学习

对比式学习着重于学习同类实例之间的共同特征,区分非同类实例之间的不同之处。

对比学习的目标是学习一个编码器,此编码器对同类数据进行相似的编码,并使不同类的数据的编码结果尽可能的不同。

3.近况

最近深度学习两巨头Bengio和LeCun在ICLR2020上点名Self-SupervisedLearning(SSL,自监督学习)是AI的未来,另外,Hinton和Kaiming两位神仙也在这问题上隔空过招,MoCo、SimCLR、MoCoV2打得火热,这和BERT之后,各大公司出XL-Net、RoBerta刷榜的场景何其相似。

4.感谢

【拿我的画举个例子】我们可以看到下面两张图的马头和精细程度都是不同的,但是我们显然能判断这两张是类似的图,这是为什么呢

对于某个固定锚点x来说,其位置是由与其他点相对位置决定的,而不是画布的绝对位置。==》特征抽象

A中与x邻近的点在B图中相应点距x'距离小,A中与x相距较远的点在B图中相应点距x'距离大。

在一定误差范围内,二者近似相等。

可以这么认为,通过对比学习,忽略了细节,找到并确定所以关键点相对位置。

在这里,我们将之前的想法进行抽象,用空间考虑对比学习。

最终目标:

缩小与正样本间的距离,扩大与负样本间的距离,使正样本与锚点的距离远远小于负样本与锚点的距离,(或使正样本与锚点的相似度远远大于负样本与锚点的相似度),从而达到他们间原有空间分布的真实距离。

动机:人类不仅能从积极的信号中学习,还能从纠正不良行为中获益。

对比学习其实是无监督学习的一种范式。根据经典的SIMCLR,我在这里就直接提供了对比学习中模型的常见形式。

在线性空间中,上述相似度就可以表示为二者向量间的欧几里得距离:

由Hadsell,R.,Chopra,S.,&Lecun,Y..(2006)提出[1],原文只是作为一种降维方法:只需要训练样本空间的相对关系(对比平衡关系)即可在空间内表示向量。

损失定义如下:

为了下文方便解释,这里的参数详细解释如下:

2.1细节定义

2.2过程/主流程

原文类比弹性势能,将正负样本分类讨论。

正样本:

将锚点设为势能零点:

负样本

L原定义:

这样我们就获得了Loss函数最基本的定义:

当Y=1,设二者向量最大距离为m,

空间角度:

空间内点间相互作用力动态平衡。

我们可以看到,和4不那么像的9会被拉远离4,和4相似的9会在交界面上十分接近地分布。这和我们的的对比想法是一致的。

同时,该论文还发现许多对比学习中有趣的现象。

不同光照下,不同角度下,像素间欧氏距离尽管很远,但是能聚集在一个环上。

(简化版原方法)

那么三元组的总体距离可以表示为:【近年论文好像也有沿用的,比较经典】

相较定义来说,TripletLoss认为,假如所有正样本之间无限的拉近,会导致聚类过拟合,所以,就只要求

原文将所有三元组的状态分为三类:

前两个状态会通过loss逐渐变成第三个状态。

【注:后续研究并没有怎么使用原始的NCELoss,而是只使用这里的结论,这里引入是为了说明应该多采用负样本。】

之前从向量空间考虑,NCE从概率角度考虑【原证明为贝叶斯派的证法】,NCE是对于得分函数的估计,那也就是说,是对于你空间距离分配的合理性进行估计。

总之NCE通过对比噪声样本与含噪样本,从而推断真实分布。

【与对比学习思想一致,可以当做是另一角度】

在预测未来信息时,我们将目标x(预测)和上下文c(已知)编码成一个紧凑的分布式向量表示(通过非线性学习映射),其方式最大限度地保留了定义为的原始信号x和c的互信息

通过最大化编码之间互信息(它以输入信号之间的MI为界),提取输入中的隐变量。

互信息往往是算不出来的,但是我们这里将他进行估计,通过不同方法进行估计,从而衍生出自监督的两种方式:生成式和对比式【详见A2.2.2】

互信息上界估计:减少互信息,即VAE的目标。

互信息下界估计:增加互信息,即对比学习(CL)的目标。【后来也有CLUB上界估计和下界估计一起使用的对比学习。】

具体详见CPC论文1.3节。

通过二者互信息【详见附录】来衡量二者距离/相似度,可逼近其下界。

后续研究的核心往往就聚焦于的两个方面:

论文标题:RepresentationLearningwithContrastivePredictiveCoding

很多时候,很多数据维度高、label相对少,我们并不希望浪费掉没有label的那部分data。所以在label少的时候,可以利用无监督学习帮助我们学到数据本身的高级信息,从而对下游任务有很大的帮助。

1.1问题描述

1.2CPC

下图说明了CPC的工作过程:

1.3InfoNCELoss

CPC用到了NCELoss,并推广为InfoNCE:(证明见【附录】)

损失函数定义如下:【f可自由定义,甚至为MLP】

论文标题:MomentumContrastforUnsupervisedVisualRepresentationLearning

本文提出了高效的对比学习的结构。使用基于MoCo的无监督学习结构学习到的特征用于ImageNet分类可以超过监督学习的性能。证明了无监督学习拥有巨大的潜力。

受NLP任务的启发,MOCO将图片数据分别编码成查询向量和键向量,即,查询q与键队列k,队列包含单个正样本和多个负样本。通过对比损失来学习特征表示。

主线依旧是不变的:在训练过程中尽量提高每个查询向量与自己相对应的键向量的相似度,同时降低与其他图片的键向量的相似度。

MOCO使用两个神经网络对数据进行编码:encoder和momentumencoder。

encoder负责编码当前实例的抽象表示。

momentumencoder负责编码多个实例(包括当前实例)的抽象表示。

对于当前实例,最大化其encoder与momentumencoder中自身的编码结果,同时最小化与momentumencoder中其他实例的编码结果。

这个Loss只能更新q向量的encoder。如果同时更新q和k没有意义。

交叉熵损失:

交叉熵损失(Cross-entropyLoss)是分类问题中默认使用的损失函数:

实际上,现有的分类问题是通过一系列深度网络提取特征,然后依据大量的样本学习到一个有关每一类样本特征的模板。在测试的阶段则将这个学到的特征模板去做比对。

非参数样本分类:

所谓非参数样本分类,则是将每个计算出的样本特征作为模板,即看做是计算所得的样本特征模板。

对比损失:

我们最终的目标还是不变的:

这里与CPC类似地,我们使用cosine距离,假设已经归一化特征值,则优化上式实际上等同于最大化下式中的softmax概率,

假设其中有一个正样本其余均是负样本,则根据InfoNCELoss表示为:

由于对比学习的特性,参与对比学习损失的实例数往往越多越好,但MemoryBank中存储的都是encoder编码的特征,容量很大,导致采样的特征具有不一致性(是由不同的encoder产生的)。

所以,对所有参与过momentumencoder的实例建立动态字典(dynamicdictionary)作为MemoryBank,在之后训练过程中每一个batch会淘汰掉字典中最早被编码的数据。

在参数更新阶段,MOCO只会对encoder中的参数进行更新。

由于MemoryBank,导致引入大量实例的同时,会使反向传播十分困难,而momentumencoder参数更新就依赖于Momentum更新法,使momentumencoder的参数逐步向encoder参数逼近:

下图形式化的表示了三种结构,end-to-end,memory-bank和MoCo的区别。MoCo的特点是:

(1)用于负采样的队列是动态的

(2)用于负样本特征提取的编码器与用于query提取的编码器不一致,是一种Momentum更新的关系。

(3)与MemoryBank类似,NCELoss只影响Query,不更新key。

2.4代码流程

论文标题:ASimpleFrameworkforContrastiveLearningofVisualRepresentations

好的,下面正式开始~

要说到对比学习,首先要从自监督学习开始讲起。自监督学习属于无监督学习范式的一种,特点是不需要人工标注的类别标签信息,直接利用数据本身作为监督信息,来学习样本数据的特征表达,并用于下游任务。

那么,自监督学习有什么优势呢?

目前机器学习主流的方法大多是监督学习方法,这类方法依赖人工标注的标签,这会带来一些缺陷:

而自监督学习能够很好地避免上面的问题,因为自监督学习直接使用数据本身来提供监督信息来指导学习。

自监督学习分类

当前自监督学习可以被大致分为两类:

ContrastiveMethods(对比式方法)这类方法则是通过将数据分别与正例样本和负例样本在特征空间进行对比,来学习样本的特征表示。ContrastiveMethods主要的难点在于如何构造正负样本。

那么,ContrastiveMethods有什么优势呢?

这里举一个例子来说明,Epstein在2016年做了一个实验:让受试者画出美元的图像,越详细越好,下图是受试者画出来的美元图像。

左图是受试者根据印象画出来的美元,右图则是让受试者照着美元画出来的。可以看到,左图画出来的美元图虽然不够详细,但已经充分具备一张美元的判别性信息,因此我们可以把它识别成美元。事实上,我们并不需要见到一张美元所有详细的信息,而仅仅通过一些关键的特征就可以识别出来。

如果用向量内积来计算两个样本的相似度,则对比学习的损失函数可以表示成:

THE END
1.对比学习Python实现对比学习代码对比学习是一种通过对比正反两个例子来学习表征的自监督学习方法。对于自监督对比学习,下一个等式是对比损失: L i , j = ? log ? e x p ( z i ? z j / τ ) ∑ k = 1 , k ≠ i 2 N e x p ( z i ? z k / τ ) \mathcal{L}_{i,j} = - \log \frac{exp(\textbfhttps://blog.csdn.net/xyisv/article/details/122479808
2.NLP简单的对比学习实战代码mob649e8164659f的技术博客NLP简单的对比学习实战代码 NLP简单的对比学习实战指南 对比学习是一种自监督学习的策略,常用于提升深度学习模型在无标签数据上的表现。在自然语言处理(NLP)领域,对比学习能够帮助我们有效地从文本数据中学习有用的特征。本文将通过一个简单的实战案例来让你了解如何实现NLP中的对比学习。https://blog.51cto.com/u_16175500/11846854
3.git对比代码的算法有哪些?Worktile社区4. 基于哈希的对比算法(Hash-based Diff Algorithm):这种算法使用哈希函数来对比代码的内容。它计算每个代码块的哈希值,并将其与另一个版本进行比较。这种算法的优点是速度快,但无法处理细微的代码变化。 除了以上算法,还有一些基于统计分析、机器学习或深度学习的对比算法正在不断发展,并且在某些特定的场景下可能更适https://worktile.com/kb/ask/204884.html
4.超详细的对比学习综述腾讯云开发者社区在这里,我们将之前的想法进行抽象,用空间考虑对比学习。 最终目标: 缩小与正样本间的距离,扩大与负样本间的距离,使正样本与锚点的距离远远小于负样本与锚点的距离,(或使正样本与锚点的相似度远远大于负样本与锚点的相似度),从而达到他们间原有空间分布的真实距离。 丈量二者距离:欧几里得距离,余弦相似度,马氏距离(https://cloud.tencent.com/developer/article/2034623
5.十大经典机器学习算法详解及代码实现机器学习领域有许多经典算法,对于初学者来说,全面学习可能有些挑战。以下是十大经典机器学习算法的详细介绍,包括书籍、课件和源代码,供大家参考: 决策树 决策树是一种基于概率的决策分析方法,通过构建决策树来评估项目的风险和可行性。它是一种直观的概率分析图解法。 https://mbd.baidu.com/newspage/data/dtlandingsuper?nid=dt_4130926917743983440
6.[附代码]A*算法&Dijkstar算法对比可视化及操作哔哩哔哩关注公众号:规划与代码之旅承接复杂网络、机器学习算法、城乡规划、交通规划、物流配送等方面论文辅导,有意留意面包多, 视频播放量 1290、弹幕量 0、点赞数 37、投硬币枚数 23、收藏人数 87、转发人数 4, 视频作者 小土豆6666条, 作者简介 ,相关视频:01-零代码实现—高https://www.bilibili.com/video/BV18z421S716
7.对比研究:两篇基于强化学习算法的智能导航论文上文DQM智能导航算法涉及的源代码和用论文给定数据集训练的AI模型: DQM.py14.46KBPY5次下载 dqn.pth332.10KBPTH 学习AI算法必须要有较强的数学功底和直觉,否则只会停留在一个较低的层次。另外具体开发算法最好自己完成证明,否则算法在严谨性方面会大打折扣。 https://www.kechuang.org/t/90315