【自监督论文阅读 1】SimCLR

news2024/11/26 10:33:16

文章目录

  • 一、摘要
  • 二、引言
  • 三、方法
    • 3.1 主要框架
    • 3.2 训练一个大的batchsize
  • 四、数据增强
    • 4.1 实验一 数据增强的组合对学习好的特征表达非常重要
    • 4.2 对比学习需要更多的数据增强
  • 五、一些实验证明
    • 5.1 大模型更有利于无监督对比学习
    • 5.2 非线性层的预测头增加了特征表示
    • 5.3可调节的归一化交叉熵损失函数由于其他方法
    • 5.4 对比学习更受益于大的batchsize和更长的训练时间
  • 六、结论
  • 七、其他


paper地址:https://arxiv.org/abs/2002.05709
github地址:https://github.com/google-research/simclr


一、摘要

这篇文章提出了一个对比学习的简单的框架,用来学习视觉的表征。主要贡献如下:

  • 提出了一个简化的视觉表征对比学习框架,不再需要特殊的架构或者memory bank;
  • 展示了数据增强组合的重要性,特别是再想定义一个有效的预测任务时,数据增强起着关键作用;
  • 引入了一个可学习的非线性变换,并嵌入在特征表示和损失之间,可以明显提高表征 学习的质量
  • 表示了,对比学习相比于监督学习,对比学习受益于更大的batchsize和train step

这篇文章提出时,在ImageNet上,由SimCLR学习的自监督表示训练的线性分类器达到76.5%的精度,和ResNet50相当,超过了之前提出的一些自监督学习算法约7%。 在仅有1%的数据集上微调时,也获得了85.8%的top-5准确率,比AlexNet少了100倍的标签,却得到了可媲美的精度。

在这里插入图片描述

二、引言

自监督视觉表征学习方法主流有两种,生成式和判别式:

  • 生成式方法在输入空间中学习如何生成或者建模像素,但是pixel-level的生成器计算量大,且对表征学习来说可能是不必要的;
  • 判别式方法然后用类似监督学习的目标函数来学习表征,训练时的输入和标签都来自未标注的数据。但是很多方法都依赖于定义一个pretext的启发式训练任务,可能限制表征学习的通用性

然后本文继续介绍了提出的方法SimCLR,不仅精度超过之前的方法,而且简单,不需要特殊的空间结构和memory bank. 然后系统的研究了本文的主要贡献:

  • 数据增强的组合是非常重要的,产生了高效的表征,数据表明了,对比学习相对监督学习更受益于数据增强;
  • 介绍了一个可学习的非线性变换,这个非线性变换在表征和对比损失之间加了一层MLP,极大的增加了表征学习的质量;
  • 对比交叉熵损失的表征学习受益于归一化的embedding和一个可适当调整的温度参数;
  • 对比学习更受益于大的batchsize和更长的训练时间。与监督学习类似,对比学习也受益于深又宽的网络。

此外,除了在ImageNet上取得比较好的效果外,还评估了其他的数据集,在12个数据集中,有10个都超过了监督学习的base。

三、方法

3.1 主要框架

SimCLR学习表征,经过一个潜在空间的对比损失,这个对比损失是最大化同一数据中不同增强视图之间的一致性来实现的。

本文的框架如下:同一数据增强族中随机采用两个独立的数据增强算子,并应用于每个数据示例中以获得两个相关的视图。并训练一个基础的encoder网络和一个projection 头,使用对比损失来最大化一致性。
训练结束后,丢弃projection头,使用encoder部分的表征来服务于下游任务
在这里插入图片描述
框架流程如下:
在这里插入图片描述
由于一个batch内有很多图像对,除了自己本身外,其他图像对都看成负样本。
比如图像1和图像1之间,为正样本。 图1和其他图则为负样本对,负样本对也参与损失的计算。

  1. 对一张图做两次随机数据数据增强,彩色两张图片。本文采用随机裁剪、随机颜色变换、随机高斯;
  2. 将这个数据增强后的图像送到网络 f ( ⋅ ) f(·) f() 中, 产生两个特征向量 h h h
  3. h h h 再经过一个投影操作 g ( ⋅ ) g(·) g(),其实就是一个MLP全连接操作,生成 z z z
  4. 两个 z z z,通过对比损失函数,计算相似度
  5. 最终应用于下游任务的,表征采用的是 h h h,特征提取器是 f ( ⋅ ) f(·) f()。 投影操作 g ( ⋅ ) g(·) g()则被丢弃了。

本文还定义了一个归一化后的交叉熵损失函数,如下:
在这里插入图片描述
其中 s i m ( z i , z j ) sim(z_i, z_j ) sim(zi,zj)就是余弦相似度。值得注意的是,A图和B等其他图组成一对,B也需要和A等其他图组成一对,所以最终的损失,是奇数对于偶数对之前相加,再求平均。
在这里插入图片描述
关于这里的损失函数,如何完成同类相吸,异类互斥,知乎一篇文档有详细的讲解。
https://zhuanlan.zhihu.com/p/258958247

3.2 训练一个大的batchsize

本文将Batchsize从256尝试到8192,每个正样本对应双倍的增强,比如batchsize=8192时,就有16282个负样本。
当使用具有线性学习率尺度时SGD/Momentum,大的batchsize可能不稳定,因此,本文使用LARS优化器

值得注意,本文采用GlobalBN 来解决普通BN之间信息泄漏的问题,有些方法是采用shuffle-BN(每个节点的均值方差互换)或者layer norm。

  • 标准的ResNet使用batch normalization,在分布式训练中,BN的均值和方差都是在当前的device上计算,回导致信息泄漏。特别在本文,所有的正样本对都在同一个device上计划,模型很可能会利用局部信息的泄漏来提高预测准确率,但是却不增加表征。
    本文采用globanBN,在所有的设备上,聚合方差和均值,其他方法比如在交叉设备上shuffling data ,或者用layer norm替代BN

四、数据增强

这篇文章以前,尽管数据增强已经被广泛应用,但都没有系统性应用数据增强到对比学习中。
以前的通常都是改变网络结构,比如:

  • 通过压缩网络的感受野来实现全局到局部的预测
  • 通过固定图像切割过程和上下文聚合网络实现相邻视图的预测

这些过程,可以通过随机裁剪来实现,如下图
在这里插入图片描述

4.1 实验一 数据增强的组合对学习好的特征表达非常重要

在这里插入图片描述

实验一、数据增强的组合对学习好的特征表达非常重要,数据论证了:

1、没有一个单一的论证可以学到好的特征表示;
2、随机crop和随机颜色变换组合是最佳的

在这里插入图片描述
颜色失真也很重要,不然的化,仅仅靠直方图就能判断两个图像是不是同一个图crop的
在这里插入图片描述

4.2 对比学习需要更多的数据增强

表1表示了,对比学习需要更多的数据增强,且本文还对比了监督学习算法中的一种自动数据增强,发现在对比学习中,效果也不是很好。
在这里插入图片描述

五、一些实验证明

5.1 大模型更有利于无监督对比学习

图7表示了,无监督学习更受益于大模型。
在这里插入图片描述

5.2 非线性层的预测头增加了特征表示

图8表示,加了非线性层的预测头后,特征表示更好了。
这里有个有趣的现象,也就是非线性层预测头的维度,对特征表示没有多大影响。
文中如此解释: z = g ( h ) z=g(h) z=g(h) 被训练为对数据的变换是不变的(同一图,做不同的数据增强,都是求相似度),因此失去了对下游任务支持的信息。
在这里插入图片描述

5.3可调节的归一化交叉熵损失函数由于其他方法

这里也做了一系列的对比实验
在这里插入图片描述

5.4 对比学习更受益于大的batchsize和更长的训练时间

图9也实验证明了这点,文中表示,大的batchsize提供了更多的负样本,有利于收敛。

but, 动不动就4096的batchsize, 小实验一般玩不起啊!
在这里插入图片描述

六、结论

本文提出了一个简单的框架及其实例化的对比视觉表示学习。并仔细研究了其组成部分,展示了不同设计选择的影响。通过结合,大大改进了以前的自我监督、半监督和迁移学习的方法。

然后是,本文方法与ImageNet上的标准监督学习仅在3个方面不同:数据增强的选择、在网络末端使用非线性头部和损失函数方面。

这个简单框架的优势表明,尽管最近人们的兴趣激增,但自监督学习仍然被低估了。

七、其他

还有更多的实验在附录中,如在验证集中随机选择了10个类别,应用t-SNE降维后,视觉表征层相比投影层的特征界限,更加明显。
在这里插入图片描述

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

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

相关文章

使用vtkWindow报错Debug Assertion Failed ... mfc140d.dll

环境:VS2022VTK7.1.1,还使用了MFC 报错信息 Debug Assertion Failed! Program: C:\WINDOWS SYSTEM32 mfc140d.dll File. D: a work 1 s src vctools VC7Libs ship ATLMFCnclude afxwin1.inLine: 21 For information on how your program can cause an a…

2023年智能优化算法之——能量谷优化器 Energy valley optimizer(EVO),附MATLAB代码和文献

能量谷优化器(EVO)是一种新的元启发式算法,它的算法是受到了关于稳定性和不同粒子衰变模式的先进物理原理的启发。在文献中,作者与CEC函数中最先进的算法进行了比较,并且证明该算法确实很强劲。算法原理大家请参考文献。 [1] Azizi M , Aic…

考研算法第27天:直接插入排序 【插入排序】

插入排序算法介绍 老规矩我们来模拟一遍样例: 其思想简单来说就是将旧数组的每个数放入到新数组中 但是每次放入都要遵守下面的原则:如果前面有比当前数大的数便把它放到当前数的后面去。 过程如下面这张图 https://ts1.cn.mm.bing.net/th/id/R-C.1d…

GPT-4满分通过MIT本科数学考试!这套提示词火了

量子位 | 公众号 QbitAI 万万想不到啊,MIT数学考试,被GPT-4攻破了?! 突然有人在最新论文工作中高调宣布: GPT-4在MIT的数学和EECS(电气工程和计算机科学系)本科学位考试中,表现出…

电商超卖,从业务到设计

编辑导语:超卖这一概念的定义可以从不同层面进行阐述,比如平台层面、渠道层面、仓库层面等。而假设因超卖导致订单难以履行,则容易让用户体验“打折”。为什么有时电商超卖的现象会发生?可以从哪些角度来降低超卖导致的风险&#…

Stable diffusion WebUI LoRA使用教学

在Stable Diffusion网络中,通常会下载社区中的LoRA模型,并对CLIP模型和Unet的CrossAttention的线性层进行微调。相应的被微调的层会有 lora_up 和 lora_down 两组参数,分别对应上述的 A 和 B 矩阵。参考高手的代码,只需根据LoRA保…

【Unity Shader】从入门到感慨万千(1)基本概念:什么是网格?什么是材质和Shader?

文章目录 一、什么是网格(Mesh)?二、什么是MeshFilter(网格过滤器)?三、什么是MeshRenderer(网格渲染器)?四、什么是材质(Material)?五、什么是Shader(着色器)?一、什么是网格(Mesh)? 如上图,模型的三角形面就叫做网格(Mesh),它的本质是一堆顶点数据的规则…

ShowMeBug与极狐(GitLab)战略合作,推动DevOps人才高效甄选

近日,ShowMeBug与领先的开放式一体化安全DevOps平台提供商极狐(GitLab)达成深度合作协议,双方将致力于共同打造具有行业强认可度以及高实用性的DevOps岗位题型,助力企业通过更为专业、标准的技术笔试题型,提升DevOps岗位人才筛选效…

关于智能指针的补充1(share_ptr、weak_ptr 相互配合使用)

关于智能指针的补充1 1.share_ptr存在的问题2.weak_ptr2.1介绍2.2weak_ptr 核心代码逻辑 1.share_ptr存在的问题 先看这样一段代码 #define _CRT_SECURE_NO_WARNINGS using namespace std; #include"smartptr.h" struct ListNode {GXPYY::shared_ptr<ListNode&g…

Unity核心3——2D物理系统

一、刚体 Rigid Body 2D ​ 刚体是物理系统中用于帮助我们进行模拟物理碰撞中力的效果的 ​ 2D 物理系统中的刚体和 3D 中的刚体基本是一样的&#xff0c;最大的区别是对象只会在 XY 平面中移动&#xff0c;并且只在垂直于该平面的轴上旋转 ​ 不同于 3D 刚体&#xff0c;2D…

【Vue2】PaginationSelect 带分页和搜索功能的下拉列表组件

1. 效果图 2. 组件完整代码 <template><div class"pagination-select"><el-selectv-model"selectedValue":style"{ width: width || 100% }"v-bind"attrs":remote-method"remoteMethod":loading"loadi…

【好书精读】网络是怎样连接的 向 DNS 服务器查询 Web 服务器的 IP 地址

&#xff08;该图由AI制作 学习AI绘图 联系我&#xff09; 目录 IP 地址的基本知识 实际的 IP 地址 域名和 IP 地址并用的理由 Socket 库提供查询 IP 地址的功能 通过解析器向 DNS 服务器发出查询 解析器的内部原理 IP 地址的基本知识 生成 HTTP 消息 根据域名查询 …

(嵌入式)TMS5700432BPZQQ1R、SPC58EC80E5QMC1X微控制器IC中文数据

TMS5700432BPZQQ1R 32位RISC闪存微控制器是设计用于安全系统的高性能汽车级微控制器。其采用的安全架构包括锁步中的双CPU、CPU和内存内置自检 (BIST) 逻辑、闪存和数据SRAM上的ECC、外设存储器上的奇偶校验以及外设I/O上的回路功能。TMS570LS0432/0332器件集成了ARM Cortex-R4…

孤立森林详解

基本概念 孤立森林&#xff08;Isolation Forest&#xff09;是一种基于异常检测的机器学习算法&#xff0c;用于识别数据集中的异常点。孤立森林算法在异常检测、网络入侵检测、金融欺诈检测等领域有广泛应用&#xff0c;并且在处理大规模数据和高维数据时表现出色。孤立森林…

了解不一样的Sui NFT标准

Sui的设计赋予非同质化Token&#xff08;NFT&#xff09;在灵活性、组合性和可交易性方面独特的属性&#xff0c;使NFT不仅仅代表指向图像的数字记录&#xff0c;还可以成为图像本身。这些NFT可以被修改或与其他NFT合并&#xff0c;以创造出可扩展的艺术作品。同时&#xff0c;…

分布式事务解决方案Seata谁建议你用的?

一、名词解释&#xff1a; TC (Transaction Coordinator) - 事务协调者 维护全局/分支事务的状态&#xff0c;驱动全局事务的提交与回滚 TM (Transaction Manager) - 事务管理器 定义全局事务的范围&#xff1a;开启、提交、回滚全局事务 RM (Resource Manager) - 资源管理…

云原生之深入解析如何使用Prometheus扩展Kubernetes调度器

一、kubernetes 调度配置 ① Scheduler Configuration kube-scheduler 提供了配置文件的资源&#xff0c;作为给 kube-scheduler 的配置文件&#xff0c;启动时通过 --config 来指定文件。目前各个 kubernetes 版本中使用的 KubeSchedulerConfiguration 为&#xff1a; 1.21 …

面试专题:spring

涉及到spring的问题都离不开IOC和AOP.AOP实现原理、动态代理和静态代理、Spring IOC的初始化过程、IOC原理、自己怎么实现一个IOC容器&#xff1f; 这些东西都是经常会被问到的。 IOC是什么&#xff1a; Ioc即控制反转&#xff0c;把原来的代码里需要实现的对象创建&#xff…

使用conda安装配置python环境

使用conda安装配置python环境 下载 我这里下载的是2-4.7.12.1&#xff0c;具体可以参考如下地址&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/ wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda2-4.7.12.1-Linux-x86_64.s…