【钟灵毓秀AI史】对比学习

对比学习

  • 介绍
  • 发展史
  • 争相斗艳
    • Inst disc(2018)
    • InvaSpread(2019)
    • CPC(2018)
    • CMC(2019)
  • 双雄格局
    • MOCO v1
    • SimCLR v1
    • moco V2
    • SimCLR V2
    • SwAV
    • CPC V2
    • infomin
    • 总结
  • 化繁为简
    • BYOL
    • SimSiam
  • Transformer
    • MOCO v3
    • DINO
  • 总结
  • 参考文献

介绍

对比学习是一种由有监督的思路去解决无监督的问题的一种方法。主流的思路是将一个样本进行变换,变换后的样本为正样本,样本集中其他样本及其他样本的变换定义为负样本。然后让正样本尽可能相似,与负样本尽可能远。

发展史

【钟灵毓秀AI史】对比学习_第1张图片
梳理下发展史,不同算法的有点等待梳理下。对这个图进行了解,就能对整个对比学习的发展核心节点和方向有一个初步的概念。
从18年开始,整个对比学习分成4个阶段,

  • 争相斗艳。代表作有instdis、cpc、cmc等。这个阶段方法模型、目标函数、代理任务都未统一。
  • 双雄割据。代表作有MOCO v1、SimCLR v1、 MOCO v2、SimCLR v2、 SwAV等。这个阶段非常卷, imagenet分数每个月都被刷新。
  • 化繁为简。代表作BYOL、SimSiam。BYOL提出不使用负样本,SimSiam把所有方法都归纳总结,融入到该框架中。
  • Transformer。代表作MOCO v3、DINO。主要是解决vision transformer训练不稳定的问题。

争相斗艳

Inst disc(2018)

【钟灵毓秀AI史】对比学习_第2张图片
对比学习正样本是同一图片,负样本是其他所有图片,对ImageNet数据来说有128万的负样本。

  1. 个体判别的代理任务
    通过个体的特征来进行特征空间的区分。算法将一个图片通过cnn表示成一个128维的特征,使得图片特征在特征空间里尽可能分开,相同标签的尽量近,不同标签尽量远。
  2. memory bank
    这个学习过程中,需要大量的负样本,而算法结构中很难使用所有的负样本。因此作者提出使用外部存储memory bank。算法使用的batch size是256,有256个正样本,负样本从memorybank中随机抽取4096个。得到新的特征后,再去更新到memory bank。
  3. NCE loss。把多分类问题,变成一个二分类问题。
  4. 负样本动量更新,提升了算法的稳定性。

InvaSpread(2019)

【钟灵毓秀AI史】对比学习_第3张图片

  1. 使用了数据增强,图片和其增强数据为正样本,其他图片及其增强为负样本。
  2. 没有使用额外结构存储负样本,正负样本来自同一个minibatch。这样造成一个缺点就是负样本不足,导致整体的效果不佳。
  3. 使用同一个编码器。原始图片和增强图片使用的编码器是同一个。

CPC(2018)

【钟灵毓秀AI史】对比学习_第4张图片

  1. 提出生成式判别任务,使用预测的数据和原始数据编码后的特征数据进行对比。
  2. 是一个很通用的框架,可以处理文本、语音和图像的任务。
  3. 使用infoNCE。

CMC(2019)

【钟灵毓秀AI史】对比学习_第5张图片

  1. 视角的不变性,提出同一图片不同视角互为正样本,使用多视角增大互信息。
  2. 不同视角需要不同编码器。 (顺便提下使用transformer可以使用同一编码器,因为transformer可以处理各种不同数据)

双雄格局

MOCO v1

【钟灵毓秀AI史】对比学习_第6张图片

【钟灵毓秀AI史】对比学习_第7张图片

  1. 提出对比学习可以当成一个字典查询问题。
  2. 队列取代memorybank,解决大字典问题。
  3. 动量编码器。(moco动量作用于参数更新,instdis动量作用于特征)解决特征不一致问题。后面SimCLR,BYOL,及最新的对比学习都在使用。
  4. 损失函数使用info NCE

SimCLR v1

【钟灵毓秀AI史】对比学习_第8张图片

  1. 特征生成之后,增加了一个MLP层。增加了10个点。该层只在训练时候使用。
  2. 增加了许多数据增强方法,数据增强是正样本,其他和其他增强为负样本。其中裁剪和颜色变化最为有效。
  3. 使用更大batch size(8192)和训练更久。

moco V2

【钟灵毓秀AI史】对比学习_第9张图片
moco V2 做了两个改进

  1. 增加了MLP projection head
  2. 使用了更多的数据增强。
  3. 使用的loss时infoNCE
    优势依然是训练时不需要大的batch size,就能取得很好的效果。

SimCLR V2

【钟灵毓秀AI史】对比学习_第10张图片
自监督训练大模型。一个小数据,进行半监督学习

  1. 使用更大的模型 152层的ResNet
  2. MLP使用2层
  3. 使用动量编码器。提升不明显,因为batchsize 4096,已经有足够的负样本了。

SwAV

【钟灵毓秀AI史】对比学习_第11张图片

  1. 对比的对象变成了聚类中心。swap prediction(上下交叉预测)。结果已经非常逼近有监督学习。
  2. Multi-crop。2224 变成2160+4*96

CPC V2

  1. 用了更大的模型
  2. 用了更大的图像块
  3. batch norm 换成layer norm
  4. 更多数据增强

infomin

  1. infoMin原则,最小化互信息。作者想达到的是不多不少的互信息,太大浪费资源,太少达不到效果

总结

  1. 目标函数用infoNCE,或其变种
  2. 模型都用一个编码器,后面加一个projection head
  3. 更强的数据增强
  4. 都用动量编码器
  5. 训练更久
  6. 效果逼近有监督

化繁为简

BYOL

【钟灵毓秀AI史】对比学习_第12张图片
BYOL

  1. 不使用正样本,也能够进行对比学习。解决了只有正样本会造成模型坍塌的问题。
  2. 上面使用的正常编码器,下面使用的是动量编码器,两个预测值进行对比。把对比变成了一个预测问题。
  3. 使用mse loss

BYOL BLOG(Understanding BYOL)
提出BYOL是用了负样本。认为batch normal的结构,有信息泄漏,用了隐式负样本。博客作者认为正样本跟平均图片对比。

BYOL even work without batch norm

  1. batch norm 稳定模型稳健型。
  2. 使用Group Norm withWS,也可以学习。

SimSiam

【钟灵毓秀AI史】对比学习_第13张图片

SimSiam对前面工作进行总结,提出了一个简介的对比学习框架。

  1. 结构简单,不使用负样本,不使用大的batch size,不使用动量编码器
  2. 构建孪生网络,encoder模型相同,共享参数。不同的是,一侧的结构增加了一个用来预测的projection MLP,一侧的结构有一个stop-gradient。
  3. 模型坍塌主要是因为停止梯度(stop-gradient)这个操作。

Transformer

MOCO v3

【钟灵毓秀AI史】对比学习_第14张图片

  1. 将moco v2 的encoder的网络ResNet换成Transformer。
  2. 主要解决Vit 训练不稳定的问题。准确率下降时通过查梯度,发现梯度波动很大,波动的原因是第一层参数的更新,也就是patch projection。 MOCO提出的解决方案是固定住第一层(patch projection层)。transformer本身结构目前表现很优异,目前能优化的就是transformer之前(如tokenization)和之后(如目标函数)

DINO

【钟灵毓秀AI史】对比学习_第15张图片

  1. 使用蒸馏的方式,用student和teacher预测的结果进行对比,来解决ViT训练不稳定的问题。

总结

  • Instdis 提出个题判别任务、memory bank外部存储结构存储负样本。
  • invaspread 使用batch size存储负样本。batchsize太小,效果不好。
  • cpc 提出infoNCE loss,是一个预测型代理任务。
  • cmc把两个视角任务扩展到多个视角,给多视角,多模态打下铺垫。
  • moco v1 memory bank变成一个队列,动量更新特征变成动量更新编码器。
  • SimClr v1,加大batchsize,更多数据增强,加了projection head,训练更长时间。
  • cpc V2,加了所有技术
  • infomin,提出两个样本户信息要不多不少最好。
  • Moco V2,Simclr v2,用了这些技术,进行提升
  • SwAV,对比学习和聚类技术组合。
  • BYOL 不用负样本,使用MSE。
  • SimSiam,之前工作总结了下,提出孪生网络,不需要动量编码器等
  • MOCO v3和DINO,主干网络换成transformer,主要是解决不稳定问题,moco是冻住patch projection层,DINO提出teacher网络做归一。

MAE研究热点开始转到掩码学习,对比学习的热度开始逐步减弱。

参考文献

  • 读论文

你可能感兴趣的:(机器学习,对比学习,深度学习)