[论文笔记]Representation Learning with Contrastive Predictive Coding

引言

今天带来论文 Representation Learning with Contrastive Predictive Coding的笔记。

提出了一种通用的无监督学习方法从高维数据中提取有用表示,称为对比预测编码(Contrastive Predictive Coding,CPC)。使用了一种概率对比损失, 通过使用负采样使模型捕获潜在空间中的有用信息。

为了简单,下文中以翻译的口吻记录,比如替换"作者"为"我们"。

1. 总体介绍

从带标签数据中以端到端的方式学习高层表示是AI领域成功的应用之一,但仍存在许多挑战,例如数据效率、鲁棒性或泛化能力。无监督学习是通往鲁棒且通用表示学习的基石。

尽管无监督学习很重要,但它尚未取得类似于监督学习的突破。无监督学习中最常见的策略之一是预测未来的、缺失的或上下文信息。最近无监督学习的研究成果通过预测相邻词来学习单词表示。我们假设这些方法之所以有效,部分原因是预测相关值的上下文通常有条件依赖于相同的共享高级隐含信息。通过将此视为一个预测问题,我们自动推断出与表示学习相关的这些特征。

本篇工作提出以下三点:

  1. 将高维数据压缩到一个更紧凑的潜在嵌入空间中,在此空间中,条件预测更容易建模。
  2. 在这个潜在空间中使用强大的自回归模型来进行多步预测。
  3. 借鉴噪声对比估计来构建损失函数,与学习词嵌入的方法类似,使整个模型能端到端地训练。

得到的模型,CPC,可以应用于图像、语言、NLP等多种不同的数据模态。

2. 对比预测编码

2.1 动机和直觉

我们模型背后的主要直觉是学习表示,这些表示编码了高维信号不同部分之间潜在的共享信息。同时,它丢弃了更局部的低级信息和噪声。在时间序列和高维建模中,使用下一步预测的方法利用了信号的局部平滑性。当预测更远的未来时,共享信息的量会变得更低,模型需要推断更多全局结构。

预测高维数据的挑战之一是单峰损失函数,比如均方误差和交叉熵,并不十分有用,且通常需要强大的条件生成模型来重建数据中的每一个细节,这些模型的计算量很大,且在建模数据 x x x中的复杂关系时常常浪费能力,同时经常忽略上下文 c c c。例如,图像可能包含成千上万的比特信息,而高层隐变量(例如类别标签)所包含的信息则少得多(1024个类别只需10比特)。这表明直接建模 p ( x ∣ c ) p(x|c) p(xc)可能并不是提取 x x x c c c之间共享信息的最佳选择。

在预测未来信息时,我们将目标 x x x(未来)和上下文 c c c(现在)编码为紧凑的分布式向量表示,以最大程度地保留原始信号 x x x c c c 的互信息,定义为:
I ( x ; c ) = ∑ x , c p ( x , c ) log ⁡ p ( x ∣ c ) p ( x ) (1) I(x;c) = \sum_{x,c} p(x,c) \log \frac{p(x|c)}{p(x)} \tag 1 I(x;c)=x,cp(x,c)logp(x)p(xc)(1)
通过最大化编码表示之间的互信息,我们提取输入信号共有的隐含变量。

这个公式怎么来的,通过互信息定义可以写成:
I ( x ; c ) = ∑ x , c p ( x , c ) log ⁡ p ( x , c ) p ( x ) p ( c ) = ∑ x , c p ( x , c ) log ⁡ p ( x ∣ c ) p ( c ) p ( x ) p ( c ) I(x;c) = \sum_{x,c} p(x,c) \log \frac{p(x,c)}{p(x)p(c)} =\sum_{x,c} p(x,c) \log \frac{p(x|c)p(c)}{p(x)p(c)} I(x;c)=x,cp(x,c)logp(x)p(c)p(x,c)=x,cp(x,c)logp(x)p(c)p(xc)p(c)
消掉 p ( c ) p(c) p(c)即得到了公式(1)。

2.2 对比预测编码

image-20241228144750731

上图展示了对比预测编码模型的架构。首先,一个非线性编码器 g e n c g_{enc} genc将输入观测序列 x t x_t xt映射成一个潜在表示序列 z t = g e n c ( x t ) z_t=g_{enc}(x_t) zt=genc(xt)。接下来,一个自回归模型 g a r g_{ar} gar对潜在空间中的所有 z ≤ t z_{\leq t} zt进行总结,并生成一个上下文潜在表示 c t = g a r ( z ≤ t ) c_t=g_{ar}(z_{\leq t}) ct=gar(zt)

这里不直接用生成模型 p k ( x t + k ∣ c t ) p_k(x_{t+k}|c_t) pk(xt+kct)来预测未来的观测结果 x t + k x_{t+k} xt+k。相反,对密度比(density ratio)进行建模,该密度比保留了 x t + k x_{t+k} xt+k c t c_t ct之间的互信息(公式(1)),如下所示:
f k ( x t + k , c t ) ∝ p ( x t + k ∣ c t ) p ( x t + k ) (2) f_k(x_{t+k},c_t) \propto \frac{p(x_{t+k}|c_t)}{p(x_{t+k})} \tag 2 fk(xt+k,ct)p(xt+k)p(xt+kct)(2)
其中 ∝ \propto 表示成比例于,即乘以一个常数。密度比 f f f可以是非归一化的(不需要积分到1)。这里我们使用一个简单的对数双线性模型:
f k ( x t + 1 , c t ) = exp ⁡ ( z t + k T W k c t ) (3) f_k(x_{t+1},c_t) = \exp(z_{t+k}^T W_k c_t) \tag 3 fk(xt+1,ct)=exp(zt+kTWkct)(3)
也可以使用非线性网络。

通过使用密度比 f ( x t + k , c t ) f(x_{t+k},c_t) f(xt+k,ct)并使用编码器推断 z t + k z_{t+k} zt+k,减轻了模型对高维分布 x t x_t xt的建模负担。尽管我们无法直接评估 p ( x ) p(x) p(x) p ( x ∣ c ) p(x|c) p(xc),但我们可以使用来自这些分布的样本,从而允许我们使用基于将目标样本与随机采样的负样本进行比较的计数,例如噪声对比估计和重要性采样。

在提出的模型中, z t z_t zt c t c_t ct都可以作为下游任务的表示。如果需要来自过去的额外上下文,则可以使用自回归模型输出 c t c_t ct,比如语音识别,其中 z t z_t zt的感受野可能不足以捕获语音内容。在其他情况下,如果不需要额外的上下文, z t z_t zt可能更合适。如果下游任务需要对整个序列进行表示,比如分类任务,可以将 z t z_t zt c t c_t ct的表示在所有位置上进行池化。

任务类型的编码器和自回归模型都可以在本文提出的框架中使用。

2.3 InfoNCE损失和互信息估计

编码器和自回归模型都经过训练,以共同优化基于NCE的损失函数,我们将其称为InfoNCE。

给定一个包含 N N N个随机样本的集合 X = { x 1 , ⋯ , x N } X=\{x_1,\cdots,x_N\} X={x1,,xN},其中包含一个来自 p ( x t + k ∣ c t ) p(x_{t+k}|c_t) p(xt+kct)的正样本和 N − 1 N-1 N1个来自提议(proposal)分布 p ( x t + k ) p(x_{t+k}) p(xt+k)的负样本。我们希望使公式(2)的结果最大,可以写出对应的交叉熵损失如下:
L N = − ∑ X [ p ( x , c ) log ⁡ f k ( x t + k , c t ) ∑ x j ∈ X f k ( x j , c t ) ] = − E X [ log ⁡ f k ( x t + k , c t ) ∑ x j ∈ X f k ( x j , c t ) ] \begin{aligned} \mathcal L_\text{N} &= -\sum_X \left[ p(x,c) \log \frac{f_k(x_{t+k},c_t)}{\sum_{x_j \in X} f_k(x_j,c_t) } \right] \\ &=-\Bbb E_X \left[ \log \frac{f_k(x_{t+k},c_t)}{\sum_{x_j \in X} f_k(x_j,c_t) }\right] \end{aligned} LN=X[p(x,c)logxjXfk(xj,ct)fk(xt+k,ct)]=EX[logxjXfk(xj,ct)fk(xt+k,ct)]
优化此损失将导致 f k ( x t + k , c t ) f_k(x_{t+k},c_t) fk(xt+k,ct)估计公式(2)中的密度比。下面给出证明。

公式(4)中的损失是将正样本正确分类的交叉熵损失,其中 f k ∑ X f k \frac{f_k}{\sum_X f_k} Xfkfk是模型的预测结果。将此损失的最佳概率记为 p ( d = i ∣ X , c t ) p(d=i|X,c_t) p(d=iX,ct),其中 [ d = i ] [d=i] [d=i]表示样本 x i x_i xi是正样本。从条件分布 p ( x t + k ∣ c t ) p(x_{t+k}|c_t) p(xt+kct)而不是提议分布 p ( x t + k ) p(x_{t+k}) p(xt+k)中抽取样本 x i x_i xi的概率可以推导如下:
p ( d = i ∣ X , c t ) = p ( x i ∣ c t ) = p ( x i ∣ c t ) ∏ l ≠ i p ( x l ) ∑ j = 1 N p ( x j ∣ c t ) ∏ l ≠ j p ( x l ) = p ( x i ∣ c t ) p ( x i ) p ( x i ) ∏ l ≠ i p ( x l ) ∑ j = 1 N p ( x j ∣ c t ) p ( x j ) p ( x j ) ∏ l ≠ j p ( x l ) = p ( x i ∣ c t ) p ( x i ) p ( X ) ∑ j = 1 N p ( x j ∣ c t ) p ( x j ) p ( X ) = p ( x i ∣ c t ) p ( x i ) ∑ j = 1 N p ( x j ∣ c t ) p ( x j ) (5) \begin{aligned} p(d=i|X,c_t) &= p(x_i|c_t) \\ &= \frac{ p(x_i|c_t)\prod_{l \neq i} p(x_l) }{\sum_{j=1}^N p(x_j|c_t) \prod_{l \neq j} p(x_l) } \\ &= \frac{ \frac{p(x_i|c_t)}{p(x_i)} p(x_i) \prod_{l \neq i} p(x_l) }{\sum_{j=1}^N \frac{p(x_j|c_t)}{p(x_j)} p(x_j) \prod_{l \neq j} p(x_l) } \\ &= \frac{ \frac{p(x_i|c_t)}{p(x_i)} p(X) }{\sum_{j=1}^N \frac{p(x_j|c_t)}{p(x_j)} p(X) } \\ &= \frac{ \frac{p(x_i|c_t)}{p(x_i)}}{\sum_{j=1}^N \frac{p(x_j|c_t)}{p(x_j)}} \\ \end{aligned} \tag 5 p(d=iX,ct)=p(xict)=j=1Np(xjct)l=jp(xl)p(xict)l=ip(xl)=j=1Np(xj)p(xjct)p(xj)l=jp(xl)p(xi)p(xict)p(xi)l=ip(xl)=j=1Np(xj)p(xjct)p(X)p(xi)p(xict)p(X)=j=1Np(xj)p(xjct)p(xi)p(xict)(5)
来解释下这个式子,这里假设 x i x_i xi是正样本,因此是从 p ( x t + k ∣ c t ) p(x_{t+k}|c_t) p(xt+kct)采样出来的,而其他 l ≠ i l\neq i l=i是从 p ( x t + k ) p(x_{t+k}) p(xt+k)所采样出来的。这个式子表示给定上下文 c t c_t ct和数据 X X X x i x_i xi是正样本的概率是多少。

我们看上式中第二个等式,分子表示 x i x_i xi是正样本的概率乘以其他 x l x_l xl( l ≠ i l\neq i l=i)是负样本的概率;分母表示正样本可能为 X X X中任何一个样本的概率之和。

我们第三个式子是构建整个样本的联合概率分布 p ( X ) p(X) p(X),它是一个常量。我们可以把它约掉得到最后一个等式。

可以发现分子和分母都简化为公式(2)中的密度比。公式(4)中 f ( x t + k , c t ) f(x_{t+k},c_t) f(xt+k,ct)的最优值与 p ( x t + k ∣ c t ) p ( x t + k ) \frac{p(x_{t+k}|c_t)}{p(x_{t+k})} p(xt+k)p(xt+kct)成正比,与负样本的数量 N − 1 N-1 N1的选择无关。

我们将这个最优值代回公式(4)并将 X X X分割为正样本和负样本 X neg X_\text{neg} Xneg,得到:
L N opt = − E X log ⁡ [ p ( x t + k ∣ c t ) p ( x t + k ) p ( x t + k ∣ c t ) p ( x t + k ) + ∑ x j ∈ X neg p ( x j ∣ c t ) p ( x j ) ] = E X log ⁡ [ 1 + p ( x t + k ) p ( x t + k ∣ c t ) ∑ x j ∈ X neg p ( x j ∣ c t ) p ( x j ) ] ≈ E X log ⁡ [ 1 + p ( x t + k ) p ( x t + k ∣ c t ) ( N − 1 ) ] = E X log ⁡ [ p ( x t + k ∣ c t ) + ( N − 1 ) p ( x t + k ) p ( x t + k ∣ c t ) ] ≥ E X log ⁡ [ p ( x t + k ) p ( x t + k ∣ c t ) N ] = E X log ⁡ [ p ( x t + k ) p ( x t + k ∣ c t ) ] + log ⁡ N = − I ( x t + k , c t ) + log ⁡ ( N ) \begin{aligned} \mathcal L_\text N^\text{opt} &= -\Bbb E_X \log \left[ \frac{\frac{p(x_{t+k}|c_t)}{p(x_{t+k})}}{\frac{p(x_{t+k}|c_t)}{p(x_{t+k})} + \sum_{x_j \in X_\text{neg}}\frac{p(x_j|c_t)}{p(x_j)} } \right] \\ &= \Bbb E_X \log \left[ 1 + \frac{p(x_{t+k})}{p(x_{t+k}|c_t)} \sum_{x_j \in X_\text{neg}}\frac{p(x_j|c_t)}{p(x_j)}\right] \\ &\approx \Bbb E_X \log \left[ 1 + \frac{p(x_{t+k})}{p(x_{t+k}|c_t)} (N-1) \right] \\ &= \Bbb E_X \log \left[ \frac{p(x_{t+k}|c_t) + (N-1)p(x_{t+k})}{p(x_{t+k}|c_t)} \right] \\ &\geq \Bbb E_X \log \left[ \frac{p(x_{t+k})}{p(x_{t+k}|c_t)} N\right] \\ &= \Bbb E_X \log \left[ \frac{p(x_{t+k})}{p(x_{t+k}|c_t)} \right] + \log N \\ &= -I(x_{t+k},c_t) + \log (N) \end{aligned} LNopt=EXlog p(xt+k)p(xt+kct)+xjXnegp(xj)p(xjct)p(xt+k)p(xt+kct) =EXlog 1+p(xt+kct)p(xt+k)xjXnegp(xj)p(xjct) EXlog[1+p(xt+kct)p(xt+k)(N1)]=EXlog[p(xt+kct)p(xt+kct)+(N1)p(xt+k)]EXlog[p(xt+kct)p(xt+k)N]=EXlog[p(xt+kct)p(xt+k)]+logN=I(xt+k,ct)+log(N)
因此 I ( x t + k , c t ) ≥ log ⁡ ( N ) − L N opt I(x_{t+k},c_t) \geq \log (N) -\mathcal L_\text N^\text{opt} I(xt+k,ct)log(N)LNopt。我们通过这种方式评估 c t c_t ct x t + k x_{t+k} xt+k之间的互信息,最小化InfoNCE损失 L N \mathcal L_\text N LN最大化了互信息的下界,随着 N N N的增大,它也变得更加紧密。上式是怎么来的,讲一下个人的浅见,如有不对,欢迎指出。

第三个等式(约等于)是怎么来的,假设 p ( x j ∣ c t ) ≈ p ( x j ) p(x_j|c_t) \approx p(x_j) p(xjct)p(xj)

第五个等式因为 p ( x t + k ∣ c t ) ≥ p ( x t + k ) p(x_{t+k}|c_t) \geq p(x_{t+k}) p(xt+kct)p(xt+k)

总结

⭐ InfoNCE中的Info指的是互信息,目标是在学习过程中最大化互信息。InfoNCE在给定一个正样本和一组互样本的情况下,最大化正样本和一组负样本得分之间的对比,让模型能更好的学习数据的表示。

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

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

相关文章

Apache PDFBox添加maven依赖,pdf转成图片

要使用Apache PDFBox将PDF文件转换为图片,并将其添加到Maven项目中,您可以按照以下步骤操作: 1. 添加Maven依赖 在您的pom.xml文件中添加Apache PDFBox的依赖。请确保使用最新版本的PDFBox库。截至2025年,以下是推荐的配置&…

微服务架构下的慢请求排查与优化策略

目录 一、分析请求路径 二、检查日志 三、进行时序分析 四、检查资源消耗 五、检查并发处理能力 六、检查网络连接 七、从根本上使用服务治理的方式解决问题 八、结语 在当今的数字化时代,企业为了应对快速变化的市场需求和日益增长的用户基数,纷…

H7-TOOL固件2.27发布,新增加40多款芯片脱机烧录,含多款车轨芯片,发布LUA API手册,CAN助手增加负载率,错误状态信息检测

H7-TOOL详细介绍(含操作手册):H7-TOOL开发工具,1拖4/16脱机烧录,高速DAPLINK,RTOS Trace,CAN/串口助手, 示波器, RTT等,支持WiFi,以太网,高速USB和手持 - H7-…

xdoj-字符串-556,为什么字符不能被正常读入

目录 题目 代码 测试用例 the input the correct output 问题发现过程阐述 如果把line16中的数组大小11换成line17中的10 case 1 case 2 case 3 如果数组开成11 case4 代码分析 问题描述 Question1 Question2 题目 题目:连续数字字符串提取 问题描述…

LeetCode-有效的括号(020)

一.题目描述 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的…

Dubbo 关键知识点解析:负载均衡、容错、代理及相关框架对比

1.Dubbo 负载均衡策略? Dubbo 是一个分布式服务框架,它提供了多种负载均衡策略来分发服务调用。在 Dubbo 中,负载均衡的实现是基于客户端的,即由服务消费者(Consumer)端决定如何选择服务提供者&#xff08…

Git 入门(一)

git 工作流如下: 命令如下: clone(克隆): 从远程仓库中克隆代码到本地仓库checkout (检出):从本地仓库中检出一个仓库分支然后进行修订add(添加): 在提交前先将代码提交到暂存区com…

【C语言】可移植性陷阱与缺陷(五): 移位运算符

在 C 语言中,移位运算符(如左移 << 和右移 >>)是对整数的二进制位进行操作的重要工具。然而,使用这些运算符时也存在一些可移植性陷阱和缺陷,特别是在处理不同大小和字节序的整数时。本文探讨一些关于移位运算符在C语言中的可移植性问题,以及如何处理这些问题…

ChatGPT 是通用人工智能吗

ChatGPT 目前并不是通用人工智能&#xff08;AGI, Artificial General Intelligence&#xff09;。它是一种专用人工智能&#xff08;Narrow AI&#xff09;&#xff0c;具体来说是一种基于大规模语言模型&#xff08;如 GPT-4&#xff09;的生成式人工智能&#xff0c;专注于处…

【网络安全 | 漏洞挖掘】JS Review + GraphQL滥用实现管理面板访问

未经许可,不得转载。 正文 在映射目标范围后,我发现了一个用于管理的控制台界面,但没有注册功能。 于是我开始尝试: 1、模糊测试注册端点 -> 失败 2、在请求中将登录替换为注册 -> 再次失败 尝试均未奏效后,我决定冷静下来,重新思考方法并利用技术手段。 我观察…

perf:对hutool的BeanUtil工具类做补充

分享一个自定义的BeanUtil&#xff0c;继承的是hutool的工具类&#xff0c;然后自己扩充了几个方法&#xff1b; 1、实现了两个对象覆盖非空属性的功能&#xff08;经常使用&#xff09;&#xff0c;不需要设置CopyOptions&#xff1b; 2、两个对象&#xff0c;对指定前缀的属…

Elasticsearch Serverless中的数据流自动分片深度解析

Elasticsearch Serverless中的数据流自动分片深度解析 一、Elasticsearch Serverless概述 1. 什么是Elasticsearch Serverless Elasticsearch Serverless是一种云端全托管的Elasticsearch服务&#xff0c;它基于云原生Serverless技术架构&#xff0c;提供自动弹性和完全免运…

模型训练二三事:参数个数、小批量、学习率衰减、输入形状

目录 获取torch参数总数 方法一&#xff1a;使用torch.nn.Module的parameters()方法 方法二&#xff1a;使用state_dict()方法 迷你batch 什么是Mini-Batch&#xff1f; 如何在PyTorch中使用Mini-Batch&#xff1f; 不指定batchsize 没有标签ytrain 即使没有标签&…

gitlab高级功能之 CICD Steps

CICD Steps 1. 介绍2. 定义 Steps2.1 Inputs2.2 Outputs 3. Using steps3.1 Set environment variables3.2 Running steps locally 4. Scripts5. Actions5.1 已知的问题 6. 表达式7. 实操7.1 单个step7.2 多个step7.3 复用steps7.4 添加output到step7.5 使用远程step 1. 介绍 …

开源数据集成平台白皮书重磅发布《Apache SeaTunnel 2024用户案例合集》!

2025年新年临近&#xff0c;Apache SeaTunnel 社区用户案例精选&#x1f4d8;也跟大家见面啦&#xff01;在过去的时间里&#xff0c;SeaTunnel 社区持续成长&#xff0c;吸引了众多开发者的关注与支持。 为了致谢一路同行的伙伴&#xff0c;也为了激励更多人加入技术共创&…

第六十四章 假脱机设备 - 使用 %SPOOL 打印

文章目录 第六十四章 假脱机设备 - 使用 %SPOOL 打印使用 %SPOOL 打印使用 Print 函数 第六十四章 假脱机设备 - 使用 %SPOOL 打印 使用 %SPOOL 打印 %SPOOL 实用程序菜单的选项 1 Print&#xff08;打印&#xff09;允许您在任何设备上打印 ^SPOOL 全局中的一个或多个文档&a…

Python:交互式物质三态知识讲解小工具

学着物理写着Python 以下是一个使用Python的Tkinter库实现的简单示例程序&#xff0c;通过图形界面展示并讲解固态、液态、气态的一些特点&#xff0c;代码中有详细的注释来帮助你理解各部分功能&#xff1a; 完整代码 import tkinter as tk from tkinter import ttk import …

选择IT驻场外包公司,要找有哪些资质的公司

在当今数字化快速发展的时代&#xff0c;IT驻场外包服务成为众多企业优化运营、提升竞争力的关键选择。无论是初创企业寻求技术起步支持&#xff0c;还是大型企业为降低成本、专注核心业务而将部分 IT 职能外包&#xff0c;IT 外包公司都扮演着至关重要的角色。然而&#xff0c…

多模态论文笔记——CogVLM和CogVLM2(副)

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细介绍多模态模型的LoRA版本——CogVLM和CogVLM2。在SD 3中使用其作为captioner基准模型的原因和优势。 文章目录 CogVLM论文背景VLMs 的任务与挑战现有方法及…

Scala 访问修饰符

Scala 访问修饰符 在编程语言中&#xff0c;访问修饰符是一种重要的语法元素&#xff0c;它用于控制类、对象、特质、接口、方法和变量的访问级别。Scala作为一种多范式编程语言&#xff0c;也提供了丰富的访问修饰符&#xff0c;以实现封装和隐藏内部实现细节。本文将详细介绍…