[论文笔记]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,一经查实,立即删除!

相关文章

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

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

Git 入门(一)

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

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

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

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年新年临近,Apache SeaTunnel 社区用户案例精选📘也跟大家见面啦!在过去的时间里,SeaTunnel 社区持续成长,吸引了众多开发者的关注与支持。 为了致谢一路同行的伙伴,也为了激励更多人加入技术共创&…

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

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

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

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

网络安全抓包

#知识点: 1、抓包技术应用意义 //有些应用或者目标是看不到的,这时候就要进行抓包 2、抓包技术应用对象 //app,小程序 3、抓包技术应用协议 //http,socket 4、抓包技术应用支持 5、封包技术应用意义 总结点:学会不同对象采用…

Innodisk iSMART V6使用说明_SSD还能用多久?已经读写了多少次数?……

Innodisk iSMART是一款SSD健康数据读取软件。它能轻松获取大部分SSD内部寄存器中的健康数据,并以简洁的图形界面展示给用户。在程序界面的顶部,是页面标签,点击页面标签就能切换到相应的页面。页面标签的下面是磁盘选择栏。点击磁盘编号&…

网络编程原理:回显服务器与客户端通信交互功能

文章目录 路由器及网络概念网络通信基础TCP/IP 五层协议封装和分用封装分用 网络编程(网络协议)UDP类 API使用实现回显通信程序回显服务器(UDP代码)回显客户端(UDP代码) TCP API使用回显服务器(TCP代码)回显客户端(TCP代码) 路由器及网络概念 网络发展是…

设计模式 创建型 建造者模式(Builder Pattern)与 常见技术框架应用 解析

单例模式(Singleton Pattern),又称生成器模式,是一种对象构建模式。它主要用于构建复杂对象,通过将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建出具有不同表示的对象。该模式的核心思想是将…

【C++】P1428 小鱼比可爱

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目说明题目输入格式题目输出格式样例**输入样例****输出样例** 题目解析 💯解法分析我的做法代码解法说明时间复杂度 老师的做法代码解法说明总结时间复杂度 …

maven之插件调试

当使用maven进行项目管理的时候,可能会碰到一些疑难问题。网上资料很少,可能会想着直接调试定位问题。这里以maven-compiler-plugin为例: (1)准备maven-compiler-plugin源码 进入maven 官网-》Maven Plugins-》找到对…

蓝桥杯(Java)(ing)

Java前置知识 输入流: (在Java面向对象编程-CSDN博客里面有提过相关知识------IO流) // 快读快写 static BufferedReader in new BufferedReader(new InputStreamReader(System.in)); static BufferedWriter out new BufferedWriter(new…

【C++】深入理解C语言中的特殊字符处理与问题分析优化

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目:B2090 年龄与疾病输入格式输出格式输入输出样例 💯初始代码分析与问题排查问题点分析 💯修正后的代码与优化修正与优化要点 &#…

电商Google广告:2025年提升转化率的5种策略

展望 2025 年,Google 广告领域将迎来一系列显著变化,这些趋势对于提升广告转化率至关重要,值得我们提前关注与布局。 智能化程度持续加深,用户搜索习惯愈发精细,广告格式推陈出新,视频广告势头正猛...那么…

【pytorch练习】使用pytorch神经网络架构拟合余弦曲线

在本篇博客中,我们将通过一个简单的例子,讲解如何使用 PyTorch 实现一个神经网络模型来拟合余弦函数。本文将详细分析每个步骤,从数据准备到模型的训练与评估,帮助大家更好地理解如何使用 PyTorch 进行模型构建和训练。 一、背景 …

编程入门(2)-2024年 RAD Studio version 12发布综述

随着2024年即将画上句号,我想借此机会回顾一下我们在这一年中发布的一些Embarcadero产品、行业趋势,并感谢我们尊贵的客户们对我们的产品一如既往的支持。这一年对我们来说充满了激动人心的变化和发展,我们非常高兴能与您一起踏上这段旅程。 …

visual studio 安全模式

一、安全模式: 在 Visual Studio 中,安全模式是一种启动方式,允许你在禁用所有扩展和自定义设置的情况下启动 Visual Studio。这个模式可以帮助排除插件或扩展引起的问题,特别是在 Visual Studio 无法正常启动时。 二、安全模式下…

RocketMQ消费者如何消费消息以及ack

1.前言 此文章是在儒猿课程中的学习笔记,感兴趣的想看原来的课程可以去咨询儒猿课堂 这篇文章紧挨着上一篇博客来进行编写,有些不清楚的可以看下上一篇博客: https://blog.csdn.net/u013127325/article/details/144934073 2.broker是如何…