Contrastive Representation Learning 对比表征学习(二)关键成分

news2024/10/2 12:34:43

原文翻译自这里

关键成分

大量数据增强

给定一训练样本,在计算其相关损失之前通常需要数据增强技术为该样本添加噪声。适度的数据增强设定对于学习一个优秀的,泛化性好的嵌入特征是至关重要的。其在不改变语义信息的同时将些微变量引入到样本之中,以此鼓励模型去学习表征的主要部分。比如,SimCLR中的实验表明随机裁剪和随机颜色失真对于学习图像的视觉表征是至关重要的。

大 Batch Size

对于很多依赖 batch 内负样本的对比方法(如SimCLR,CLIP),它们能够成功的一个原因就是使用了大 batch size。只有当 batch size 足够大时,损失函数才能够覆盖足够多负样本,网络才能够学到能区分不同样本的重要表征。

复杂负样本挖掘

复杂的负样本应该具有与原始样本(anchor sample)不同的标签,但彼此的嵌入特征(embedding feature)需要尽可能的相似。在监督学习中,因为可以获取真实标签(ground truth),因此很容易区分任务专有的复杂负样本。比如当学习句式嵌入(sentence embedding)时,我们可以将标记为“矛盾”(contradiction)的句子对标记为复杂负样本对。

然而,当我们需要在无监督任务中操作时,对于复杂负样本的挖掘似乎成了一种trick。增加训练 batch size 或者 memory bank size 能够隐式得引入更多复杂负样本,但这可能导致对于大内存过度需求这一问题。

Chuang et al. (2020)对对比学习中的采样偏移现象进行了研究,并提出了去偏差损失。 在无监督中,我们是不知道真实标签的,因此可能存在误采样伪负样本的现象。这种采样偏差会极大的影响网络性能。
在这里插入图片描述

我们假设 anchor class c c c 的概率服从均匀分布 ρ ( c ) = η + \rho(c)=\eta^+ ρ(c)=η+,那么观测到其他类的概率为 η − = 1 − η + \eta^-=1-\eta^+ η=1η+.

  • 对于观测样本 x x x来说,其为正的概率为 p x + ( x ′ ) = p ( x ′ ∣ h x ′ = h x ) p_x^+(x^{'})=p(x^{'}|h_{x^{'}}=h_x) px+(x)=p(xhx=hx);
  • 其为负的概率为 p x − ( x ′ ) = p ( x ′ ∣ h x ′ ≠ h x ) p_x^-(x^{'})=p(x^{'}|h_{x^{'}}\neq h_x) px(x)=p(xhx=hx);

当我们采样 x − x^- x时,没有办法获取真正的 p x − ( x − ) p^-_x(x^-) px(x),因此存在某一概率 η + \eta^+ η+使得 x − x^- x错误的从锚类(anchor class) c c c中被采样。那么采样数据的实际分布就变成了:

p ( x ′ ) = η + p x + ( x ′ ) + η − p x − ( x ′ ) p(x^{'})=\eta^+p_x^+(x^{'})+\eta^-p_x^-(x^{'}) p(x)=η+px+(x)+ηpx(x)

通过简单的公式变换,我们可以去除损失中的偏差:

p x − ( x ′ ) = ( p ( x ′ ) − η + p x + ( x ′ ) ) / η − p_x^-(x^{'})=(p(x^{'})-\eta^+p_x^+(x^{'}))/\eta ^- px(x)=(p(x)η+px+(x))/η.

对于从 p p p中采样的 N N N个样本 { u i } i = 1 N \{u_i\}_{i=1}^N {ui}i=1N,以及从 p x + p_x^+ px+中采样的 M M M个样本 { v i } i = 1 M \{v_i\}_{i=1}^M {vi}i=1M,我们可以估计对比学习损失中分母的第二项的期望 E x − ∼ p x − [ e x p ( f ( x ) T f ( x − ) ) ] \mathbb{E}_{x^-\sim p_x^-}[exp(f(x)^Tf(x^-))] Expx[exp(f(x)Tf(x))]:

g ( x , { u i } i = 1 N , { v i } i = 1 M ) = m a x { 1 η − ( 1 N ∑ i = 1 N e x p ( f ( x ) T f ( u i ) ) − η + M ∑ i = 1 M e x p ( f ( x ) T f ( v i ) ) ) , e x p ( − 1 / τ ) } g(x,\{u_i\}_{i=1}^N,\{v_i\}_{i=1}^M)=max\{\frac{1}{\eta^-}(\frac{1}{N}\sum_{i=1}^Nexp(f(x)^Tf(u_i))-\frac{\eta^+}{M}\sum_{i=1}^Mexp(f(x)^Tf(v_i))), exp(-1/\tau)\} g(x,{ui}i=1N,{vi}i=1M)=max{η1(N1i=1Nexp(f(x)Tf(ui))Mη+i=1Mexp(f(x)Tf(vi))),exp(1/τ)}

τ \tau τ是温度系数,且 e x p ( − 1 / τ ) exp(-1/\tau) exp(1/τ)是期望 E x − ∼ p x − [ e x p ( f ( x ) T f ( x − ) ) ] \mathbb{E}_{x^-\sim p_x^-}[exp(f(x)^Tf(x^-))] Expx[exp(f(x)Tf(x))]的理论下界.

那么最终的去偏差后的对比损失为如下形式:

L d e b i a s N , M ( f ) = E x , { u i } i = 1 N ∼ p ; x + , { v i } i = 1 M ∼ p + [ − l o g e x p ( f ( x ) T f ( x + ) ) e x p ( f ( x ) T f ( x + ) ) + N g ( x , { u i } i = 1 N , { v i } i = 1 M ) ) ] L_{debias}^{N,M}(f)=\mathbb{E}_{x,\{u_i\}_{i=1}^N\sim p; x^+,\{v_i\}_{i=1}^M\sim p^+}[-log\frac{exp(f(x)^Tf(x^+))}{exp(f(x)^Tf(x^+))+Ng(x,\{u_i\}_{i=1}^N,\{v_i\}_{i=1}^M))}] LdebiasN,M(f)=Ex,{ui}i=1Np;x+,{vi}i=1Mp+[logexp(f(x)Tf(x+))+Ng(x,{ui}i=1N,{vi}i=1M))exp(f(x)Tf(x+))]

下面是对使用去偏差对比学习得到的表征使用可视化。
在这里插入图片描述

遵循以上描述,Robinson et al. (2021) 修改了采样概率,通过对概率 p x − ( x ′ ) p_x^-(x^{'}) px(x)加权来期望得到复杂的负样本。那么新的采样概率 q β ( x − ) q_\beta(x^-) qβ(x)就变成了:

q β ( x − ) ∝ e x p ( β f ( x ) T f ( x − ) ) ⋅ p ( x − ) q_\beta(x^-) \propto exp(\beta f(x)^Tf(x^-))\cdot p(x^-) qβ(x)exp(βf(x)Tf(x))p(x)

β \beta β是超参数。

通过使用重要性采样我们又可以对分母中第二项进行估计:

在这里插入图片描述

以下是计算NCE loss,debiased contrastive loss,和hard negative sample 的伪代码。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows环境下实现设计模式——备忘录模式(JAVA版)

我是荔园微风,作为一名在IT界整整25年的老兵,今天总结一下Windows环境下如何编程实现备忘录模式(设计模式)。 不知道大家有没有这样的感觉,看了一大堆编程和设计模式的书,却还是很难理解设计模式&#xff…

【使用ChatGPT自动化】批量转换.csv文件为.xlsx文件

第1次提问: 我:我想使用Python批量转换.csv文件为.xlsx文件,请你提供代码 它:好的,以下是使用Python批量转换.csv文件为.xlsx文件的代码: import os import glob import pandas as pddef csv_to_xlsx(pa…

MATLAB数值运算(六)

目录 实验目的 实验内容 原创代码,仅供参考,不要直接CV呀 ~_~ 实验目的 1)掌握定义符号对象和创建符号表达式的方法; 2)掌握符号运算基本命令和规则; 3)掌握符号表达式的运算法则以及符号矩阵…

A100 Jeston TX1TX2使用教程-接口说明

EdgeBox_Umate_A100是一款嵌入式人工智能计算机,能够为各类终端设备赋予人工智能的能力,降低终端智能的开发门槛。EdgeBox_Umate_A100搭载了移动处理器——NVIDIA Jetson TX1,并且兼容TX2,是最适合边缘计算的高性能平台。 A100 算…

【Javascript - 力扣每日一题】13. 罗马数字转整数

题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为…

【黑马2023大数据实战教程】VMWare虚拟机部署HDFS集群详细过程

文章目录 部署HDFS集群1.配置workers:2.配置hadoop-env.sh文件3.配置core-site.xml文件4.配置hdfs-site.xml文件准备数据目录分发Hadoop文件夹配置环境变量授权为hadoop用户格式化文件系统错误排查方法!! 视频:黑马2023 VMWare虚拟机部署HDFS集群 注意!这…

linux代码检测工具valgrind之内存检测memcheck

1、安装命令: $ sudo apt-get install valgrind 安装成功如下: 检测版本命令:$ valgrind --version 2、valgrind检测工具tool介绍 (1)Memcheck是一个内存错误检测器。 (2)Cachegrind是缓存…

C++语法(19)---- 模拟AVL树

C语法(18)---- set和map_哈里沃克的博客-CSDN博客https://blog.csdn.net/m0_63488627/article/details/130228232?spm1001.2014.3001.5501 目录 1.AVL树的概念 2.节点定义 3.AVL树的类实现 1.类定义 2.insert 1.全代码实现 2.思考角度 3.平衡因…

【Redis】Redis十大数据类型—哈希hash

介绍 Hash 是一个键值对(key - value)集合,其中 value 的形式入:value[{field1,value1},...{fieldN,valueN}]。Hash 特别适合用于存储对象。 Hash和String对象的区别 内部实现 Hash 类型的底…

SpringMVC 接收前端传递的参数

SpringMVC 接受前端传参 1、前端传参需要注意请求的Content-type, 主要使用的有两种: application/x-www-form-urlencodedapplication/json application/x-www-form-urlencoded是浏览器的默认编码格式 ,对于原生的form 表单提交参数,就是使用…

【大数据之Hadoop】十六、MapReduce之Join

1 Reduce Join Map端: 为来自不同表或文件的key/value对,打标签以区别不同来源的记录。然后用连接字段作为key,其余部分和新加的标志作为value,最后进行输出。 Reduce端: 在每一个分组当中将那些来源于不同文件的记录…

【剑指 offer】调整数组顺序使奇数位于偶数前面

✨个人主页:bit me👇 ✨当前专栏:算法训练营👇 调 整 数 组 顺 序 使 奇 数 位 于 偶 数 前 面 核心考点:数组操作,排序思想的扩展使用 描述: 输入一个整数数组,实现一个函数来调…

vue2数据响应式原理(3) 带你手写一个defineReactive响应式函数并理解其本质

然后 我们来学一下defineReactive函数 defineReactive其实是一个要声明的函数 基本都是作为一个响应式函数 因为vue的使用比较经典 因此 也成了 响应式的一个代表函数 而定义它的意义在于 defineProperty不好用 具体不好用在哪呢? 我们打开上文用到的项目 将output…

第六讲 循环结构

我们在写程序的时候,极有可能遇到需要重复执行某条指令或某些指令的场景,例如我们需要每隔1秒钟在屏幕上输出一次“hello, world”并持续输出一个小时。如下所示的代码可以完成一次这样的操作,如果要持续输出一个小时,我们就需要把…

Javaee spring jdbctemplate查询数据库,基于纯注解实现

为啥要用纯注解方式呢&#xff1f;因为xml中代码还是有点多&#xff0c;纯注解可以解决该问题 现在要做的很简单&#xff0c;就是用新建的SpringConfig这个类去替代xml 在测试类中加载核心配置类 SpringConfig类中 Configuratio Spring.xml配置类 ComponentScan <!--开…

Linux搭建Web服务器(三)——服务器编程基本框架以及事件处理模式

目录 0x01 服务器编程基本框架 0x02 两种高效的事件处理模式 Reactor 模式 Proactor 模式 模拟Proactor 模式 0x01 服务器编程基本框架 虽然服务器程序的种类繁多&#xff0c;但是其基本框架都是一样的&#xff0c;不同之处是在于处理逻辑。对于我们在这个服务器的搭建可以…

基于Jenkins实现Docker应用的持续集成与部署

先决条件 1. 服务器部署安装有docker 在docker应用开发中最常见的就是开发Dockerfile文件&#xff0c;可以使用代码仓库来管理它。 而在企业私有开发环境中是无法访问公有代码仓库&#xff08;如Github&#xff09;的。这时可以搭建私有代码仓库。 部署安装svn私有仓库 安…

GPT-4 验明真身的三个经典问题:快速区分 GPT-3.5 与 GPT-4

现在已经有很多 ChatGPT 的套壳网站&#xff0c;以下分享验明 GPT-4 真身的三个经典问题&#xff0c;帮助你快速区分套壳网站背后到底用的是 GPT-3.5 还是 GPT-4。 测试问题 1&#xff1a;What is tomorrow in relation to yesterday’s today&#xff1f;&#xff08;昨天的当…

《Shunted Transformer: Shunted Self-Attention》CVPR 2022 oral

论文链接&#xff1a;https://openaccess.thecvf.com/content/CVPR2022/papers/Ren_Shunted_Self-Attention_via_Multi-Scale_Token_Aggregation_CVPR_2022_paper.pdf 代码链接&#xff1a;https://github.com/OliverRensu/Shunted-Transformer​ 1. 动机 视觉转换器(ViT)模型…

vscode怎么对选定的代码格式化?ctrl+k,ctrl+f(格式化代码)

先选中代码&#xff1a; 然后按CTRL K 再按CTRLF 也可以先选择要格式化的代码块&#xff0c;ctrlshiftp&#xff0c;搜索format&#xff0c;然后第二个就是&#xff1a;