对比学习与自监督任务

对比学习与自监督任务

笔者在之前上课时候被迫接受学习了NLP的许多相关的知识,BERT GPT等许多的NLP领域的大模型,都采用了半监督或者说是无监督的训练方法,最近在视觉的领域视觉自监督的模型受到了越来越多的关注。现在需要自己了解一下自监督和对比学习是怎么去做的呢?

  1. 自监督学习,对比学习等,这些事好像都不需要我们准备标签。
  2. Openai开创了GPT系列,CLIP,Dalle等,都在告诉我们一件事模型在训练的时候,不要被标签所束缚,模型的潜力应该由他自己挖掘。
  3. 如果我们给定了标签,就可能限制了模型。

有监督的学习是为了解决一个很小的问题方面,比如我们的行人重识别,但是自监督是为了迈向一个更加通用的问题方面。自己监督自己的学习

自监督学习不需要标签,更多的情况下是结合对比学习的概念。-也是自己在之前clip中学习和接触过的概念。

对比学习

深度学习根据有无标签可以分成有监督学习(Supervised Learning)半监督学习(Semi-Supervised Learning)以及无监督学习(Unsupervised Learning)自监督学习(Self-Supervised Learning)是根据数据本身的内容进行学习,无需要人工打标,因此也属于无监督学习的范畴。对比学习属于自监督学习的一类,它的核心思想是判断两个样本是否属于同一类。例如当我们看到足够多的某两种不同动物的照片,尽管我们不知道这个动物具体叫什么名字,我们也能够判断两个动物是不是同一类。

自监督任务

自监督学习的目标是学习更加通用的一种表示。可以实现不同任务之间的迁移。通过自监督学习,模型已经学到了一种十分通用的表示。它一开始就可以处理多种不同的任务在不同的下游任务中,我们可以通过简单的微调来进行调整。

在这里插入图片描述

我们在自监督的学习任务中引入了Contrastive Learning(对比学习的概念)

对比学习的一种核心的思想就在于,它引入了一种独特机制的损失函数,可以将相同的表示更好的聚在一起,不同的表示将其进行分开。

在这里插入图片描述

下面在介绍具体论文实现的基础上我们先介绍的是在对比学习中最常见的几种损失函数。

The Contrastive Loss

对比损失将一对数据点作为输入,并伴随一个称为"边距"的参数,通常表示为m。它的行为要取决于这对输入点是正例还是负例。

  1. 如果这对是正的,这意味看这两个点应该是相似的,因此我们希望最小化它们之间的距离。在这种情况下,损失只是这两个点之间的平方距离。我们用D来进行表示。

  2. 如果这对是负的,我们希望将点拉开,直到它们的距离达到边距m。所以如果它们的距离小于边距,损失就是边距与当前距离的差值。然而,如果距离已经大于边距。损失为零,因为这两个点已经足够远,

L = ( 1 − y ) ⋅ D 2 + y ⋅ max ⁡ ( 0 , m − D ) 2 \mathcal{L}=(1-y) \cdot D^{2}+y \cdot \max (0, m-D)^{2} L=(1y)D2+ymax(0,mD)2

分析:的确,当我们有一个正对时,y等于0,通过最小化损失。我们使点靠得更近。当我们有一个负对时,y等于1,损失会推动点拉开,直到达到边距。

我们可以通过优化训练这个损失函数,就可以实现自监督学习的一种思想了。

损失函数通常是对比学习中最重要的一个部分,关于对比学习的损失函数其实还有很多,这里只介绍SimCLR中核心应用的一个部分。

InfoNCE Loss

MOCO这篇论文的出现比SimCLR论文更早。它里面提到的损失函数就是InfoNCE Loss损失函数。

这个损失函数和上面的损失函数不同,它是以概率而非是用距离的形式来进行定义的。

它使用了一个正样本对和多个负样本对来进行实现的。

在这里插入图片描述
:在SimCLR中正负样本对是如何进行创建的呢?

答:对比样本对是通过数据增强创建的。尽管它们在视觉上有所不同,但两个视图仍然代表同一对象,因此模型学习为它们生成相似的表示。

在这里插入图片描述

:对于负样本对,SimCLR从同一批次中选择另一张图像,并应用相同的增强过程. 由于负样本对是在同一个批次内采样的,因此需要非常大的批次大小 N在8000以上,更多是是使用集群的方式来进行训练的我自己没有在进行代码的复现了。

从传统的小批量随机梯度下降中的批次 64 -256的批次范围,更改到了 4096-8192的巨大批次范围。在lmageNet分类测试中,SimCLR达到了76%的Top1准确率,接近通过监督学习的ResNet50的表现,同时使用的是自监督学习不需要任何标签数据

更令人印象深刻的是,使用仅1%的lmageNet标签进行微调时,SimCLR达到了86%的Top5准确率,超越了完全监督的AlexNet,35而后者依赖100倍更多的标签数。

在这里插入图片描述
后面的Bootstrap Your Own Latent对比学习方法,Bootstrap Your Own Latent(BYOL)是一种自监督对比学习方法,它的核心思想是通过两个神经网络——在线网络(Online Network)和目标网络(Target Network)——的相互作用和学习来实现特征表示的学习。以下是BYOL方法的一些关键点(消除了大量的负样本对的一个影响。

在介绍损失函数之前,我们下结合多分类的softmax操作从而引入交叉熵损失函数。省略了前面的y

− log ⁡ exp ⁡ ( z − ) ∑ i = 0 1 exp ⁡ ( z i ) -\log \frac{\exp \left(z_{-}\right)}{\sum_{i=0}^{1} \exp \left(z_{i}\right)} logi=01exp(zi)exp(z)

我们在对比学习中使用的损失函数是InfoNCE LOSS它首先要是 NCE LOSS的一个变形。NCE(二分类 数据分布 + 噪声分布) Loss中是一种粗略的估计(选择的是一部分负样本的数量负样本的数量要尽可能的大。从而导致了模型的批次数变大了)。

L q = − log ⁡ exp ⁡ ( q ⋅ k + / τ ) ∑ i = 0 K exp ⁡ ( q ⋅ k i / τ ) \mathcal{L}_{q}=-\log \frac{\exp \left(q \cdot k_{+} / \tau\right)}{\sum_{i=0}^{K} \exp \left(q \cdot k_{i} / \tau\right)} Lq=logi=0Kexp(qki/τ)exp(qk+/τ)

这里它重新回到了类似多分类的交叉熵损失,区别在于里面的参数值发生变化 k由原理的分类的类别变成了K:负样本的数量。 通过这个函数来进行对比学习。

它其实做的就是一个分类的任务,将一个正样本,从大量的负样本K(总共k+1个样本)中分离出来。

监督学习

在Imagenet中的训练,对于这种大型的标注数据集来说,我们输入一张图片进入网络,将输出的结果与标签进行比较,反向传播来训练我们的模型。

在这里插入图片描述

无监督的学习

在我们常见的机器学习的算法中,比如K-means聚类算法中,可以在没有标签的情况下,在样本足够多时可以将同一类别的物体归为一类来进行处理。

在这里插入图片描述

对比学习:其实就是判断异同 相同的就是正例.不同的就是负例让模型学其中规律.

在这里插入图片描述

SimCLR

在简单的了解了对比学习和自监督的任务之后我们需要的是结合一个实例来去学习一下自监督或者说是对比学习的一个实现的方式。SimCLR通过将对比学习引入到了图像预训练中,SimCLR的原理并不复杂,即将图像映射到一个潜空间中,然后让正负样本分别靠近和远离

这里我们就用2020年的一篇最早的论文来去学习接触一下对比学习的概念。

论文:A Simple Framework for Contrastive Learning of Visual Representations
视觉表示对比学习的简单框架
介绍:在2020年由谷歌团队提出的。领导者正是Geoffrey Hinton(2024年诺贝尔物理学奖的获得者

在这里插入图片描述

这里模型训练的任务主要是要训练这个简单的网络中的encode的部分对于上面的线性投影的部分我们会在训练完成之后进行丢弃,只保留最后的一个encode的部分用来迁移到其他的任务中来提取特征

从这里也可以简单的了解文章的核心是如何通过对比学习的概念对模型进行预训练(原文使用的Encode的结构就是我们所熟悉的RestNet50的结构了)

  1. 对原始的图像做一个数据增强的操作得到xi这一张图片 xj是同样过程的一张图片。
  2. 将两个图片传入得到后面的Encoder的网络中去(参考VIT和RestNet网络
  3. 经过encode提取之后,hi和hj两个部分的向量。通过这两个向量经过处理参与后面的相似度的计算。
  4. 计算loss:计算对比损失并通过两个网络进行反向传播。当来自同一图像的投影相似时,对比损失减少。投影之间的相似度可以是任意的。
  5. 下游任务:对比学习得到Encoder做为特征提取器,根据下游任务的数据集进行微调Finetuin

论文的原文中给出了数据增强的相关操作。

在这里插入图片描述
原文中所对应的模型结构图如图所示。
在这里插入图片描述

通过最后的训练可以实现线性连接层的维度坐标从32到后面的2048的坐标的范围所产生的效果是基本上类似的。
在这里插入图片描述

在这里插入图片描述
L q = − log ⁡ exp ⁡ ( q ⋅ k + / τ ) ∑ i = 0 K exp ⁡ ( q ⋅ k i / τ ) \mathcal{L}_{q}=-\log \frac{\exp \left(q \cdot k_{+} / \tau\right)}{\sum_{i=0}^{K} \exp \left(q \cdot k_{i} / \tau\right)} Lq=logi=0Kexp(qki/τ)exp(qk+/τ)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/482577.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud2~~~

Nacos Nacos就是替代 注册中心【Eureka】 和 配置中心【Config】 支持AP和CP,可以切换 了解即可 下载和运行 下载版本(找自己想要的版本):Tags alibaba/nacos GitHub 本地有良好的 Java8 Maven环境 解压安装包,直接…

Vue进阶之单组件开发与组件通信

书接上篇,我们了解了如何快速创建一个脚手架,现在我们来学习如何基于vite创建属于自己的脚手架。在创建一个新的组件时,要在新建文件夹中打开终端创建一个基本的脚手架,可在脚手架中原有的文件中修改或在相应路径重新创建&#xf…

VPS默认是通过密钥文件登陆机器,编译~让机器能直接通过root密码登陆。

SSH 登录机器 登陆机器 输入命令切换到root权限并修改密码: sudu su #切换root权限psddwd #修改密码 修改登陆方式 输入命令: vi /root/.ssh/authorized_keys 找到 “ssh-rsa”字样, 按键盘 ” i ” 进入编辑模式&#xf…

map用于leetcode

//第一种map方法 function groupAnagrams(strs) {let map new Map()for (let str of strs) {let key str ? : str.split().sort().join()if (!map.has(key)) {map.set(key, [])}map.get(key).push(str)} //此时map为Map(3) {aet > [ eat, tea, ate ],ant > [ tan,…

文件比较和文件流

文件比较和文件流 一、文本比较工具 diff1.基本用法1.1输出格式 2.常用选项 二、文件流1.文件的打开模式2.文件流的分类ifstreamofstreamfstrem区别 3.文件流的函数1. 构造函数2. is_open 用于判断文件是否打开3. open4. getline5. close6. get()7. read8. write9. put10. gcou…

《如何使用Unity的Avatar人偶以及启动重定向-实现2个或多个人物模型使用同一个动画片段》

8.5 使用Avatar和人物重定向 注意事项: 这个人偶以及重定向技术只能作用于人物模型! 这个人偶以及重定向技术只能作用于人物模型! 这个人偶以及重定向技术只能作用于人物模型! 1. 基本原理 在Unity中,Avatar人偶和…

windows 应用 UI 自动化实战

UI 自动化技术架构选型 UI 自动化是软件测试过程中的重要一环,网络上也有很多 UI 自动化相关的知识或资料,具体到 windows 端的 UI 自动化,我们需要从以下几个方面考虑: 开发语言 毋庸置疑,在 UI 自动化测试领域&am…

百度 文心一言 vs 阿里 通义千问 哪个好?

背景介绍: 在当前的人工智能领域,随着大模型技术的快速发展,市场上涌现出了众多的大规模语言模型。然而,由于缺乏统一且权威的评估标准,很多关于这些模型能力的文章往往基于主观测试或自行设定的排行榜来评价模型性能…

基于协同推荐的黔醉酒业白酒销售系统

文末获取源码和万字论文 摘 要 基于协同推荐的黔醉酒业白酒销售系统主要针对黔醉酒业的具体业务需求所设计,现阶段阶段我国大型企业都会有自己的电商平台以及销售管理系统,其功能对于中小型过于冗长复杂,成本也不是中小型企业能够承受的&…

解决jupyter notebook 新建或打开.ipynb 报500 : Internal Server Error(涉及jinja2兼容性问题)

报错: [E 10:09:52.362 NotebookApp] 500 GET /notebooks/Untitled16.ipynb?kernel_namepyt hon3 (::1) 93.000000ms refererhttp://localhost:8888/tree ...... 重点是: from .exporters import * File "C:\ProgramData\Anaconda3\lib\site-p…

Kali Linux系统一键汉化中文版及基础使用详细教程

Kali Linux系统一键汉化中文版及基础使用详细教程 引言 Kali Linux是一款基于Debian的Linux发行版,专为渗透测试和网络安全而设计。由于其强大的功能和丰富的工具,Kali Linux在安全领域得到了广泛应用。然而,许多用户在使用Kali Linux时会遇…

LLaMA-Factory 上手即用教程

LLaMA-Factory 是一个高效的大型语言模型微调工具,支持多种模型和训练方法,包括预训练、监督微调、强化学习等,同时提供量化技术和实验监控,旨在提高训练速度和模型性能。 官方开源地址:https://github.com/hiyouga/L…

使用PyQt5开发一个GUI程序的实例演示

一、安装Python 下载安装到这个目录 G:\Python38-32 安装完成有这些工具,后面备用: G:\Python38-32\Scripts\pyrcc5.exe G:\Python38-32\Scripts\pyuic5.exe 二、PyQt环境配置 pip install PyQt5 pip install pyqt5-tools 建议使用国内源&#xff0c…

【开源免费】基于Vue和SpringBoot的校园资料分享平台(附论文)

博主说明:本文项目编号 T 059 ,文末自助获取源码 \color{red}{T059,文末自助获取源码} T059,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…

LocalDateTime序列化(跟redis有关)

使用过 没成功,序列化后是[2024 11 10 17 22 20]差不多是这样, 反序列化后就是: [ 2024 11 10.... ] 可能是我漏了什么 这是序列化后的: 反序列化后: 方法(加序列化和反序列化注解)&…

32 从前序与中序遍历序列构造二叉树

32 从前序与中序遍历序列构造二叉树 32.1 从前序与中序遍历序列构造二叉树解决方案 class Solution { public:TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {return buildTreeHelper(preorder, inorder, 0, 0, inorder.size() - 1)…

【韩顺平老师Java反射笔记】

反射 文章目录 基本使用反射机制java程序在计算机有三个阶段反射相关的主要类 反射调用优化Class类的常用方法获取Class对象的6种方式哪些类型有Class对象类加载类加载时机类加载过程图 通过反射获取类的结构信息第一组&#xff1a;java.lang.Class类第二组&#xff1a;java.la…

Python实现2048小游戏

2048是一个单人益智游戏&#xff0c;目标是移动和合并数字&#xff0c;以达到2048。 1. 实现效果 Python实现2048小游戏 2. 游戏规则 简单地理解一下规则 基本规则&#xff1a; 4x4棋盘&#xff0c;每个格可包含一个2的倍数的数字&#xff0c;初始时为空&#xff0c;表示0。…

基于树莓派3B+的简易智能家居小项目(WiringPi库 + C语言开发)

github主页&#xff1a;https://github.com/snqx-lqh 本项目github地址&#xff1a;https://github.com/snqx-lqh/RaspberryPiSmartHome 硬件开源地址&#xff1a;https://oshwhub.com/from_zero/shu-mei-pai-kuo-zhan-ban 欢迎交流 树莓派智能家居项目&#xff0c;学习树莓派的…

MacOS安装MySQL数据库和Java环境以及Navicat

安装MySQL 去官网下载&#xff1a;MySQL 下载好后安装&#xff0c;在设置里往下滑&#xff0c;出现了这样&#xff0c;就代表安装成功了 接下来配置环境&#xff1a; 首先在我们的设备上找到终端并打开,输入 vim ~/.bash_profile(注意vim后面的空格)&#xff0c;输入完成后点击…