自监督学习模型发展综述:Inst Disc、Inva Sread、MOCO、SimCLR、BYOL

文章目录

代理任务:个体判别,每一张图片都是自己的类,每一张图片都尽可能和其他图片分开。

对比学习:需要有正负样本,让正负样尽可能的分开,负样本越多对比学习效果更好

一、Inst Disc

研究意义价值

提出了个体判别的代理任务,提出使用memory bank数据结构存储大量负样本,是MoCo的前身。

个体判别(instance discrimination)

将每一张图片都看作是一个类别,希望模型可以学习图片的表征,从而把各种图片都区分出来。

特点

把每一张图片都看做一个类别,通过卷积神经网络学习每一张图片(每个实例)的特征,从而把每一张图片都分开。

实现方法

通过CNN给图片编码成一个128维的特征,然后在特征空间中将这些特征尽可能分开。

如何训练CNN

使用对比学习中的正负样本进行训练。

正样本:图像本身

负样本:数据集中除了正样本的其他图片。

大量负样本如何存储

数据结构:memory bank(字典),后文简称mb,把所有图片的特征向量都存储在一个memory bank中。

以ImageNet数据集为例,数据集中共有128万张图片,因此memory bank字典就需要有128万行,所以需要把图片的特征维度尽可能减小来降低内存。

在论文中选择了128维的向量。

前向传播过程

  • 图片特征向量大小:batchsize = 256, 256张图片进入编码器中,通过ResNet50生成一个2048维特征向量,再降维形成128维的向量。
  • 正样本:一批次为256个
  • 负样本:从mb中随机抽取的4096个图片的特征向量
  • loss function:NCE loss
  • 更新mb:利用NCE loss去更新CNN的参数。本次更新结束后,会将CNN编码得到的向量替换掉memory bank中原有的存储。就这样循环往复的更新CNN和memory bank,最后让模型收敛,就训练好一个CNN encoder了

Proximal Regularization

为模型的训练加一个约束,使得mb可以进行动量式的更新。

超参数设置

  • loss中温度的设置:0.07
  • epoch = 200
  • 负样本个数:4096
  • batchsize = 256
  • initial learning rate = 0.03

Moco中的超参数设置都与该设置相同。

二、Inva Sread

SimCLR前身

特点

  1. 不使用其他数据结构去存储大量负样本,正负样本均来源于一个mini-batch。
  2. 只使用一个编码器进行端到端的学习

原理

对比学习的思想。

  • 相似的图片通过编码器后生成的特征应该类似,保持特征不变性
  • 不相似的图片通过编码器后生成的特征应该有很大的差异,尽可能分散

代理任务:个体判别

如何选取正负样本

画图理解一下正负样本如何选取:

假设一个mini-batch为256张图片(x1-x256),经过数据增强后会再次得到256张图片(x1'-x256'),原图和其经过数据增强后的图片即成为一个正样本对(positive sample pair) ,即256对,除了正样本对之外的图片即为负样本,即(256-1)个负样本对(negetive sample pair)

为什么从一个batch中选择正负样本?

可以使用一个编码器进行端到端的学习。

前向传播过程

图像和增广后的图像分别经过CNN编码器输出2048维向量,两个编码器是权值共享的,所以相当于是一个编码器,然后经过降维输出128维向量,在embedding space中让正样本之间向量尽量靠近,让负样本之间向量尽量远离。

目标函数

NCE的变体。

模型效果不够好的原因

  1. 没有使用字典进行存储负样本,负样本数量不够大,导致对比学习的效果不够好。
  2. 没有足够强大的数据增广。
  3. 没有SimCLR中的projection head。

MoCo

动量对比学习方法做无监督表征学习。

具体讲解见:自监督学习之对比学习:MoCo模型超级详解解读+总结

SimCLR

模型

正负样本对的选取

把原图进行不同的数据增广后得到xi和xj,该两张图片互为正样本,一个batch中的其他图片均为其负样本。如一个batch中有n张图片,对每张图片都进行两次数据增广,经过数据增广后该batch中则会包含2N张图片,其中有N对互为正样本对,则有N-1对为其负样本对。

Proection Head

模型中的g(.)函数:全连接层(20482048)-> BN -> 激活函数 -> 全连接层(2048 128) -> BN

前向传播过程

注意:projection head只在训练的时候使用,在后续下游任务时去掉g函数那一层,使用h特征向量做下游任务。

和Inva Sread的区别

  1. 更多的数据增强: 多种数据增强的方法进行使用。
  2. 更大的batchsize进行训练。
  3. 加了一个projection head:加一个非线性变换。

BYOL

无需负样本就可以做对比自监督学习。

模型

目标函数

MSE loss

BYOL模型中的BN作用

模型进行隐式的负样本学习。

参考

Unsupervised Feature Learning via Non-Parametric Instance Discrimination
SimCLR知乎解读

相关推荐
笃励19 分钟前
Java面试题二
java·开发语言·python
望森FPGA20 分钟前
HDLBits中文版,标准参考答案 |2.5 More Verilog Features | 更多Verilog 要点
学习·fpga开发
涩即是Null30 分钟前
如何构建LSTM神经网络模型
人工智能·rnn·深度学习·神经网络·lstm
l1x1n030 分钟前
DOS 命令学习笔记
笔记·学习·web安全
本本的小橙子33 分钟前
第十四周:机器学习
人工智能·机器学习
学步_技术1 小时前
自动驾驶系列—自动驾驶背后的数据通道:通信总线技术详解与应用场景分析
人工智能·机器学习·自动驾驶·通信总线
道爷我悟了1 小时前
Vue入门-指令学习-v-on
javascript·vue.js·学习
一颗星星辰1 小时前
Python | 第九章 | 排序和查找
服务器·网络·python
打码人的日常分享1 小时前
企业人力资源管理,人事档案管理,绩效考核,五险一金,招聘培训,薪酬管理一体化管理系统(源码)
java·数据库·python·需求分析·规格说明书
27669582921 小时前
京东e卡滑块 分析
java·javascript·python·node.js·go·滑块·京东