深度笔记 - Moco对比式学习 (Momentum Contrast for Unsupervised Visual Representation Learning)


一些废话:

之前读完了MAE,对自监督学习有了新的认知。
当初在看半监督学习时,发现MeanTeacher、semiGan也好,蒸馏学习也好,其实多多少少采用了相似的思想。
而恺明大佬在MAE中对NLP任务和CV任务的分析与探讨也让人感受很深,首先有些方法不一定非常新颖,但如何得出这个方法,这个思考过程,是非常重要的。

概述

2017年,FAIR提出的Moco不仅逼近、甚至超越了部分有监督视觉任务的预训练模型。

自监督学习可以粗略分为:基于上下文、基于对比的、基于时序这三种。
入门可以阅读这篇博客:自监督学习

首先我们将Moco和MAE进行对比,同样是自监督学习:MAE属于生成式任务(可以理解成基于上下文的),Moco属于对比式学习。

对比学习

什么是对比式学习呢:
我们可以通过设置代理任务的方式来生成所谓的类似标签,这样可以在无需标注的情况下得到所谓的类似样本。
例如:有一张狗的图像,和一些猫的图像。我们对这张狗的图像做随机裁剪,得到的图像都可以认为是类似的样本,而其余的图像则认为是不相似的样本。
我们将所有的样本输入一个神经网络模型,每个样本得到一些特征,而相似样本的特征值需要靠近,不相似的样本特征值在特征空间中需要彼此远离,通过这样的思路来训练整个神经网络,这就是一个自监督学习的方案。而随机裁剪这种做法又被称为instance discrimination。
若当前的实例为x,与x相似我们称之为正样本x+,与x不相似的称之为负样本x-,而x与x+的距离要拉近,与x-的距离需要拉远。这个距离可以通过点积来计算:

score(f(x),f(x+) >> score(f(x),f(x-))

损失函数 InfoNCE的计算:
InfoNCE

当然,正样本和负样本的定义方式可以更加灵活,例如视频的相邻帧,例如机器人在连续的环境中运行时获取的IMU数据(具有时空连续性)、同一个物体的不同角度图像,在这些思路上都可以找到新的定义方式。

MoCo

MoCo的名称来源于文章的:Momentum Contrust,也就是动量对比。
此处的动量并不是物理量,而是:yt = m * yt-1 + (1-m) xt

其中m为动量,x为t时刻输入,y为t时刻输出。利用前一时刻也就是t-1时刻的输出来做加权平均。所以动量更新也可以理解成为一种移动加权平均.

这个公式跟MeanTeacher中参数的指数移动平均(EMA)公式也很类似:θ t =αθ t−1+(1−α)*θ t

原文总结说,基于对比的自监督学习其实就是训练一个编码器然后在一个大的字典里确保和对应的键是相似的,和其它的是不相似的。所以字典的大小就成了关键,传统的方法是字典的大小就是等于mini_batch的大小,但是这种方法由于显卡和算力的问题导致其不能太大。因此MoCo的创新点就在于通过动态字典维护的方式

MoCo的做法如下:制作了一个动态字典,动态字典由(1)一个队列 (2)一个动量编码器组成
如图所示。负样本因为不需要太多更新,所以每次做完编码后,就被丢进队列里面,而最老的编码出列(队列是先进先出的),这样可以保证字典的轻量化,使得字典大小小于batch size。
左边的xquery为当前锚定数据,而右边是需要和铆钉数据做相似度对比的数据。
在这里插入图片描述
考虑一个编码后的特征q和一组编码后的数据样本{k0, k1, k2, …},把k作为字典的key。假设字典中存在一个与q相似的正样本(表示为k+),则计算q和k+的对比性损失(这个由lecun在2006年提出)
当q与k+相似而与所有负样本不相似时,其对比性损失越小,并用点积来衡量相似度,也就是前文提到过的InfoNCE。
在这里插入图片描述
1)字典中包含尽可能多的负样本,数据更丰富;
2)用于提取keys的encoder网络我们应该尽量保持其演化中不变,因为随着训练肯定是有变化的。

参考

  1. 原文:Momentum Contrast for Unsupervised Visual Representation Learning
  2. MoCo 论文逐段精读【论文精读】
  3. self-supervised系列-何凯明的MoCo
<think>好的,我现在需要处理用户关于对比学习模型框架示意图、架构图或可视化的请求。首先,我要回顾用户的问题,确保理解准确。用户提到想要查找对比学习模型的框架示意图,可能需要相关的架构图或可视化内容。同时,用户之前的对话中引用了两篇关于大模型可视化和架构的文章,虽然这些引用可能不完全相关,但需要参考是否有可用信息。 首先,我需要明确对比学习Contrastive Learning)的基本概念和常见框架。对比学习属于自监督学习的一种,核心思想是通过比较正样本和负样本的相似性来学习表征。常见的模型如SimCLR、MoCo、CLIP等都采用了不同的架构设计。接下来,我需要回忆这些模型的框架结构,并考虑如何以示意图或架构图的形呈现。 用户需要的是可视化内容,但作为文本回答,我无法直接提供图片,因此需要用文字描述这些框架的关键组成部分,并建议查找相关论文或教程中的图示。同时,用户提供的引用[1]和[2]虽然主要关于大模型的可视化方法,但可能包含通用的可视化技巧,比如使用工具如TensorBoard、Netron或架构设计模,这些可以作为补充信息。 接下来,我需要组织回答结构,首先介绍对比学习的核心组件,然后分点描述常见模型的框架,如SimCLR、MoCo、CLIP,以及多模态对比模型。每个部分需要简要说明其架构,并建议对应的论文或资源供用户进一步查阅。同时,需要提到可视化工具,帮助用户自己生成或找到架构图。 需要注意的是,用户可能对技术细节有一定了解,但需要更直观的可视化辅助,因此描述应尽量清晰,避免过于专业的术语,同时确保准确性。此外,引用文献时要正确标注,但用户提供的引用可能不直接相关,因此需要谨慎处理,避免误导。 最后,生成相关问题,帮助用户深入探讨对比学习的应用、优化方法以及与其他学习的比较。这些问题应围绕用户的需求展开,引导他们进一步探索相关内容。 总结步骤: 1. 确认用户需求:对比学习模型的框架示意图、架构图或可视化。 2. 回顾对比学习的基本原理和常见模型架构。 3. 结构化回答,分点描述各模型的框架,并建议参考资料。 4. 提及可视化工具和方法,辅助用户自行生成图示。 5. 生成相关问题,促进深入探讨。 6. 确保引用恰当,回答符合格要求,使用正确的中文和LaTeX格。 现在,按照这些步骤组织回答内容,确保信息准确、结构清晰,并满足用户的可视化需求。</think>### 对比学习模型框架示意图与可视化解析 对比学习Contrastive Learning)的核心目标是通过最大化正样本对的相似性、最小化负样本对的相似性,学习高质量的特征表示。其框架通常包含以下关键组件: 1. **数据增强模块**:生成同一输入的不同视图(正样本对),例如图像裁剪、旋转等; 2. **编码器网络**:将输入映射到低维特征空间,如ResNet、Transformer等; 3. **投影头**(Projection Head):将特征进一步映射到对比学习空间,通常为多层感知机(MLP); 4. **对比损失函数**:如InfoNCE损失,公为: $$ \mathcal{L} = -\log \frac{e^{s(z_i, z_j)/\tau}}{\sum_{k=1}^N e^{s(z_i, z_k)/\tau}} $$ 其中$s(\cdot)$为相似度计算,$\tau$为温度系数。 --- ### 典型框架示意图与架构 #### 1. **SimCLR框架**(Simplified Contrastive Learning- **架构流程**: ``` 输入图像 → 数据增强(两次变换) → 编码器(CNN) → 投影头(MLP) → 对比损失计算 ``` - 关键特点:无需内存库,直接通过大批量样本构造负样本对[^1]。 #### 2. **MoCo框架**(Momentum Contrast- **架构流程**: ``` 查询分支(当前批次编码器) → 键分支(动量更新编码器) → 动态内存库存储历史负样本 ``` - 核心公:动量更新 $θ_k = m \cdot θ_k + (1-m) \cdot θ_q$,通过队列机制扩展负样本数量[^2]。 #### 3. **CLIP框架**(跨模态对比学习- **架构流程**: ``` 图像输入 → 图像编码器 → 文本输入 → 文本编码器 → 计算图文相似度矩阵 → 对比损失 ``` - 特点:通过大规模图文对实现跨模态对齐,公为双向InfoNCE损失。 #### 4. **多模态对比模型架构** - **典型结构**: ``` [模态A数据] → 编码器A → 特征投影 → 对比损失计算 ↑ ↓ [模态B数据] → 编码器B → 特征投影 ``` 常用于语音-文本、视频-文本等跨模态任务。 --- ### 可视化方法与工具建议 1. **论文示意图**: - SimCLR原始论文[《A Simple Framework for Contrastive Learning》](https://arxiv.org/abs/2002.05709)中的图1展示了数据增强与对比流程; - MoCo论文[《Momentum Contrast for Unsupervised Visual Representation Learning》](https://arxiv.org/abs/1911.05722)的图2描述了动量编码器与队列机制。 2. **工具生成架构图**: - 使用**TensorBoard**或**Netron**可视化模型计算图; - 通过绘图工具(如**Draw.io**、**Lucidchart**)手动绘制模块交互流程; - 代码库(如PyTorch Lightning)的模型摘要功能可输出层级结构。 3. **交互可视化平台**: - **Hugging Face Model Hub**提供部分预训练对比模型的结构预览; - **Distill.pub**等学术平台常包含动态图解(如[《Understanding Contrastive Learning》](https://distill.pub/2021/understanding-contrastive-learning/))。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

canmoumou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值