CV-对比学习:概述【通过自监督学习,充分挖掘模型从海量无标注数据中学习通用知识的能力】

news2024/11/24 13:45:15

对比学习从目标来看,是要做在NLP类型类似Bert预训练的事,即通过自监督学习,充分挖掘模型从海量无标注数据中学习通用知识的能力。

大致分类

对比学习目前可大致可分为

  • 基于负例的对比学习方法
  • 基于对比聚类的方法
  • 基于不对称网络结构的方法
  • 基于冗余消除损失函数的方法
  • ……

基于负例的对比学习方法

SimCLR

对比学习是自监督学习,没有标注数据,因此需要自行构建相似数据(正例)和不相似数据(负例)。

来自知乎-张俊林老师


正负例构建
对于某张图片,首先需要一个增强操作集合,随机抽取两个 以及,分别作用在原始图像上,形成两张经过增强的新图像,两者互为正例。训练时,Batch内的任意其他图像,都可作为或的负例。
表示学习系统构造
构造原则:构造一个表示学习系统,通过它可以将训练数据投影到某个表示空间内,并采取一定的方法,使得正例距离能够比较接近,负例距离比较远。

来自知乎-张俊林老师-SimCLR模型结构


SimCLR由对称的上下两个分支构成,随机从无标训练数据中获取N个构成一个Batch,对于Batch内的任意图像,根据上述方法构造正例,形成两个图像增强视图:和。和各自包含N个增强数据,并分别经过上下两个分支,对增强图像做非线性变换,这两个分支就是SimCLR设计出的表示学习所需的投影函数,负责将图像数据投影到某个表示空间。
由于上线分支时对称的,所以以增强视图为例来介绍,首先经过特征编码器Encoder(一般采用Resnet作为模型结构,此处以函数代表),经过CNN转换成对应的特征表示。紧随其后,是另外一个非线性变换结构Projector(由两层MLP构成,这里以函数表示),进一步将特征表示映射成另外一个空间里的向量。

相似性计算函数
表示向量L2正则后的点积或者表示向量间的Cosine相似性

InfoNCE损失

其中代表两个正例相应的表示向量。从这InforNCE可以看出,函数的分子部分鼓励正例相似度越高越好,也就是在表示空间内距离越近越好;而分母部分,则鼓励任意负例之间的向量相似度越低越好,也就是距离越远越好。
SimCLR小结
SimCLR有两个最大的贡献,一个是证明了复合图像增强很重要;另外一个是Projector结构很有必要。(具体原因阐述可见张老师博客)。

Moco V2

基于负例的对比学习:Batch外
很多实验证明了:在基于负例的对比学习中,负例数量越多,对比学习模型越好。但是受限算力,我们又不能无限放大Batch size,那么有什么办法在算力有限的情况,也可以在整个无标注训练数据集内随机挑选负例,而不再局限于Batch内寻找呢,Moco提出了一个解决方案(但由于Moco v2吸收了SimCLR的Projector结构,以及更具难度的图像增强方法,所以这里讲解Moco v2)。

来自知乎-张俊林老师-Moco v2框架图


Moco v2的图像增强方法、Encoder结构、Projector结构、相似性计算方法以及InfoNCE损失函数,和SimCLR基本一致,最主要的特点和创新点在两个分支中的下分枝:SimCLR里上下两个分支时对称的,两者可参数共享,而Moco v2的下分枝模型更新参数,采用的是动量更新(Momentem Update)。下分枝的模型结合与上分支保持一致,但是模型参数更新不再使用损失函数的反向传播来进行梯度更新,而是采用移动平均机制来更新

其中,是上分枝对应的模型参数,是下分枝对应的模型参数,是权重调节系数(一般会取较大数值,eg:0.9甚至0.99)。
此外Moco v2维护了一个较大的负例队列,当对比学习需要在正例和负例之间进行对比计算是,就是这个负例队列里去K个。

基于对比聚类的方法

SwAV 对比聚类:负例隐身

来自知乎-张俊林老师-SwAV模型


SwAV的模型结构,其中的图像增强、Encoder以及Projector结构,与SimCLR基本保持一致,而且也是上下分枝对称结构。对于Batch内某张图像来说,假设其经过图像增强后,在Aug1和Aug2里对应增强后的图像分别是和,数据对和互为正例。增强视图走上分枝,经过投影到单位超球面中某个点,增强视图走下分枝,经过投影到单位超球面中某个点。之后SwAV对Aug1和Aug2种的表示向量,根据Sinkhorn-Knopp算法,在线对Batch内数据进行聚类。假设走下分枝的聚到了类,则SwAV则要求表示学习模型预测分类成类。
损失函数
损失函数采用和Prototype中每个类中心向量的交叉熵:

其中,为第k个聚类的类中心向量,为温度超参数。

基于不对称网络结构的方法

BYOL 非对称结构

上文有述,在常见的基于负例的对比学习方法中,负例有着举足轻重的作用,它起到了将投影到超球体平面的各个实例对应的表示向量相互推开,使得图像对应的表示向量在超球体表面分布均匀的作用,以此来避免表示学习方法模型坍塌问题。
那么,问题来了:如果我们只使用正例,不使用负例来训练对比学习模型,这种思路是可行的吗?乍一看,这几乎是不可能的:假设只有正例,模型推动正例在表示空间内相互靠近。如果只有这一优化目标,很明显,理论上,模型会很快收敛到常数解,也就是所有数据会被映射到表示空间里同一个点上。就是说,很容易出现模型坍塌的结局
但是,BYOL模型就是这么做的,关键是,它还做成功了,更关键的是,不仅做成功了,它还是目前效果最好的对比学习模型之一。那么,BYOL是怎么做到的呢?

来自知乎-张俊林老师-BYOL模型


BYOL模型与Moco V2基本是一致的,但是区别在于,在上线分支中,在Projector之后,新增了一个非线性变换模型Predictor。Predictor与Projector类型([FC->BN->ReLU->FC]构成的MLP映射网络),产生表示向量,并对做L2正则化。此外,BYOL不需要分离,所以并不需要为辅Moco v2中的负例队列了。
损失函数


经过改写,也是Cosine相似性的一个变体,它的最小值对应两个表示向量的Cosine最大值,也即优化目标是在单位超球面上,正例之间的距离越近越好。
论文中指出BYOL之所以它没有坍塌到常数解,是由于online和Target两者结构的不对称造成的。

基于冗余消除损失函数的方法

Barlow Twins 冗余消除损失:越简单越快乐

来自知乎-张俊林-Barlow Twins


Barlow Twins和BYOL一样也只使用了正例,其模型结构与SimCLR保持一致。其特点是在激情增强图像经过投影之后,在Batch维度分别做了类似BN的正则,再顺着Batch为,对aug1和agu2两个正例表示矩阵做矩阵乘法,求出两者的互相关性矩阵(cross-correlatin matrix),其损失函数定义在这个互相关性矩阵上

损失函数第一个子项成为“不变项”,第二个子项称为“冗余消除项”。可以看出,它的优化目标是希望互相关性矩阵的对角线元素为1,非对角线元素为0,也就是希望互相关性矩阵是个单位矩阵。“不变项”,起到了把正例在表示空间相互拉近的作用,而“冗余消除项”,其实是希望Aug1和Aug2矩阵里的特征表示向量中,向量每个元素相互之间增强独立性,也就是尽可能消除表示向量里各个bit位之间的冗余信息表达,这个子项起到了类似负例的作用,避免模型坍塌。
从Barlow Twins我们可以看出,如果能够合理设置损失函数,那么光靠损失函数,也可以避免模型坍塌现象。

2021-12 对比学习精要- Contrastive learning - 简书

对比学习(Contrastive Learning):研究进展精要 - 知乎 

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

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

相关文章

PLC SECS/GEM解决方案,设计与应用

1 适用性 金南瓜SECS是最适应于全自动智能设备的选择。 适用行业:半导体、光伏、PCB等 全面支持E5、E30、E37、E40、E87、E90、E94、E116 PLC SECS/GEM具有怪兽级的强劲性能,处理性能高达10ms/条,全面升级的高适应性,易用友好的S…

30.前端笔记-CSS-CSS3的新特性

1、CSS3新增选择器 属性选择器,权重为10结构伪类选择器,权重为10伪元素选择器,权重为10 1.1 属性选择器 用属性选择器可以不用借助类或id选择器 语法: 正则表达式:^表示开头,$表示结尾,*表示任意 /*标…

怎么提高客服人员效率?

为了给客户提供更好的服务,很多企业会为自己网站配置客服服务,方便随时和客户沟通。但是凡事有利便有弊。虽然和客户接触的机会变多了,但是沟通不及时、回答不专业、问题处理时间长等问题也可能随之出现,反而会给客户带来不好的印…

[附源码]Python计算机毕业设计Django的个人理财系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

OpenCV-Python小应用(七):获取图片ROI的HSV取值范围

OpenCV-Python小应用(七):获取图片ROI的HSV取值范围前言前提条件实验环境获取图片ROI的HSV取值范围参考文献前言 本文是个人使用OpenCV-Python的应用案例,由于水平有限,难免出现错漏,敬请批评改正。更多精彩…

基于无人机的移动边缘计算网络研究(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

socket网络字节序以及大端序小端序

不同CPU中,4字节整数1在内存空间的存储方式是不同的。4字节整数1可用2进制表示如下: 00000000 00000000 00000000 00000001 有些CPU以上面的顺序存储到内存,另外一些CPU则以倒序存储,如下所示: 00000001 00000000 0…

【Spring】SpringBoot 配置 logback 日志

1. 概述 日志在一个业务系统重非常重要,包含有非常重要的数据,可以用于客户反馈问题的排查、线上问题的追踪,以及根据日志数据对业务情况进行有效的监控配置,及时发现线上问题。 常用的日志框架有好几种,但最常用的是…

[附源码]Node.js计算机毕业设计大学校园兼职网站Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

【观察】定义下一代云原生实时数仓,SelectDB Cloud“打了个样”

2020年,国家在《关于构建更加完善的要素市场化配置体制机制的意见》中,首次将数据与土地、资本、劳动力并列为关键生产要素,并提出加快培育数据要素市场的愿景,此举可谓意义重大。背后的原因是,当下中国企业正在加速从…

【车载开发系列】UDS诊断---写入内存($0x3D)

【车载开发系列】UDS诊断—写入内存($0x3D) UDS诊断---写入内存($0x3D)【车载开发系列】UDS诊断---写入内存($0x3D)一.概念定义二.报文格式1)请求报文2)肯定响应3)否定响…

Redis实战——消息队列

目录 1. 什么是消息队列? 2. 基于List结构模拟消息队列 3. 基于PubSub的消息队列 4. 基于Stream的消息队列 4.1 基于Stream的单消费者模式 4.2 基于Stream的消息队列-消费者组 1. 什么是消息队列? 字面意思就是存放消息的队列。最简单的消息队列模…

学习参数化计算优化风扇定位step by step

一、写在前面 本教程的目的是演示ANSYS Icepak的参数和优化功能。假定读者已经熟悉ANSYS Icepak界面,但是缺乏实战经验。 在这个案例中,读者可以掌握: 1、使用Network网络热阻Block来模拟IC芯片封装模型。 2、将变量定义为参数并通过参数…

算法竞赛入门【码蹄集进阶塔335题】(MT2226-2250)

算法竞赛入门【码蹄集进阶塔335题】(MT2226-2250) 文章目录算法竞赛入门【码蹄集进阶塔335题】(MT2226-2250)前言为什么突然想学算法了?为什么选择码蹄集作为刷题软件?目录1. MT2226 36进制22. MT2227 36进制33. MT2228 36进制44.…

电商、线上教育、在线医疗等必备资质——ICP许可证 。

危中有机,疫情也概莫能外。一场突如其来的疫情,引发了消费、健康、办公、学习等领域的新变革,电商、短视频、游戏、线上教育、在线医疗、知识付费等“互联网”项目,再次迎来发展机遇。 然而,如果想要借助互联网进行经…

[附源码]Python计算机毕业设计大学生网上书店Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

type 与 interface

type 与 interface 官方文档是这么说的: For the most part, you can choose based on personal preference, and TypeScript will tell you if it needs something to be the other kind of declaration. If you would like a heuristic, use interface until you…

基于C#+SQL Server2008实现(WinForm)学生宿舍管理系统【100010029】

1 概述 本次课程设计是数据库课程设计,我选的是学生宿舍管理系统,功能块主要是宿舍管理、学生管理、出入登记和来访登记,目的在于将学生宿舍的管理实现信息化,监控学生宿舍的情况防止意外发生。 课程设计任务的需求分析 2.1设计…

01算法的概念

开始系统学习算法啦!为后面力扣和蓝桥杯的刷题做准备!这个专栏将记录自己学习算法是的笔记,包括概念,算法运行过程,以及代码实现,希望能给大家带来帮助,感兴趣的小伙伴欢迎评论区留言或者私信博…

Day828.多线程原语:管程 -Java 并发编程实战

多线程原语:管程 Hi,我是阿昌,今天学习记录的是关于多线程原语:管程的内容。 并发编程这个技术领域已经发展了半个世纪了,相关的理论和技术纷繁复杂。 那有没有一种核心技术可以很方便地解决的并发问题呢&#xff1…