自监督学习之对比学习

自监督学习之对比学习对比学习一般是自监督学习的一种方式什么是自监督学习自监督学习主要是利用辅助任务(pretext)从大规模的无监督数据中挖掘自身的监督信息,通过这种构造的监督信息对网络进行训练,从而可以学习到对下游任务有价值的表征。(也就是说自监督学习的监督信息不是人工标注的,而是算法在大规模无监督数据中自动构造监督信息,来进行监督学习或训练。因此,大多数时候,我们称之为无监督预训练方法或无监督学习方法,严格上讲,他应该叫自监督学习)。  原文作者:自编码器个人认为可以算作无监督学习,也可以算作自监督学.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

对比学习一般是自监督学习的一种方式

自监督学习之对比学习

 

什么是自监督学习

自监督学习主要是利用辅助任务(pretext)从大规模的无监督数据中挖掘自身的监督信息,通过这种构造的监督信息对网络进行训练,从而可以学习到对下游任务有价值的表征。(也就是说自监督学习的监督信息不是人工标注的,而是算法在大规模无监督数据中自动构造监督信息,来进行监督学习或训练。因此,大多数时候,我们称之为无监督预训练方法或无监督学习方法,严格上讲,他应该叫自监督学习)。

  原文作者:自编码器个人认为可以算作无监督学习,也可以算作自监督学习,个人更倾向于后者。不过原文作者把自编码器看作是无监督学习方法,并将其与自监督学习方法相区分,具体区别如上文所示:自编码器,可能仅仅是做了维度的降低而已,我们希望学习的目的不仅仅是维度更低,还可以包含更多的语义特征,让模型懂的输入究竟是什么,从而帮助下游任务。而自监督学习最主要的目的就是学习到更丰富的语义表征。

对于自监督学习来说,存在三个挑战:

  1. 对于大量的无标签数据,如何进行表征/表示学习?
  2. 从数据的本身出发,如何设计有效的辅助任务 pretext?
  3. 对于自监督学习到的表征,如何来评测它的有效性?

  对于第三点,评测自监督学习的能力,主要是通过 Pretrain-Fintune 的模式。我们首先回顾下监督学习中的 Pretrain – Finetune 流程:我们首先从大量的有标签数据上进行训练,得到预训练的模型,然后对于新的下游任务(Downstream task),我们将学习到的参数(比如输出层之前的层的参数)进行迁移,在新的有标签任务上进行「微调」,从而得到一个能适应新任务的网络。 

   自监督的 Pretrain – Finetune 流程:首先从大量的无标签数据中通过 pretext 来训练网络(自动在数据中构造监督信息),得到预训练的模型,然后对于新的下游任务,和监督学习一样,迁移学习到的参数后微调即可。所以自监督学习的能力主要由下游任务的性能来体现。

 

自监督学习的主要方法

自监督学习的方法主要可以分为 3 类:1. 基于上下文(Context based) 2. 基于时序(Temporal Based)3. 基于对比(Contrastive Based)

从最近的热度来看,目前自监督学习主要集中在第三种,这里我们也重点介绍第三种方法-对比学习,其他方法可以查看https://blog.csdn.net/sdu_hao/article/details/104515917

 

对比学习

该类方法主要是通过一个辅助任务,构建正负样本,通过比较正负样本的距离差来进行学习。核心思想就是有一个样本anchor,然后构建其正样本pos,负样本neg,然后anchor和pos的相似度远大于anchor和neg的相似度,即

在这里插入图片描述

LeCun 2006年提出对比损失(Contrastive Loss):

自监督学习之对比学习

我们常说的Triplet Loss就是一种对比学习,一个样本,有一个正样p和一个负样本n

自监督学习之对比学习

如果一个x样本,构造一个正样x+和多个负样本,则loss函数可以为

自监督学习之对比学习

即论文CPC里的Info-Nce函数

 

对比学习常见模型

1. DEEP INFOMAX(DIM)模型: Deep InfoMax: Learning deep representations by mutual information estimation and maximization

DIM 的具体思想是对于隐层的表达,我们可以拥有全局的特征(编码器最终的输出)和局部特征(编码器中间层的特征),模型需要分类全局特征和局部特征是否来自同一图像。所以这里 x 是来自一幅图像的全局特征,正样本是该图像的局部特征,而负样本是其他图像的局部特征。

2. CPC(对比预测编码):Representation Learning with Contrastive Predictive Coding

 c_t 代表融合了过去的信息,而正样本就是这段序列 t 时刻后的输入,负样本是从其他序列中随机采样出的样本。CPC的主要思想就是基于过去的信息预测的未来数据,通过采样的方式进行训练。

3. MoCo(动量对比):Momentum Contrast for Unsupervised Visual Representation Learning

自监督学习之对比学习

moco的基本思想如图1所示,左边的  x_qurey是我们的查询样本,右边的 x_i_key 是一个字典,里面存储着的是一组数据样本,分别通过不同的编码器网络提取特征,通过最小化特征之间的对比损失函数来进行编码网络的更新。

自监督学习之对比学习

4. SimCLR:SimCLR: A Simple Framework for Contrastive Learning of Visual Representations

SimCLR框架,正如全文所示,非常简单。取一幅图像,对其进行随机变换,得到一对增广图像x_i和x_j。该对中的每个图像都通过编码器以获得图像的表示,然后用一个非线性全连通层来获得图像表示z,其任务是最大化相同图像的z_i和z_j两种表征之间的相似性。

在原文中,作者使用ResNet-50架构作为ConvNet编码器。输出是一个2048维的向量h。

自监督学习之对比学习

然后,通过取上述计算的对数的负数来计算这一对图像的损失。这个公式就是噪声对比估计(NCE)损失:

自监督学习之对比学习

在图像位置互换的情况下,我们再次计算同一对图像的损失。

自监督学习之对比学习

最后,我们计算Batch size N=2的所有配对的损失并取平均值。

自监督学习之对比学习
 

5. CLEAR: Contrastive Learning for Sentence Representation

借鉴SimCLR的思想,在文本表征中饮用对比学习的思路。大概思路如下,原始句子通过数据增强后,输入到transformer encoder中,然后经过映射函数g映射到同一个表示空间。最后的损失约束同SimCLR。

数据增量的四种方式:

Word deletion:即随机删除句子中的某些词,并将这些词使用 [DEL] 进行替换

Span deletion:从 span-level 进行选择和删除,并使用 [DEL] 进行替换,可以认为这种方法是 Word deletion 的一个特例

Reordering:随机从句子中采样出几对词,然后替换他们彼此的位置(已在 BART 中证实有效)

Substitution:随机从句子中选择一些词,然后将其替换为这些词的同义词(使用了一个同义词词典)

自监督学习之对比学习

针对每个 minibatch,随机选择两种数据增强的方法。经过数据增强之后,两个来自同一个句子的增强句子就认为是正样本,其他所有来自同一个 minibatch 的增强样本就认为是这两个正样本的负样本,这样针对正样本的损失函数就可以构建为:

自监督学习之对比学习

整个对比方法的损失函数就可以认为是所有正样本对的损失函数之和:

自监督学习之对比学习

与此同时,作者还保留了原来的 Mask Language Model(MLM)的损失函数,将两个损失函数结合,就得到了整个方法的损失函数。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/193837.html原文链接:https://javaforall.net

(0)
上一篇 2025年11月17日 下午5:43
下一篇 2025年11月17日 下午6:15


相关推荐

  • SIGTERM与SIGKILL

    SIGTERM与SIGKILLinclude lt iostream gt include lt signal h gt usingnamespa voidfunc inta cout lt lt ctrlc lt lt endl voidfunc2 inta cout lt lt kill lt lt endl

    2026年3月16日
    1
  • sql语法:inner join on, left join on, right join on详细使用方法

    sql语法:inner join on, left join on, right join on详细使用方法innerjoin 等值连接 只返回两个表中联结字段相等的行 leftjoin 左联接 返回包括左表中的所有记录和右表中联结字段相等的记录 rightjoin 右联接 返回包括右表中的所有记录和左表中联结字段相等的记录 INNERJOIN 语法 INNERJOIN 连接两个数据表的用法 SELECT FROM 表 1INNERJOIN 表 2ON

    2026年3月19日
    3
  • Pycharm的虚拟环境介绍/安装pipenv创建虚拟环境

    Pycharm的虚拟环境介绍/安装pipenv创建虚拟环境作用 更好的使用命令行工具管理项目中的包文件虚拟环境存放的位置 默认在 C 盘下 进行修改虚拟环境的位置 一般放置在 D 盘 pycharm 中进行配置虚拟环境的位置 再进行保存即可总结 书到用时方恨少 不是不用 只是时机未到

    2026年3月27日
    2
  • Draw Call优化「建议收藏」

    Draw Call优化「建议收藏」1.检测DrawCall是否改变Game窗口中的stats可以清晰的看到DrawCall2.渲染顺序控制好U3D的渲染顺序,才能控制好DrawCall示例3.动态批处理如果动态物体共用着相同的材质,那么Unity会自动对这些物体进行批处理。4.静态批处理静态批处理比动态批处理更加有效,你应该尽量低使用它,因为它需要更少的CPU开销。5.材质只有拥有相同材质的物体才可以进行批处理。6.打包图集1.每个材质/纹理的渲染一定是会产生DrawCal

    2026年1月25日
    2
  • 旋转机械振动的基本特性分析图_旋转机械振动监测及故障诊断

    旋转机械振动的基本特性分析图_旋转机械振动监测及故障诊断旋转机械的主要功能是由旋转部件来完成的,转子是其最主要的部件。旋转机械发生故障的主要特征是机器伴有异常的振动和噪声,其振动信号从幅域、频域和时域反映了机器的故障信息。因此,了解旋转机械在故障状态下的振动机理,对于监测机器的运行状态和提高诊断故障的准确率都非常重要。一、转子振动的基本特性旋转机械的主要部件是转子,其结构型式虽然多种多样,但对一些简单的旋转机械来说,为分析和计算方便,一般都将转

    2022年8月31日
    9
  • 被卖半年后的Hutool:还适合继续使用吗?

    被卖半年后的Hutool:还适合继续使用吗?

    2026年3月15日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号