原论文链接:https://arxiv.org/pdf/1807.03748.pdf
本文若有讲述错误或不妥之处,欢迎大佬在评论区纠正!
论文总览
论文详细解读
1. 论文的motivation
- 为了学习高维数据之间的潜在共享信息(slow features)
- 生成式模型计算量太大,且学习到的很多特征都是特定模式下的特征
所以我们不应该直接学习后验概率 (其中 是当前的输入, 是上下文),而是应该将 和 嵌入到更加紧凑分布的空间(a compact distributed vector representations)中,并最大化保留 和 之间的互信息:
2. 论文的architecture
包含两个主要结构:非线性编码器 和自回归编码器
非线性编码器
可以是任何CNN/Transformer类型网络,将每个输入都映射到隐空间(即上面提到的compact distributed space)生成特征向量:
自回归编码器
可以是任何RNN类型网络,将前 个输入映射的特征向量进行信息汇聚(summarize)生成上下文特征向量:
损失函数
- 互信息转化
将上述的互信息转化为简单的双线性对数函数:
- InfoNCE loss
给定数据集 (包含 1 个正样本和 N-1 个负样本),可以求得损失函数为:
可以证明最小化 InfoNCE loss就等于最大化
整体过程
- 首先前 个数据经过 和 编码生成 和 ;
- 对于往后的输入数据 , 先进入 生成 ,然后将 线性映射成 (作为对 的预测)。注意:这里的 对于每一个 都是不同的(即 之后的每个时间步都不同)
- 最后将 和 带入 InfoNCE 进行互信息计算,然后 BP 更新 和 参数
3. 论文的experiment(图像方面)
由于我本身更多混迹在CV领域,所以重点讲解CPC如何在图像上操作(仅仅是一些重要操作).
- 对于 ,论文使用 ResNet v2 101 (没有使用 );对于 ,论文使用 PixelCNN-style AR model(感兴趣的大佬可以了解一下);
- 他们将每个图片分成 7x7 格(当然还有一系列变换,这里不细讲),每格作为一个数据 (从左上到右下按顺序展开),变成一个序列,然后送入CPC进行训练;
- 论文中最多预测 5 行(35格),即最少有2行(14格)作为 之前的数据进行提取 和 ,不进行互信息计算
个人总结
CPC作为一个通用架构,泛化性还是很强的,在多种模态下都可以使用,并可以根据任务不同侧重使用 或 作为下游任务的特征输入. 但是CPC依旧是偏 generative 式的模型,它通过 对 进行预测生成 ,然后才计算互信息,对于计算量要求还是比较大.