对比学习 Contrastive Learning 发展历程 – 综述

前言

如果你对这篇文章感兴趣,可以点击「【访客必读 – 指引页】一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接。

本文为「对比学习论文综述」的笔记,其中将对比学习分为了以下四个发展阶段:

  • 百花齐放
  • CV 双雄
  • 不用负样本
  • Transformer

其中涉及到的一些方法,具体关系如下:

在这里插入图片描述


百花齐放

InstDisc cvpr18)

  • 把每一个个体当作一个类别,学一种特征将每一张图片都区分开,进而引入个体判别这一代理任务
  • 正样本即图片本身(可能数据增强),负样本即其它所有图片
  • 大量负样本都存在 Memory Bank(ImageNet 中为 128w),因此特征数不能过高(128 维)
  • 每次一个正样本,对应采样的 4096 个负样本,使用 NCE loss 计算损失;随后将这个 mini-batch 中样本的新表示,拿去更新 Memory Bank 中的结果

InvaSpread cvpr19)

  • 从同一个 minibatch 中抽取正负样本,属于端到端的学习
  • 使用同一个编码器,且不需要存储大量的负样本

CPC arxiv18)

  • 一个编码器 + 自回归模型
  • 用预测的代理任务来做对比学习,提出 InfoNCE Loss

CMC eccv20)

  • 同一张图片的多个模态为正样本,其余为负样本
  • 不同模态使用不同的编码器
  • 证明了对比学习的灵活性

CV 双雄

这段时期主要是「MoCo 系列模型」与「SimCLR 系列模型」在轮番较量。

MoCo cvpr20)

  • 队列(取代 Memory Bank)与动量编码器(动量地更新编码器,而不是更新特征)
  • 使用 InfoNCE 作为目标函数,并第一次使用无监督方法比有监督表现地更好
  • Insight
    • 负样本最好足够多,即字典足够多
    • 负样本来自的编码器,尽量保持一致,即字典中的特征应保持一致

SimCLR icml20)

  • 正负样本来自同一个 minibatch,每个样本会进行数据增广
  • 得到表示后,会再过一个 g MLP + ReLU) 降维得到 z,随后在 z 上训练 h;但在下游任务上,会丢弃 g,只使用 h
  • 与 InvaSpread 区别
    • 更多的数据增广方式
    • 更大的 batch size
    • 增加了 g 模块

MoCo v2 arxiv20)

  • 将 SimCLR 中的 g 和数据增广,借鉴到了 MoCo 中
  • MLP、aug+、cosine learning rate schedule、more epochs

SimCLR v2 nips20)

  • 用更大的模型,无监督对比学习效果更好
  • 将之前一层的 MLP fc+relu) 换成两层的 MLP,即加深了 projection head
  • 使用动量编码器

SwAV nips20)

  • 拿到负样本聚类得到的矩阵,将其作为映射矩阵 C,随后代理任务为,两个正样本 z1、z2,经过映射矩阵 C 得到的 Q1、Q2,应尽可能相似
  • trick:数据增广时,采用多尺度去裁剪图片 multi crop)

不用负样本

BYOL nips20)

  • Model collapse: 即一旦只有正样本,模型会学到 trival solution,即所有输入都对应相同输出
  • 编码器 1 为希望学到的编码器,编码器 2 为动量编码器,两个正样本经过编码器 1、2 分别得到 z1、z2,随后 z1 再过一层 MLP 得到 q1,此时用 q1 来预测 z2 进而来更新网络(使用 MSE Loss)。最后在下游任务上,使用编码器 1 进行特征表示
  • BYOL 为什么不会坍塌:如果去除 BYOL 中 MLP 里的 BN,学习就会坍塌,但加上就不会
    • 一种解释角度:BN 即使用 minibatch 的均值和方差,因此 BN 会导致数据泄露,即 BYOL 实际上是和 “平均图片” 去比,可以认为是一种隐式的负样本
  • BYOL 后续进一步回应(大量消融实验):BN 能够使模型训练更加稳定,就算不用 BN,换成 Group Normalization 或者比较好的初始化,BYOL 依然可以学得比较好

SimSiam cvpr21)

  • 特点:不需要负样本、大 batch size、动量编码器
  • 方法:将 BYOL 中的动量编码器变成了一个可以更新的编码器
  • 解释:stop gradient 使得模型的更新交替进行,类似 EM 的思想

请添加图片描述


Transformer

MoCo v3 iccv21)

  • 在 MoCo v2 基础上,引入了 SimSiam 中 predictor 以及两边一起更新的 EM 思想,并将 backbone 从 ResNet 换成了 Vision Transformer
  • 出现的问题:大 batch size 时,训练波动很大,导致最终结果也不太好
  • 解决方式:在训练时,冻住 patch projection layer,即使用 random patch projection layer

DINO iccv21)

  • 整体与 MoCo v3 非常像,主要不同在于算 loss 时,用了一下 centering 的 trick

参考资料

  • 李沐 – paper-reading
  • 对比学习论文综述(论文精读)

查看全文

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

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

相关文章:

请添加图片描述

对比学习 Contrastive Learning) 发展历程 – 综述

前言
如果你对这篇文章感兴趣,可以点击「【访客必读 – 指引页】一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接。
本文为「对比学习论文综述」的笔记,其中将对比学习分为了以下四个发展阶段:
百花齐放CV 双雄不用……

nvm管理多版本node和npm

nvm管理多版本node和npm
参考网址: https://www.runoob.com/w3cnote/nvm-manager-node-versions.html https://blog.csdn.net/weixin_43797908/article/details/124616927 nvm下载地址 https://github.com/coreybutler/nvm-windows/releases nvm安装
下一步 , 下一……

C++ OOP Feature Conclusion (更新中)

目录
1.类与对象 1.1 基本概念(继承、封装、抽象、多态) 1.2类的声明 1.3成员函数(对象所占空间取决于数据成员,和成员函数无关) 1.4数据成员(不能在类中初始化) 1.5构造与析构函数&#xff08……

VS2015配置Opencv的环境并关联IDS相机驱动库

一 前言 最近的一个项目使用Opencv去识别物体并使用机器人去抓取,调用Opencv的库文件和IDS相机驱动SDK需要用到C的编程,同时也要配置项目属性。
二 软件的安装
1,VS2015 VS2015 支持开发人员编写跨平台的应用程序,VS2015目前有3……

货币基金和银行理财的区别

一,前言 最近在看一下理财方面的知识,里面谈及到货币基金与银行理财,总结了一下几点 二,货币基金和银行理财的区别 1,年利率(货基<银行理财) 一般货币基金的年利率是和银……

矩阵的简单计算

一、前言 在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合 ,最早来自于方程组的系数及常数所构成的方阵。作为解决线性方程的工具,矩阵也有不短的历史。用分离系数法表示线性方程组,得到了其……

C#序列化与反序列化代码讲解,源代码见内容链接

一、前言 何为序列化?何为反序列化?   XML 序列化是将对象的公共属性 Property) 和字段转换为序列格式(这里是指 XML)以便存储或传输的过程。序列化的时候,一般要传入流以及类作为参数,若该流为写入流&a……

C# 浅谈线程同步Lock、Monitor、Interlocked、Mutex等多种线程锁及测试汇总

文章目录一、前言二、线程锁的类型1. volatile关键字2. Lock锁3. System.Threading.Interlocked4. Monitor5. Mutex6. ReaderWriterLock7. 线程同步事件AutoResetEvent和ManualResetEvent三、实例代码测试1. Lock锁Lock的测试总结:2. Monitor用法3. System.Threadin……

【MapGIS精品教程】012:数字地形分析案例教程

文章目录 一、DEM概述二、DEM建立1. 创建规则格网Grid2. 创建不规则三角网Tin三、数字地形分析1. 高程点查询与编辑2. 地形因子分析3. 日照晕渲图输出4. 蓄积量计算5. 剖面分析6. 平面等值线追踪一、DEM概述
数字地形分析Digital Terrain Model,DTM),是指在数字高程模型上进……

MySQL出现 Operation not allowed after ResultSet closed错误

今天测试增删查改的删除操作时,出现以下Operation not allowed after ResultSet closed的错误
原代码如下:
public static boolean insertUserUserDTO _user) throws SQLException{boolean bool false;Connection conn null;Statement stmt null;Res……

客快物流大数据项目(一百一十二):初识Spring Cloud

文章目录
初识Spring Cloud
一、Spring Cloud简介
二、SpringCloud 基础架构图…

C和C++中的struct有什么区别

区别一: C语言中: Struct是用户自定义数据类型(UDT)。 C语言中: Struct是抽象数据类型(ADT),支持成员函数的定义。
区别二:
C中的struct是没有权限设置的&#xff0c……

docker的数据卷详解

数据卷 数据卷是宿主机中的一个目录或文件,当容器目录和数据卷目录绑定后,对方修改会立即同步
一个数据卷可以同时被多个容器同时挂载,一个容器也可以被挂载多个数据卷
数据卷作用:容器数据持久化 /外部机器和容器间接通信 /容器……

13、Qt生成dll-QLibrary方式使用

Qt创建dll,使用QLibrary类方式调用dll
一、创建项目
1、新建项目->其他项目->Empty qmake Project->Choose 2、输入项目名,选择项目位置,下一步 3、选择MinGW,下一步 4、完成 5、.pro中添加TEMPLATE subdirs&#xff……

基于mapreduce 的 minHash 矩阵压缩

Minhash作用: 对大矩阵进行降维处理,在进行计算俩个用户之间的相似度。
比如: 俩个用户手机下载的APP的相似度,在一个矩阵中会有很多很多的用户要比较没俩个用户之间的相似度是一个很大的计算任务 如果首先对这个矩阵降维处理&am……

关于hashmap使用迭代器的问题

keySet获得的只是key值的集合,valueSet获得的是value集合,entryset获得的是键值对的集合。 package com.test2.test;import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;public class mapiterator……

Hadoop入口FileSystem HDFS操作 本地文件合并到HDFS和HDFS文件合并

Hadoop 文件API的起点是FileSystem类。这是一个与文件系统交互的抽象类。存在不同的具体实现子类来处理HDFS和本地文件系统。
HDFS接口的FileSystem对象:
Configuration conf new Configuration);
FileSystem hdfs FileSystem.getconf); HDFS直接操作&#x……

combiner partitioner

combine是在map端进行的,是在patition之后 partitioner也是在map端进行的 combine 适用在每个map端进行简单的合并,同样也是继承Reduce类。…

toString.indexOf:)和subsTring

package com.test2.test;public class subStirngTest {public static void mainString[] args) {String sb"abcdefgh";String sc"abcd:efgh";int splitIndexsc.indexOf":");//找到标识符的位置System.out.printlnsplitIndex);sb.substring1)……

Aprior 算法

Apriori 算法:(hadoop中实现) 第一步:统计项的频度 (用一个MR统计出来) 假设是一个矩阵 U1 app1 , app3
U2 app1 , app2 , app3
U3 app2 , app3 把矩阵看成一行行的向量
U1<app……

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

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