如果有错误还请各位指出。我们都不是搞研究的,咱们不玩复杂公式 (*^_^*)
首先,Conditional Discrete Contrastive Diffusion 这个方法,要先从 Contrastive Predictive Coding(1807.03748,1905.09272,以下简称CPC)说起。
( 代表一个高维数据,如文字、图片、声音等, 代表数据对应的标签)的话,CPC 的目的是最大化 与 之间相互信息(Mutual Information):. 即,相当于最大化 .
, 其中,.
具体的公式和由来并不是那么的重要,网上由很多相关的文章可以参考,链接放在文章末尾。
, 一个自我回归(Autoregressive)模型 (比如,GRU), 和一个序列 组成。在每一步 钟,我们利用 的输出 来预测接下来几步的结果 . 对于图像来说,我们可以把图像整体分割为一个个的小方块,这样,整个图像就可以被看成一个序列了。
来自原始声音,负样本的配对是别的地方的声音。最后,通过 CPC 这么一套流程下来,模型将会更好的区分正负样本,进而,我们得到了一个更好的编码器。
接下来,进入到 Conditional Discrete Contrastive Diffusion(2206.07771,以下简称 CDCD)的世界里。
所对应的离散向量(Discrete Representation).
, 然后复原这个 latent . 最后我们通过 VQ 模型的解码器,将 latent 复原成图像 .
. 如果我们也采用和 CPC 原论文相同的方法,设定一个比值 ,然后去最大化这个比值的话,我们可以导出和 CPC 论文中的形式的 Loss:
代表了负样本通过 VQ 编码器生成的 latent.
, 我们可以直接去优化 (但依旧保持 Contrastive Learning 的世界观)
之前写的 DDIM 文章里面,详细地介绍过 DDPM 的目标——最大化变分下界(Evidence Lower Bound),所对应的 Loss 为:
, 所以上面公式里面的 , 变成了 , . (在这里, 的具体形式并不重要)
随后,论文里面提出了两种扩散机制—— Step-Wise Parallel Diffusion 和 Sample-Wise Auxiliary Diffusion
(论文的附录中有详细的公式推导),但是工作方式有所区别,而上面的示意图已经很直观地表明了——
无论是 Step-wise 还是 Sample-wise,我们都选取 1 个正样本 N 个负样本,
的同时,"抑制"负样本 . 这些负样本来自于上一步的扩散,即公式中的 ,(这里注意,凡是有上标的都意味着负样本)
对应的 Loss 为:
的路线, "抑制"到达负样本 的路线,即公式中的 .
对应的 Loss 为:
所以最终的 loss 由变分下界引导出的 loss 和以上的 CDCD loss 两部分组成
(注:论文的附录B4有算法的伪代码,但是个人感觉里面的符号好像有点问题,没有贴出来,想参考的可以去翻看原论文)
Loss 相关的代码可以参考官方 github 源代码 synthesis\modeling\transformers\diffusion_d2m.py 中的 458 行开始(d2m应该是 dance to music 的意思...)
intra: 在...之内;inter: 在...之间
对于负样本的获取,我们可以有两种不同的办法,一种是利用原始数据本身来制造负样本(Intra),一种是利用别的数据来充当负样本(Inter)
这里,原论文给出的示意图已经直观地说明了两种不同的方式的差异,故不在多提。
所以根据 Step 和 Sample 两种扩散方式以及 Intra 和 Inter 两种采样方式,就有4种不同的组合,这些组合的差异和表现可见原论文第4节,在此也不提了。
CPC 的原理,非常通俗易懂:https://zhuanlan.zhihu.com/p/137076811
现在扩散模型相关的论文都太多公式了,导致很多内容,都特别难懂 orz…