【深度学习】对比学习

news2025/1/17 23:22:36

1.什么是对比学习

        对比学习有的paper中称之为自监督学习,有的paper称之为无监督学习,自监督学习是无监督学习的一种形式,现有的文献中没有正式的对两者进行区分定义,这两种称呼都可以用。其主要思想是模型能够更加重新的学习到编码器的特征:尽可能的缩小相似样本的距离,拉大正负样本的距离,这里可以理解为让聚类的界限更加明显。

        自监督学习(Self-supervised learning)可以避免对数据集进行大量的标签标注。把自己定义的伪标签当作训练的信号,然后把学习到的表示(representation)用作下游任务里。其目的就是学习一个编码器,此编码器对同类数据进行相似的编码,并使不同类的数据的编码结果尽可能的不同,通过代理任务引入更多的外部信息,以获得更通用的表征。

        首先要区分一下监督学习和无监督学习的区别。以下图为例,监督学习的训练数据是有标签的,它的目的判断出图1和图2是狗,图3是猫。而无监督学习的训练数据是没有标签的,它只需要判断出图1和图2是一个类别,图3与图1、图2不是一个类别,至于图片描述的啥,对于无监督学习来说这不重要!

         对比学习不需要知道每张图的真实标签,只需要知道到谁与谁相似,谁与谁不相似。假设三张图都通过一个网络,得到三张图片对应的特征f1、f2、f3,我们希望对比学习可以做到在特征空间中把f1和f2拉进,且远离f3。也就是说,对比学习要达到的目标是所有相似的物体在特征空间相邻的区域,而不相似的物体都在不相邻的区域。

        对比学习需要知道谁与谁相似,谁与谁不相似,那言外之意就是,对比学习不还得需要标签信息去做有监督学习吗?对比学习之所以被认为是一种无监督的训练方式,是因为人们可以使用代理任务(pretext task)来定义谁与谁相似,谁与谁不相似,代理任务通常是人为设定的一些规则,这些规则定义了哪张图与哪张图相似,哪张图与哪张图不相似,从而提供了一个监督信号去训练模型,这就是所谓的自监督。数据增强是代理任务的实现常见手段。

2.对比学习的范式

        对比学习的典型范式就是:代理任务+目标函数。代理任务和目标函数也是对比学习与有监督学习最大的区别。

        有监督学习的流程,输入x,通过模型输出得到y,输出的y和真实label(ground truth)通过目标函数计算损失,以此进行模型训练。

        而对于无监督学习或自监督学习来说,是没有ground truth的,那怎么办呢?代理任务就是来解决这个问题的,我们用代理任务来定义对比学习的正负样本,无监督学习一旦有了输出y和真实的label,就需要有一个目标函数来计算两者的损失从而指导模型的学习方向。代理任务和目标函数在对比学习中如何起作用?下面通过SimCLR提出的对比学习框架来说明。

 (1)代理任务作用阶段。对于同一样本x,经过两个代理任务分别生成\widetilde{x_{i}}\widetilde{x_{j}}两个样本,simCLR属于计算机视觉领域的paper,文中使用数据增强手段来作为代理任务,例如图片的随机裁剪、随机颜色失真、随机高斯模糊,\widetilde{x_{i}}\widetilde{x_{j}}就称为一个正样本对。

(2)特征提取编码器。f(⋅)就是一个编码器,用什么编码器不做限制,SimCLR中使用的是ResNet,\widetilde{x_{i}}\widetilde{x_{j}}通过f(⋅)分别得到h_{i}h_{j}。可理解为embedding向量。

(3)MLP层。通过特征提取之后,再进入MLP层,SimCLR中强调了这个MLP层加上会比不加好,MLP层的输出就是对比学习的目标函数作用的地方,通过MLP层输出z_{i}z_{j}

(4)目标函数作用阶段。对比学习中的损失函数一般是infoNCE loss,z_{i}z_{j}的损失函数定义如下:

        其中,N代表的是一个batch的样本数,即对于一个batch的N个样本,通过数据增强的得到N对正样本对,此时共有2N个样本,负样本是什么?SimCLR中的做法就是,对于一个给定的正样本对,剩下的2(N-1)个样本都是负样本,也就是负样本都基于这个batch的数据生成。上式中sim(zi,zj)其实就是cosin相似度的计算公式,1[k≠i]输入0或1,当k不等于i时,结果就为1否则为0。τ是温度系数。

        从上式可以看出,分子中只计算正样本对的距离,负样本只会在对比损失的分母中出现,当正样本对距离越小,负样本对距离越大,损失越小。

Reference:

        1.《Self-supervised Learning for Large-scale Item Recommendations》

        2.《Momentum Contrast for Unsupervised Visual Representation Learning》

        3.对比学习(Contrastive Learning),必知必会 - 知乎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1008068.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IIC总线上拉电阻计算

IIC总线上拉电阻计算 1. 概述2. 上拉电阻计算3. 总线传输速度与功率4. 实例计算 1. 概述 IIC(Inter-Integrated Circuit)其实是IICBus简称,所以中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构&#xff…

嵌入式Linux驱动开发(I2C专题)(三)

无需编写驱动直接访问设备_I2C-Tools介绍 参考资料: Linux驱动程序: drivers/i2c/i2c-dev.cI2C-Tools-4.2: https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/AP3216C: git clone https://e.coding.net/weidongshan/01_all_series_quick…

没出息的项目经理的5大表现

大家好,我是老原。 都说,30岁的项目经理凶猛如狼,40岁的项目经理狡猾如狐。 实际上,又有多少项目经理能做到这般。 有多少项目经理,兢兢业业工作个几年,最后还是守着一亩三分地,既没有升职加…

JSON注解和异常处理的使用

一、JSON数据返回 1.1.前言 JSON是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。JSON的常用场景包括: 前后端分离的项目中,后端向前端传送数据时 。 Ajax异步访问数据。RPC远程调用。 除了JSON&#x…

爽文式的带你快速理解Nginx

1 引入nginx的概念 Nginx是一个开源的Web服务器和反向代理服务器,它可以用来处理大量的网络请求和响应。Nginx使用事件驱动的非阻塞I/O模型,使其能够处理大量的并发连接。它还可以作为HTTP、HTTPS、SMTP、POP3和IMAP等协议的代理服务器,以及…

PM2 | NodeJS应用进程管理工具—PM2的基本使用

目录 1. pm2 简介 2. pm2的主要特性 3. 常用命令 3.1 pm2的安装与更新 3.1.1 pm2安装 3.1.2 pm2更新 3.2 pm2 启动运行指定的程序 3.2.1 正常启动应用程序 3.2.2 启动应用程序时并设置name 3.3 pm2 停止指定运行的程序 3.3.1 停止特定的应用 3.3.2 停止所有的应用 …

SpringMVC之JSON数据返回与异常处理机制---全方面讲解

一,JSON数据返回的理解 在Spring MVC中,当需要将数据以JSON格式返回给客户端时,可以使用ResponseBody注解或RestController注解将Controller方法的返回值直接转化为JSON格式并返回。这使得开发者可以方便地将Java对象转换为JSON,并…

【AIGC】斯坦福小镇升级版——AI-Town源码解读

写在前面的话: 接上一篇斯坦福小镇升级版——AI-Town搭建指南,本本篇将解读 AI-Town 使用的技术栈、代码架构、与LLM的交互,以及与斯坦福AI小镇的对比结果(如想直接看结论可跳到文章最后) 整体架构 技术栈 AI-Town 使…

“金钥匙”转动!安全狗成功护航第二十三届中国国际投资贸易洽谈会举办

9月8日至9月11日,为期4天的第二十三届中国国际投资贸易洽谈会在厦门顺利举办。 作为国内云原生安全领导厂商,安全狗凭借突出的安全综合实力,受委托并担任此次会议网络安保技术支撑单位。 厦门服云信息科技有限公司(品牌名&#xf…

第一章 JAVA入门

文章目录 1.2 Java 的特点1.2.1 简单1.2.2 面向对象1.2.3 与平台无关① 平台与机器指令② C/C程序依赖平台③ Java 虚拟机与字节码1.2.4 多线程1.2.5 动态1.30安装 JDK1.3.1 平台简介0 Java SE②Java EE1.4 Java 程序的开发步骤②保存源文件1.5.2 编译1.8 Java之父-James Gosli…

spring boot+redis整合基础入门

文章目录 前言准备依赖项配置文件redis模板类注入设置序列化方式 实施基础字符串操作、超时设置Hash操作hash的使用场景以及优缺点 列表操作列表操作的应用场景以及优缺点 Set的基础操作Set类型的业务场景以及优缺点Demo地址 总结 前言 最近项目中有用到redis进行一些数据的缓…

【Linux】编译器 gcc/g++

1、背景知识 (1)[LMYhecs-38755 ~]$ gcc code.c -o code.exe -stdc99【-o 生成指定名字的可执行文件,-stdc99 以 C99 的标准执行程序】 (2)安装 g,yum install gcc-c 2、gcc如何完成 (1&#x…

如何使用 Node.js和Express搭建服务器?

如何使用NodeJs搭建服务器 1. 准备工作1.1 安装Node.js 2. 安装express2.1 初始化package.json2.2 安装express2.3 Express 应用程序生成器 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段…

前端面试合集(三——浏览器)

浏览器的页面渲染 1.浏览器是如何渲染页面的?2. 什么是reflow(重排)?3. 什么是repaint(重绘)?4.为什么transform效率高? 1.浏览器是如何渲染页面的? 当浏览器的网络线程收到HTML文档之后&#…

Leetcode刷题_链表相关_c++版

&#xff08;1&#xff09;92反转链表–中等 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 /*** Definition for singly-linked list.* struct Lis…

Claude: ChatGPT替代大语言模型

【产品介绍】 Claude是Anthropic推出的类ChatGPT大语言模型&#xff0c;也是一个AI人工智能助理&#xff0c;可以帮助各种行业的用户处理工作&#xff0c;如客户服务、法律、教练、搜索和销售。Claude可以通过聊天界面和API进行访问&#xff0c;能够完成各种对话和文本处理任务…

计算机二级知识点整理

翻到了之前准备计算机二级的笔记&#xff0c;现在给大家分享出来。 一、基本知识&#xff1a; 计算机把完成一条指令所花费的时间称为一个指令周期结构化程序设计强调的是程序的易读性boolean类型不能转为其他基本类型数据表达式是由运算符和运算对象构成的&#xff0c;#不是…

SimpleCG程序交互操作

前言 之前所有示例程序都是属于展示型的&#xff0c;只是作为展示板输出使用&#xff0c;不涉及键盘和鼠标的输入交互&#xff0c;下面我们开始接触具有交互功能的程序。 没有交互功能的程序可以满足一定需求,不过大部分的程序是不能脱离交互功能的。程序依据使用者的操作进行相…

Error response from daemon

文章目录 遇到的问题解决方法参考 遇到的问题 当输入下面的指令时 docker pull xxxxxx解决方法 打开/etc/docker/daemon.json文件 vim /etc/docker/daemon.json写入以下内容&#xff1a; {"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]…

OpenCV 图像像素运算操作

加法操作详解 加减乘除 #include <opencv2/opencv.hpp>using namespace cv;int main() {Mat image imread("image.jpg");if (image.empty()) {std::cout << "无法加载图像" << std::endl;return -1;}// 加法变换Mat addResult;add(ima…