原论文链接:https://arxiv.org/pdf/1807.03748.pdf
本文若有讲述错误或不妥之处,欢迎大佬在评论区纠正!
论文总览
论文详细解读
1. 论文的motivation
- 为了学习高维数据之间的潜在共享信息(slow features)
- 生成式模型计算量太大,且学习到的很多特征都是特定模式下的特征
所以我们不应该直接学习后验概率 (其中
是当前的输入,
是上下文),而是应该将
和
嵌入到更加紧凑分布的空间(a compact distributed vector representations)中,并最大化保留
和
之间的互信息
:
2. 论文的architecture
包含两个主要结构:非线性编码器 和自回归编码器
非线性编码器 ![g_{enc}](https://i-blog.csdnimg.cn/blog_migrate/9fbecf822e6d350756e41450d6a232a7.gif)
可以是任何CNN/Transformer类型网络,将每个输入都映射到隐空间(即上面提到的compact distributed space)生成特征向量:
自回归编码器 ![g_{ar}](https://i-blog.csdnimg.cn/blog_migrate/8c1ce4a25fecce28068500122450e92a.gif)
可以是任何RNN类型网络,将前 个输入映射的特征向量进行信息汇聚(summarize)生成上下文特征向量:
损失函数 ![loss](https://i-blog.csdnimg.cn/blog_migrate/b2b5856542d15746e1573dd286b3cf2d.gif)
- 互信息转化
将上述的互信息转化为简单的双线性对数函数:
- 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 式的模型,它通过
对
进行预测生成
,然后才计算互信息,对于计算量要求还是比较大.