Representation Learning With Contrastive Predictive Coding梳理

一种通用的无监督学习方法——对比预测编码。通过自回归模型预测潜在空间(高维空间)的未来,以学习高级表征。在训练阶段不涉及具体下游任务。

原文
参考:https://zhuanlan.zhihu.com/p/129076690

主要贡献

  1. 将高维数据压缩到更加紧密的潜在嵌入空间,这个空间中条件预测更容易建模。
  2. 在这个潜在空间中使用强大的自回归模型来做多步未来预测。
  3. 损失函数依靠噪声对比估计,这是与自然语言模型中用于学习词嵌入类似的方式,需要整个模型以端到端的形式进行训练。将最终的模型(对比预测编码,CPC)用在了很多不同的数据模态中,包括图像、语音、自然语言和强化学习,结果表明同样的机制在每一个领域中都学到了有趣的高级表征,而且优于其他方法。

image-20210908124633513

对于输入样本$xt$,有一个非线性编码器$g{enc}$将其映射为潜在表示序列$zt=g{enc}(xt)$;对于$t$时刻之前的所有$z{t’},t’<t$有一个自回归模型(e.g. GRU)$g{ar}$推断得到当前时刻的$c_t$,利用对当前时刻的推测$c_t$,推断(用一个矩阵$W_k$进行映射)得到后面几个时刻的潜在表示序列的映射(预测值)$z’{t+1}$、$z’{t+2}$、$z’{t+3}…$;将真实的$x{t+1}$、$x{t+2}$、$x{t+3}…$通过$g{enc}$得到的潜在表示序列(真实值)做损失函数,达到收敛。最后利用$c_t$完成下游任务。

衡量$x$和$c$的相关性

互信息可以很好的衡量相关性:

但是由于不方便计算(可见MINE.md),作者采用一个正比于$\frac{p(x|c)}{p(x)}$的函数$f_k(x,c)$来代替,即:

然后这个$fk(x{t+k}, c_t)$函数的具体计算表达式为:

我觉得应该才开看,第一步是$Wk^Tz{t+k}$,用一个Linear层将$z{t+k}$映射到与$c_t$同Size;第二步做$W_k^Tz{t+k}$和$ct$的内积,即$(W_k^Tz{t+k})^T$$ct$,展开为$z^T{t+k}W_kc_t$;第三步做指数运算。

衡量互信息

经过一系列证明,可以得到:

其中$\mathcal{L}_N$为:

可见最小化$\mathcal{L}_N$即可完成最大化互信息量的下界。

其中,$p(x_{t+k},c_t)$ 指的是正在选用信号的片段$x_t$(正样本),而$p(x_j)$指的是我们可以随便从其他的声音信号里选择一个片段(负样本)。这就是对比的体现。

对$\mathcal{L}_N$反向梯度传播即可完成整个算法。

文章中还涉及了对图像、自然语言、语音的不同形式的信号的建模,有需要可以查看原文。