Token Lab搜索

← 论文资料库
表示与对比学习 / 2018

CPC:通过辨认正确未来学习表示

把对比预测看作分类问题,并检查负样本采样隐含的假设。

Representation Learning with Contrastive Predictive Coding · van den Oord, Li & Vinyals · arXiv:1807.03748

Token Lab 原创学习解读 · 来源核对 2026-10-25 · 区分论文主张与合成教学例子。

01 · 论文提出了什么

CPC 利用自回归上下文,通过对比目标预测未来潜在表示。论文探索语音、图像、文本与强化学习环境。互信息解释依赖采样构造及目标假设。

一手来源:论文摘要 ↗
学习指南与本课目录LEARNING CONTRACT

理解 → 实现 → 研究

目标:解释本课机制、复现一个例子、测试一个失败案例。读完不自动代表掌握。

  • 理解层:写明假设、形状/单位和一个反例。
  • 实现层:复算数值例子并检查边界。
  • 研究层:在匹配预算下比较一个替代方法。

02 · 核心机制

Text / 原始公式
L = −log [exp(s₊/τ) / Σⱼ exp(sⱼ/τ)]
∂L/∂sⱼ = (pⱼ−1[j=+])/τ
Under InfoNCE assumptions: I(X;C) ≥ log N − L_N

学习器不必重建每个像素或波形样本,也可以辨别合理后续。上下文应保留对这种辨别有用的信息。负样本定义了备选对象;分布不合适时,捷径也能解决分类任务,却没有学到预期表示。上式下界中的 N 包括正候选。

符号与直觉为教学解释,完整假设及实现细节请对照原论文方法。

机制图与逐步推导

编码观察 → 汇总上下文 → 为未来正例与负例评分 → 对比损失 → 编码器
原创机制示意图,按从上到下顺序阅读。 SVG ↓
符号与假设
符号含义
s₊正候选匹配分数
τ严格为正的温度
N包括正例在内的候选总数
  1. 将损失改写为 −s₊/τ+logΣexp(sⱼ/τ)。log-sum-exp 求导得到 pⱼ/τ,正例另有 −1/τ。
  2. 分数 [2,1,0,−1]、τ 时概率约为 [0.643914,0.236883,0.087144,0.032059],分数梯度为 [−0.356086,0.236883,0.087144,0.032059]。
  3. 梯度和为零,因为给所有分数加同一常数不会改变分布。可以将此不变性作为数值实现检查。
实验检查点

比较解析梯度与中心差分,检查负采样器是否泄漏来源身份。

LOCAL / SYNTHETIC / INTERACTIVE

改变一个变量,解释结果为什么变。

原创教学计算,并非论文 benchmark 复现。条形在面板内相对缩放,具体数值与单位以标注为准。

04 · 手算一个例子

原创算例:四个候选分数为 [2,1,0,−1],第一个为正例,τ。正例概率约 0.644,损失约 0.440。log 4−0.440≈0.946 只是下界表达式示例;一行手选分数不能估计总体互信息。温度降低使分布更尖锐,也改变梯度尺度。

05 · 设计实验

先用有限差分检查分数梯度。再故意加入假负样本,观察其排斥梯度。编码器 POC 应在构造样本对之前按来源身份划分数据,记录负采样器,并用留出 probe 评价冻结表示。比较下游指标,而不只对比损失。

研究交付物

写出一个假设,保存配置与原始结果,提出替代解释,只报告证据支持的结论。关联实验是本地起点,不是完整论文复现。

打开关联课程/实验 →

06 · 局限与审稿式追问

分析提醒:辨别任务变容易可能是捷径更好,而不是语义更好。更多负样本可能引入假负样本并改变优化。不能把玩具 log N 减损失标为真实模型实测信息量。

移除假负样本降低损失,为什么仍不能证明检索更好?

即使 embedding 不变,删除分母项也会立即简化分类任务。检索质量需要独立固定候选集与留出相关性标签检验。

07 · 阅读原文

第 2.3 节与附录 A.1;在每个概率旁写出采样分布。

年份采用首次 arXiv 投稿年份。未锁定版本的链接随修订变化,复现报告请记录准确版本。此处 DeepSeek-R1 明确固定为 v1。

继续学习本主题

MATHEMATICAL REVIEW · 2026-10-26

假设、参考实现与验收

互信息下界使用总体期望 InfoNCE 损失:正样本来自联合分布,独立负样本来自对应边缘分布。单行损失不是互信息估计;温度必须为正。

复核所示公式、中英解释及声明滑块范围。代码复现标量教学计算,不是论文训练系统。

运行前:预测一个边界情况

先用有限差分检查分数梯度。再故意加入假负样本,观察其排斥梯度。编码器 POC 应在构造样本对之前按来源身份划分数据,记录负采样器,并用留出 probe 评价冻结表示。比较下游指标,而不只对比损失。

提示:隔离假设

固定基线输入,只改变一个参数或边界;同时比较数值与声明单位。单例通过仅验证该样例。

最小可运行算例

将算例及所链接模块保存在同一目录。使用 Node.js 22 或更高版本,然后运行 node contrastive-predictive-coding.mjs. 无需第三方运行依赖。

import {paperCalc} from './paper-core.mjs';
const result=paperCalc("cpc",1);
console.log(result);
参考输出——先预测再展开
{
  "labels": [
    "Positive",
    "Negative 1",
    "Negative 2",
    "Negative 3"
  ],
  "values": [
    0.6439142598879724,
    0.23688281808991013,
    0.08714431874203257,
    0.03205860328008499
  ],
  "unit": "probability",
  "extra": 0.4401896985611953,
  "extraLabel": "Loss (nats)"
}

测试与迁移

先用有限差分检查分数梯度。再故意加入假负样本,观察其排斥梯度。编码器 POC 应在构造样本对之前按来源身份划分数据,记录负采样器,并用留出 probe 评价冻结表示。比较下游指标,而不只对比损失。

在下方笔记记录输入、代码版本、期望值和实测值;再构造违反上述假设的反例,解释原结论为何不再成立。

下载完整代码包(.tar.gz) · 完整参考代码与回归检查

预测、检验与证据记录

展开答案前先预测一个结果;练习后记录差异和迁移测试。记录仅存本地,在不同语言版本间共用。

打开记录/导出/清除 →

数学复核范围逐篇记录,不代表完成论文实证复现;可在笔记中记录疑似错误。 复核范围