技术心得记录:对比学习(contrastivelearning)

简介: 技术心得记录:对比学习(contrastivelearning)

对比学习是一种机器学习技术,算法学习区分相似和不相似的数据点。对比学习的目标是学习数据的表示,以捕捉不同数据点之间的基本结构和关系�?/p>


在对比学习中,算法被训练最大化相似数据点之间的相似度,并最小化不相似数据点之间的相似度。通常的做法是通过训练算法来预测两个数据点是否来自同一类别�?/p>


对比学习已经在各种应用中得到了应用,如图像识别、自然语言处理和语音识别。对比学习的一种流行方法是孪生网络,它使用一对相同的神经网络来学习数据点之间的相似度函数�?/p>


总的来说,对比学习是一种强大的技术,可以用于学习数据的表示,并可用于各种下游任务�?/p>


什么是对比学习�?/span>


对比学习是一种机器学习范例,其中将未标记的数据点相互并列,以教导模型哪些点相似,哪些//����Ч���ο���http://www.jhylw.com.cn/270539595.html

点不同�?/span>

也就是说,顾名思义,样本相互对比,属于同一分布的样本在嵌入空间中被推向彼此�?/span>相比之下,属于不同分布的那些则相互拉扯�?/span>


对比学习的重要�?/span>


监督学习是一种机器学习技术,其中使用大量标记示例来训练模型�?/span>数据标签的质�?span>对于监督模型的成功至关重要�?/span>


� 专业提示:查看监督学习与无监督学习:有什么区别?


但是,获取如此高质量的标记数据是一项繁琐的任务,尤其是�?/span>生物医学成像等领域,需要专家医生对数据进行注释�?/span>这既昂贵又费时�?/span>在监督学�?ML 项目中,80% 的时间都花在了获取和清理模型训练的数据上�?/span>


因此,最近深度学习研究的重点是减少模型训练中对监督的要求�?/span>为此,已经提出了几种方法,如半监督学习、无监督学习和自监督学习�?/span>


�?/span>半监督学�?span>中,使用少量标记数据和大量未标记数据来训练深度模型�?/span>在无监督学习中,模型试图理解没有任何数据标签的非结构化数据�?/span>


� 专业提示�?span>阅读更多关于训练-验证-测试集的信息�?button class="cnblogs-toc-button" title="显示目录导航" aria-expanded="false">


自我监督学习 (SSL) �?span>方法略有不同�?/span>


与无监督学习一样,非结构化数据作为输入提供给模型�?/span>但是,该模型会自�?/span>注释数据,并且在模型训练的未来迭代中使用已被高置信度预测的标签作为基本事实�?/p>


这不断改进模型权重以做出更好的预测�?/span>与传统监督方法相比,SSL 方法的功效引起了一些计算机视觉研究人员的注意�?/span>


� 专业提示�?span>通过阅读什么是数据标记以及如何高效地进行标记,了解如何更快地标记数�?【教程】�?button class="cnblogs-toc-button" title="显示目录导航" aria-expanded="false">


SSL 中使用的最古老和最受欢迎的技术之一是对比学习,它使用“正”和“负”样本来指导深度学习模型�?/span>


此后,对比学习得到了进一步发展,现在被用于完全监督和半监督的环境中,并提高了现有技术水平的性能�?/span>


现在让我们讨论一下对比学习的工作原理�?/span>


对比学习如何�?Vision AI 中发挥作用?


对比学习模仿人类的学习方式�?/span>例如,我们可能不知道什么是水獭或什么是灰熊,但看到图像(如下所示),我们至少可以推断出哪些图片显示的是相同的动物�?/span>


基本的对比学习框架包括选择一个数据样本,称为“锚点”,一个与锚点属于相同分布的数据点,称为“正”样本,以及另一个属于不同分布的数据点,称为“负”样本样本�?/span>


SSL模型试图在潜在空间中最小化anchor和正样本(即属于同一分布的样本)之间的距离,同时最大化anchor和负样本之间的距离�?/span>


如上例所示,属于同一类的两幅图像在嵌入空间(�?d+ ”)中彼此靠近,而属于不同类的两幅图像彼此之间的距离较远(�?nbsp;d- ”)�?/span>因此,对比学习模型(在上例中用�?theta ”表�?/span>)试图最小化距离�?nbsp;d+ ”并最大化距离�?nbsp;d- ”�?/span>


有几种技术可以根据锚点选择正样本和负样本,我们将在接下来讨论�?/span>


实例判别�?/span>


在这类对比学习中,整个图像都经过转换并用作锚图像的正样本�?/span>例如,如果我们选择狗的图像作为锚点,我们可以将图像镜像或将其转换为灰度图像以用作正样本�?/span>负样本可以是数据集中的任何其他图像�?/span>


下图展示了基于实例区分的对比学习技术的基本框架�?/span>距离函数可以是任何东西,从欧几里得距离到嵌入空间中的余弦距离�?/span>


常用的基于实例判别对比学习的一些图像增强方法如下:


颜色抖动�?span>在这里,RGB 图像的亮度、对比度和饱和度随机变化�?/span>此技术有助于确保模型不会通过场景的颜色记住给定的对象�?/span>虽然输出图像的颜色对于人类的解释可能看起来很奇怪,但这种增强有助于模型考虑对象的边缘和形状,而不仅仅是颜色�?/span>


图像旋转�?span>图像�?0-90 度范围内随机旋转�?/span>由于旋转图像不会改变其中包含的核心信息(即图像中的狗仍然是狗),因此模型被训练为旋转不变性以进行稳健的预测�?/span>


图像翻转�?span>图像围绕其中心垂直或水平翻转(镜像)�?/span>这是基于图像旋转的增强概念的扩展�?/span>


图像噪声�?span>随机噪声按像素添加到图像中�?/span>这种技术允许模型学习如何将信号与图像中的噪声分开,并使其在测试期间对图像的变化更加稳健�?/span>例如,将图像中的某些像素随机更改为白色或黑色称为椒盐噪声(示例如下所示)�?/span>


随机仿射�?span>仿射是一种保留直线和平行度但不一定保留距离和角度的几何变换�?/span>


上图显示了本节中描述的图像增强的一些示�?/span>


图像子采�?修补方法


此类对比学习方法将单个图像分解为固定尺寸的多个补丁(例如�?0x10 补丁窗口)�?/span>补丁之间可能存在某种程度的重叠�?/span>


现在,假设我们拍摄一只猫的图像,并使用它的一个补丁作为锚点,同时利用其余部分作为正样本�?/span>来自其他图像的补丁(例如,浣熊、猫头鹰和长颈鹿各有一个补丁)用作负样本�?/span>


对比学习:目�?button class="cnblogs-toc-button" title="显示目录导航" aria-expanded="false">


对比学习文献中定义了许多损失函数,用于不同问题的应用,每个损失函数都有自己的一组功能�?/span>让我们在本节中讨论其中的一些�?/span>


1. Max margin Contrastive Loss


它是对比学习文献(论�?span>)中提出的最古老的损失函数之一�?/span>


这里的基本思想是,如果样本不属于同一分布,损失函数会最大化样本之间的距离,如果样本属于同一分布,则损失函数会最小化它们之间的距离�?/span>它在数学上表示如下:


这里,�?nbsp;s_i ”和�?nbsp;s_j ”是需要比较的对应标签�?nbsp;y_i ”和�?nbsp;y_j ”的两个样本,�?nbsp;theta ”是嵌入网络,�?nbsp;epsilon ”是超参数,定义下界距离不同类别的样本之间�?/span>


样本的标签由样本是否属于同一分布生成�?/span>例如,如果两个样本是同一图像的裁剪版本或同一样本的增强版本,则标签将相同�?/span>


2.三元组损�?/span>


三元组损失(在本文中提出�?span>与对比损失非常相似,两者都试图最小化相似分布之间的距离并最大化不同分布之间的距离�?/span>三元组损失的主要区别在于,正样本和负样本同时作为锚样本的输入来计算损失�?/span>在数学上它表示如下:


这里,�?nbsp;s_a ”、�?nbsp;s+ ”、�?nbsp;s- ”分别代表anchor、正样本和负样本�?/span>对于使用三元组损失函数的模型的成功,负样本难以与正样本分开是至关重要的�?/span>


例如,浣熊和环尾猫看起来非常相似(见下图)�?/span>两者都有条纹、浓密的尾巴和相似的体毛颜色�?/span>当对浣熊进行负样本采样时,选择环尾会使模型更有效地区分类别,而不是选择大象作为负样本�?/span>


3. N-pair Loss


N 对损失是三元组损失函数的扩展�?/span>不是对单个负样本进行采样,而是对“N”个负样本以及一个锚点和一个正样本进行采样�?/span>这种损失的数学表示如下:


上面显示�?N 对损失函数是�?/span>(N+1)个训练样本定义的,其中第一个样本是锚点�?nbsp;s^a ”,第二个样本是正样本�?nbsp;s+ ”,其余�?/span>(N -1)样本是反例�?/span>


在这个等式中,如果我们只有一个负样本而不�?/span>(N-1),那么得到的等式将等同于多类分类问题�?softmax 损失函数�?/span>


4.InfoNCE


InfoNCE,其�?NCE 代表噪声对比估计,是另一种类型的对比损失函数�?/span>


如果�?nbsp;S = {s_1, s_2, �? s_N} ”表示包含一个正样本和�?nbsp;N-1 ”个负样本的�?nbsp;N ”个随机样本集合,则损失函数可以在数学上表示如下�?/span>


优化此损失将导致�?nbsp;fk ”估计由下式给出的密度比�?/span>


密度比保留了未来观测值�?nbsp;s{t+k} ”和上下文潜在表示�?nbsp;ct ”之间的互信息�?/span>�?nbsp;p(s{t+k}) ”是一个生成模型�?/span>


5.物流损失


逻辑损失函数是监督学习文献中广泛使用的一种简单的凸损失函数�?/span>它在数学上表示为�?/span>


损失是为�?nbsp;N ”个样本定义的,这些样本由�?nbsp;s_i ”表�?/span>,相应的标签(无论样本是否属于同一分布)由�?nbsp;y_i ”表示�?/span>


6. NT-Xent 损失


Normalized Temperature-scaled Cross-Entropy �?NT-Xent 损失是多�?N 对损失的修改,增加了温度 (T) 参数�?/span>它在数学上表示如下:


�?nbsp;sim(.) ”表示余弦相似度函数,�?nbsp;z_i ”和�?nbsp;z_j ”分别是样本�?nbsp;s_i ”和�?nbsp;sj ”的编码特征�?/span>


上面的等式显示了自监督学习中使用�?NT-Xent 损失的表达式�?/span>对于监督学习,上面显示的对比损失无法处理由于标签的存在,已知不止一个样本属于同一类的情况�?/span>推广到任意数量的积极因素导致在多个可能的功能之间进行选择�?/span>


因此,NT-Xent 损失在监督学习范式中的扩展表示如下:


这里�? 2N{y_i} -1 ) 表示多视图批处理中不同于�?nbsp;i �?/span>的所有正样本的索引集�?/span>


监督对比学习 (SSCL) 与自我监督对比学�?(SCL)


监督学习是指一种学习范式,其中数据及其对应的标签都可用于训练模型�?/span>另一方面,在自监督学习中,模型在没有任何外部支持的情况下使用原始输入数据生成标签�?/span>


� 专业提示:查看机器学习中数据预处理的简单指南�?button class="cnblogs-toc-button" title="显示目录导航" aria-expanded="false">


在自监督对比学习 (SSCL) 中,由于没有类标签,正样本和负样本是通过各种数据增强技术从锚图像本身生成的�?/span>所有其他图像的增强版本被视为“负”样本�?/span>


这些挑战阻碍了模型训练�?/span>例如,如果我们有一张狗的图像作为锚样本,那么只有该图像的增强版本才能形成正样本�?/span>因此,其他狗的图像也属于负样本集�?/span>


因为,根据自监督学习框架,对比损失函数将迫使两个不同的狗图像在嵌入空间中远离,而实际上,它们应该尽可能靠近�?/span>


因此,监督对比学�?(SCL) 有效地利用了标签信息,并允许相同分布的样本(如不同狗的几张图像)在潜在空间中靠得很近,而属于不同类别的样本在潜在空间中被排斥�?/span>


因此,SCL 框架的损失函数也不同�?SSCL 框架中使用的损失函数�?/span>上一节在解释 NT-Xent 损失函数时探讨了一个这样的例子�?/span>


这里提到的与 SSCL 相关的问题也引发了自监督学习的非对比学习领域,我们根本不使用任何负样本�?/span>


我们只使用正样本来训练模型,其目的是将样本的表示(属于同一分布)推到嵌入空间中彼此靠近�?/span>这是一个广阔的研究领域,本文无法进一步详述�?/span>


如果这篇文章帮助到了你,你可以请作者喝一杯咖�?/p>

相关文章
|
9月前
|
JavaScript
开发遇到问题记录
开发遇到问题记录
32 0
|
2月前
|
算法 Java 程序员
技术更新迭代与“八股文”知识库的清理与更新
随着互联网技术的不断更新迭代,曾经被认为是“标准答案”的观点和方法已经逐渐失去适应当前需求的能力,甚至被视为过时的做法。就拿最近的技术圈新闻来讲,在新的JDK版本中,Java编程引入了许多新的特性、工具和方法,使其变得更加简洁、高效和强大,但是之前的旧特性和方法也有许多被废弃了,比如曾经比较经典的偏向锁已经被废弃了,因此,个人觉得是时候对“八股文”进行一次知识库的清理和更新了。那么本文就来分享一下关于偏向锁被废弃以及个人对此的看法,并回顾一下自己的“八股文”知识库,以及技术更新迭代地时候我们要保持及时更新自己的知识储备。
74 2
技术更新迭代与“八股文”知识库的清理与更新
|
2月前
|
自然语言处理 网络协议 应用服务中间件
记录一次问题的解决过程
记录一次问题的解决过程
|
12月前
随机ID生成的几种 方式整理(现阶段基础)
随机ID生成的几种 方式整理(现阶段基础)
253 1
|
测试技术 数据处理
【面试题】近期学员被问最多的真实面试题记录(如何分配测试任务?)
【面试题】近期学员被问最多的真实面试题记录(如何分配测试任务?)
|
JSON 前端开发 JavaScript
2022-6月工作问题整理记录
2022-6月工作问题整理记录
2022-6月工作问题整理记录
|
前端开发 数据安全/隐私保护
日常开发记录(2021-11-08)
日常开发记录(2021-11-08)
日常开发记录(2021-11-08)
|
数据库 开发者 Python
综合案例8-删除书籍 | 学习笔记
快速学习综合案例8-删除书籍
|
Java Maven
个人向mavan使用过程中的问题记录
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 大纲 在初步会使用maven的POM文件配置后, 实际运用时会出现从来没见过的问题. 纪录两个自己学习过程中出现的两个问题.
个人向mavan使用过程中的问题记录
|
存储 编解码 安全
案例分享的记录
案例分享—钉钉
349 0