对比学习笔记

这里写目录标题

  • 什么是对比学习
  • 计算机视觉中的对比学习
  • 对比学习在NLP中的应用

什么是对比学习

对比学习是在没有标签的前提下学习样本之间的是否相似,其实和二分类比较相似,判断两个图像是不是属于同一个类别。换句话来说就是把相近的分布推得更近,不相近的分布推得更远。对比学习是自监督学习的一种。自监督学习有着自己给没有标签添加标签的能力,置信度最高的标签将会成为下一轮的GT从而来监督模型训练。在对比学习中就是给让模型根据特征的相似程度来将输入标记成正样本或者是负样本。他和半监督和无监督有着明显的不同,这里需要稍微注意一下。

计算机视觉中的对比学习

简单来说,对比学习的目的是为了从原数据中提取出更加高质量和细致的特征,然后去做下游任务。对比学习可以刺激模型从数据中提取更多更细的特征。首先要做的是生成正样本和负样本。我们输入进去的图像我们叫做anchor, 这里的正样本就是通过输入数据进行增强得到的图像。负样本可以是任意其他在数据集中的图像。虽然视觉上经过增强的图像和原来输入的图像已经有了明显的区别,但是图像本身的信息是没有发生改变的。 将经过增强的图像输入进encoder中得到一个低纬度的向量,这个encoder可以是transformer或者是resnet等。将获得的特征经过mlp映射之后,比较两者之间的相似度即可。 为什么要用mlp映射之后在比较呢? 添加mlp是为了让特征更具有针对性,更加适合某一个特定的任务。从encoder中提取出来的特征往往泛化能力更好,但是针对性会相对差一些。因为需要通过比较来学习图像之间的相似和不同,对比学习对负样本以及batch size 相对比较敏感,如果学习的时候负样本很少,或者没有,会使得模型崩塌,偏离学习目标。如果batch size较少,则每一个batch的对比次数较少,会不太容易收敛。这里所说的负样本指出输入意外的所有样本。 例如如果一个batch 中有512个样本,每一个就会发成511次比较。

对比学习的学习objective,有很多不同的藐视,但是最基本的是Max margin Contrastive Loss。这个损失就是最大化不同样本之间的距离,最小化相同样本之间距离。
在这里插入图片描述
还有一个常见的损失叫做Triplet Loss,本质上和上述的损失原理差不多,不同在于上述损失没有将anchor考虑进来,Triplet Loss考虑进来了。 Triplet Loss 表示为:
在这里插入图片描述
从上述可以看出,对比学习中,负样本的重要性,但是早期也有模型声称可以不使用负样本进行对比学习。这个模型叫BYOL,前面的结构都差不多。和之前不同的是,这个模型不在比较输出两个向量的相似度了,然后将一个值看成预测值,一个看作GT,将这个任务变成了有点像回归任务,让这两个值之间的loss最小。 具体示意图:
在这里插入图片描述
根据后续的一些研究发现,这种方式之所以能行,是因为在映射的时候使用了batch normalization。因为BN它考虑的是整个batch里所有的样本,如果Batch够大的话,在计算的时候,也考虑进了负样本的均值和方差。所以让学习的效果很好。虽然表面上看来确实没有使用负样本,但是在后续计算的时候也考虑了负样本。

对比学习在NLP中的应用

NLP中的不相同的句子可能会表示一样的意思,同样的句子可能会表示不同的意思。 SIMCSE提供了一个简单的思想,那就是添加dropout. 因为dropout会随机的惩罚模型,也就是会随机的扔掉一些特征。 从另一个角度思考也就是,dropout 提供了一个集成模型(因为每一次dropout之后,模型的参数都会发生改变)。那么同一个句子就会产生不同的输出,但是归根揭底,不同的输出表示的确实同一句话的意思。那么我们就可以把通过dropout输出的看作是anchor的正样本。负样本和之前视觉中的定义差不多。

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

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

相关文章

PyQt5中的QGraphicsView()

文章目录 1. 简介2. 一个简单的示例2. 加载一幅图片3. 常用方法示例 1. 简介 QGraphicsView是PyQt5中用于显示图形场景的小部件,它提供了许多常用的方法来控制视图的行为和属性。下面是一些常用的QGraphicsView方法: setScene(scene): 设置要显示的场景…

工程师工具箱系列(3)Arthas

文章目录 工程师工具箱系列(3)Arthas安装与准备Arthas插件使用场景查看某个变量值ognl方式调用Bean方法tt(TimeTunel)方式调用Bean的方法ognl调用带参数方法 资源总览 工程师工具箱系列(3)Arthas Java诊断利器 安装与准备 window…

数据库面试总结

数据库相关 mysql使用的函数 字符相关: concant() 连接字符 trim()去除字符的首尾空格 space(n) 返回n个空格 char_length() 返回字符的个数 ucase()/upper()将字符串 s 的所有字母变成大写字母 lcase()/lower() 将字符串 s 的所有字母变成小写字母 substr/substring/mid(s, …

做私域,朋友圈到底该怎么发?

说到做私域,很多人都会问:朋友圈该怎么发?相信大家的朋友圈早已经被各种广告攻占了,很多也都被大家屏蔽了。但如果要做私域,单纯发广告是行不通的,可是现在依然有很多人,认为做私域就是狂发朋友…

python内置类bytearray()详解

bytearray 是 Python 的一个内置类,它提供了一个可变序列的字节数组。 bytearray 数组的元素必须是0-255之间的整数,这些整数对应于ASCII字符集中的数字。下面着张图是部分ASCII字符: bytearray 是可变的,可修改其内容&#xff0c…

百度云防护502 Bad Gateway原因总结和处理方法

最近,随着原百度云加速用户新接入百度云防护后,很多站长反馈网站打不开,出现了502 Bad Gateway的情况。 为此,百度云这里给大家总结下,出现502的大概几个原因: 1.服务器防火墙拦截了百度云防护的IP节点请求…

水库大坝安全监测预警系统解决方案介绍

一、方案背景 随着社会的快速发展,水库大坝作为重要的水利工程设施,承载着防洪、灌溉、发电等多重功能。然而水库大坝的安全问题也日益凸显,一旦发生事故,后果将不堪设想,因此,建立一套高效、准确的水库大…

YOLO使用笔记

下载oss命令工具。 在OSS.exe文件下打开Power Shell, 输入指令: ./oss login之后输入用户名和密码。 选择将你想要上传的文件导入: ./oss cp {yourdir} oss://进入服务器实例中,打开终端下载数据 同样输入:oss login 进行登录。 登录成功…

vs-qt中无法加载qsqlite驱动,但是单独新建demo测试却又是正常的。。。

开发环境: Vs2015 + qt5.12 背景: 接手了一个项目,可以编译过去,也可以运行,, 但是登录一直失败,,但是数据库文件也是正常的。。。 最主要的是环境和同事的是一样的,,,但是他那边可以加载成功,我这边不可以。。 后来单独在vs中创建了一个demo,用来测试QSqlData…

【AIGC】Mac Intel 本地 LLM 部署经验汇总(CPU Only)

书接上文,在《【AIGC】本地部署 ollama(gguf) 与项目整合》章节的最后,我在 ollama 中部署 qwen1_5-14b-chat-q4_k_m.gguf 预量化模型,在非 Stream 模式下需要 89 秒才完成一轮问答,响应速度实在是太慢,后续需要想办法…

C++进阶 | [3] 续 | 搜索二叉树的两种模型

摘要:搜索二叉树的效率,搜索二叉树的两种搜索模型及应用举例 前面一片文章学习了并实现了搜索二叉树,这篇将从实际应用的角度进一步介绍搜索二叉树。 1. 搜索二叉树的效率 平衡搜索二叉树 BST的查找效率是 O(N)。 分析:如右图所示…

WWW服务器搭建(2)——Apache服务器配置与管理

一、Apache简介 1.1 关于Apache Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的Web服务器,可以在大多数计算机操作系统中运行,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。…