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

2023-05-16

前言

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

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

  • 百花齐放
  • 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
  • 对比学习论文综述(论文精读)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对比学习 (Contrastive Learning) 发展历程 - 综述 的相关文章

随机推荐

  • 时间复杂度中的log(n)底数到底是多少?

    其实这里的底数对于研究程序运行效率不重要 xff0c 写代码时要考虑的是数据规模n对程序运行效率的影响 xff0c 常数部分则忽略 xff0c 同样的 xff0c 如果不同时间复杂度的倍数关系为常数 xff0c 那也可以近似认为两者为同一量
  • ubuntu1804(树莓派)使用AV接口播放音频问题

    2条消息 在运行ubuntu 18 04的树莓派上播放声音 Qrpucp的博客 CSDN博客 config txt还需加入 audio pwm mode 61 2
  • 在Modelsim内编辑testbench并重新仿真

    方法同样适用于编辑 v文件
  • 【SSH连接阿里云服务器失败解决办法】

    SSH连接阿里云服务器失败解决办法 1 添加安全组规则 找到要修改的实例 点击实例名 xff0c 进入实例详情界面 xff0c 点击 配置安全组规则 点击配置规则 添加一条如下图所示的入方向端口22 测试连接是否成功 xff0c 若不成功
  • sklearn实战-----6.聚类算法K-Means

    1 概述 1 1 无监督学习与聚类算法 在过去的五周之内 xff0c 我们学习了决策树 xff0c 随机森林 xff0c 逻辑回归 xff0c 他们虽然有着不同的功能 xff0c 但却都属于 有监督学习 的一部分 xff0c 即是说 xff
  • 过于神奇的 ChatGPT

    实在好奇究竟用的什么数据集 xff0c 居然能得到下述问答 xff1a 最后又扣回了第一个问题 按照你的要求直接给出答案 xff0c 确实很强 xff01
  • 优质 CS 读博 (PhD) 经验贴汇总

    前言 如果你对这篇文章感兴趣 xff0c 可以点击 访客必读 指引页 一文囊括主页内所有高质量博客 xff0c 查看完整博客分类与对应链接 Advice for early stage Ph D students 读博的核心是在研究上取得进
  • 推荐系统中的协同过滤算法

    前言 如果你对这篇文章感兴趣 xff0c 可以点击 访客必读 指引页 一文囊括主页内所有高质量博客 xff0c 查看完整博客分类与对应链接 概述 协同过滤是一种推荐算法 xff0c 其通常建模为 m m m 个用户 xff0c n
  • 哈希函数的学习算法整理

    前言 如果你对这篇文章感兴趣 xff0c 可以点击 访客必读 指引页 一文囊括主页内所有高质量博客 xff0c 查看完整博客分类与对应链接 概述 哈希函数学习的两个步骤 xff1a 转为二进制编码 xff1a 可以先降维成实数 xff0c
  • O(1) 的离散概率分布采样方法 - Alias Method

    前言 如果你对这篇文章感兴趣 xff0c 可以点击 访客必读 指引页 一文囊括主页内所有高质量博客 xff0c 查看完整博客分类与对应链接 Alias Method 给定一个离散概率分布 p 61 0 3
  • 变分推断 (Variational Inference) 解析

    前言 如果你对这篇文章感兴趣 xff0c 可以点击 访客必读 指引页 一文囊括主页内所有高质量博客 xff0c 查看完整博客分类与对应链接 变分推断 在贝叶斯方法中 xff0c 针对含有隐变量的学习和推理 xff0c 通常有两类方式 xff
  • 通过ssh连接aws(亚马逊 云服务器 实例)

    一 Windows用户 windows可以使用PuTTY 和xshell xff0c 本文使用xshell xff08 1 xff09 第一步 xff1a 配置服务器信息 打开xshell xff0c 新建连接 xff0c 在菜单 连接 填
  • Spring报错解决一览

    Spring错误持续更新贴 问题一 springcloud OAuth2 0配置的时候报错 Method springSecurityFilterChain in org springframework security config an
  • k-Medoids 聚类系列算法:PAM, CLARA, CLARANS, Trimed, BanditPAM

    前言 如果你对这篇文章感兴趣 xff0c 可以点击 访客必读 指引页 一文囊括主页内所有高质量博客 xff0c 查看完整博客分类与对应链接 k k k Means 作为一种经典聚类算法 xff0c 相信大家都比较熟悉 xff0c 其将簇中所
  • 软聚类算法:模糊聚类 (Fuzzy Clustering)

    前言 如果你对这篇文章感兴趣 xff0c 可以点击 访客必读 指引页 一文囊括主页内所有高质量博客 xff0c 查看完整博客分类与对应链接 在介绍模糊聚类之前 xff0c 我们先简单地列举一下聚类算法的常见分类 xff1a 硬聚类 Hard
  • 层次聚类:BIRCH 聚类、Lance–Williams equation、BETULA 聚类

    前言 如果你对这篇文章感兴趣 xff0c 可以点击 访客必读 指引页 一文囊括主页内所有高质量博客 xff0c 查看完整博客分类与对应链接 BIRCH 聚类 BIRCH Balanced Iterative Reducing and Clu
  • 演化算法:乌鸦搜索算法 (Crow Search Algorithm)

    前言 如果你对这篇文章感兴趣 xff0c 可以点击 访客必读 指引页 一文囊括主页内所有高质量博客 xff0c 查看完整博客分类与对应链接 在机器学习中 xff0c 我们所要优化的问题很多时候难以求导 xff0c 因此通常会采用一些演化算法
  • 随机多臂赌博机 (Stochastic Multi-armed Bandits):置信上界算法 (Upper Confidence Bound)

    前言 如果你对这篇文章感兴趣 xff0c 可以点击 访客必读 指引页 一文囊括主页内所有高质量博客 xff0c 查看完整博客分类与对应链接 本篇文章介绍一种针对 Stochastic Multi armed Bandits MAB 问题的算
  • 二进制哈希码快速搜索:Multi-Index Hashing

    前言 如果你对这篇文章感兴趣 xff0c 可以点击 访客必读 指引页 一文囊括主页内所有高质量博客 xff0c 查看完整博客分类与对应链接 哈希方法通常包含两个部分 xff1a 编码 将元素通过 data dependent 或 data
  • 对比学习 (Contrastive Learning) 发展历程 - 综述

    前言 如果你对这篇文章感兴趣 xff0c 可以点击 访客必读 指引页 一文囊括主页内所有高质量博客 xff0c 查看完整博客分类与对应链接 本文为 对比学习论文综述 的笔记 xff0c 其中将对比学习分为了以下四个发展阶段 xff1a 百花