当前位置: 首页 > news >正文

对比学习:【SimCLR】

🚩 对比学习最经典的框架:SimCLR笔记它来咯!
主要包括:数据增强+编码+投影头+对比损失


文章目录

  • 1. 一句话概括
  • 2. 简介
    • 2.1 模型定位
    • 2.2 历史意义
    • 2.3 核心思想
  • 3. 方法
    • 3.1 数据增强(Data Augmentation)
    • 3.2 编码网络(Encoder Network)
    • 3.3 投影头(Projection Head)
    • 3.4 对比损失(Contrastive Loss)

1. 一句话概括

SimCLR是一种基于对比学习的自监督框架:对每张图像生成两种强增强视图作为正样本对,使用ResNet编码并通过MLP投影头得到对比空间表示,在 batch 内把其他样本当作负样本,用带温度系数的NT-Xent损失拉近正对、拉远负对,从而学习可迁移的视觉表征。

2. 简介

2.1 模型定位

  • 图像分类、目标检测、语义分割的预训练模型

2.2 历史意义

SimCLR(Simple Contrastive Learning of visual Representations),它是自监督学习(Self-Supervised Learning, SSL)在计算机视觉领域的重要里程碑之一,由 Google Research 在 2020 年提出。

利用对比学习,实现自监督学习模型的性能超越了有监督学习模型的性能。

  • 论文《A Simple Framework for Contrastive Learning of Visual Representations》
  • 代码仓库:https://github.com/google-research/simclr

2.3 核心思想

让同一张图像的不同增强视图在特征空间中彼此靠近,同时让不同图像的增强视图彼此远离。(对比学习)

换句话说,模型要学会“识别”哪些特征属于同一图像的不同视角,从而学到对图像变换鲁棒的通用特征。

3. 方法

3.1 数据增强(Data Augmentation)

  • 对同一张原始图像 x随机采样两种不同的增强方式,得到两个视图x i x_ixix j x_jxj(正样本对)
  • 数据增强方式组合包括:
    • 随机裁剪缩放
    • 颜色扰动
    • 随机灰度
    • 高斯模糊
    • 水平翻转
  • 目的:制造视觉上不同但语义相同的样本,迫使模型关注语义而非表面特征。
  • 前两种数据增强方法对效果提升很重要。
importtorchvision.transformsasT# SimCLR 常用的数据增强组合(适用于 ImageNet 风格输入)simclr_train_transform=T.Compose([T.RandomResizedCrop(size=224,scale=(0.08,1.0)),# 随机裁剪缩放T.RandomApply([# 颜色扰动(按概率应用)T.ColorJitter(brightness=0.4,contrast=0.4,saturation=0.4,hue=0.1)],p=0.8),T.RandomGrayscale(p=0.2),# 随机灰度T.GaussianBlur(kernel_size=23,sigma=(0.1,2.0)),# 高斯模糊(kernel_size 建议为奇数,随分辨率调整)T.RandomHorizontalFlip(p=0.5),# 水平翻转T.ToTensor(),# 转成 PyTorch TensorT.Normalize(mean=(0.485,0.456,0.406),std=(0.229,0.224,0.225))# 对每个通道做标准化(这组数来自 ImageNet 的统计)])

3.2 编码网络(Encoder Network)

  • 使用一个卷积神经网络(ResNet)将增强图像x i x_ixix j x_jxj编码为特征向量。

3.3 投影头(Projection Head)

  • 小型非线性网络,通常是MLP

  • 投影头的输出z zz才是对比学习任务的直接输入,训练完成后可丢弃,只用编码器f ( . ) f(.)f(.)提取的特征做下游任务。

3.4 对比损失(Contrastive Loss)

使用 Normalized Temperature-scaled Cross Entropy Loss(NT-Xent)​ 计算损失:


其中,τ:温度参数(temperature),控制分布的平滑程度。


NT-Xent 损失本质是 InfoNCE 的一种写法

损失的演变过程

  • NCE:原本是一种用于估计概率模型中配分函数(partition function)的方法,通过将密度估计问题转化为二分类问题(区分真实数据与噪声数据)。
  • InfoNCE:在 NCE 的基础上,用于最大化输入与表征之间的互信息的下界,在对比学习中,它表现为“让正样本对的相似度高于负样本对”。
  • NT-Xent:一种写法上的转变
http://www.jsqmd.com/news/139902/

相关文章:

  • ADXL345加速度传感器原理图设计,已量产(加速度传感器)
  • 全新帕萨特ePro前瞻:换了新平台、综合续航1300公里
  • 智谱MiniMax竞速上市,字节新模型数学推理突破,清华开源视频生成技术,AI监管政策出台
  • 游戏手柄电池选购指南:品牌、价格与充电方式全解析 - 工业品网
  • Java毕设选题推荐:基于Springboot+Vue的旅游攻略分享平台系统基于VUE的旅游信息分享管理平台【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 对比学习2:【MoCo】
  • 分段存储管理方式学习总结
  • 浅析为什么要用Cursor Commands及在日常开发中如何使用的最佳实践
  • 5、索引的数据结构(b+树,hash)
  • 毕业项目推荐:87-基于yolov8/yolov5/yolo11的血红细胞检测计数系统(Python+卷积神经网络)
  • 元推理框架一次完美的“框架内机器证明”:对莱布尼茨级数的解析
  • 高德地图红绿灯倒计时之实现原理
  • 6、索引算法有哪些?
  • 毕业项目推荐:88-基于yolov8/yolov5/yolo11的昆虫检测识别系统(Python+卷积神经网络)
  • 根据日期编码
  • 如何用Lupa 为Python应用添加脚本支持,以及如何在游戏引擎中调用逻辑
  • LINQ:SelectMany
  • Slabify-et 安装使用(https://github.com/CellArchLab/slabify-et)
  • ARC103B(abc101D)
  • 链表的基本操作,用链表实现线性表
  • 12/25
  • 如何进行 Python 和 Lua 之间的复杂数据交换
  • 游戏手柄电池没电了?靠谱供应商看这里 - 工业品网
  • 物联网智能灯具推荐:五大独家精选深度推荐 - 品牌测评家
  • 解码STM32F4环境搭建、工程搭建与烧录
  • (新卷,200分)- 找单词(Java JS Python)
  • 抽象圣诞树3
  • 段页式管理方式学习总结
  • 游戏手柄电池批发厂家哪里找?聚电新能源 - 工业品网
  • 一天面了6个前端开发,水平真的令人堪忧啊 - 教程