目录
概
本文提出了一种用于 Seq2Seq 的不需要 classifier 引导的扩散模型, 且是在连续空间上讨论的.
虽然方法看起来很简单, 但是感觉很容易 work 和推广.
符号说明
- z0∼q(z)z0∼q(z), a real-world data distribution;
- zT∼N(0,I)zT∼N(0,I), Gaussian noise;
- q(zt|zt−1)=N(zt;√1−βtzt−1,βtI),t∈[1,2,…,T]q(zt|zt−1)=N(zt;1−βtzt−1,βtI),t∈[1,2,…,T];
- fθfθ, a diffusion model;
- wx=[wx1,…,wxm]wx=[w1x,…,wmx], m-length soure sequence (离散的);
- wy=[wy1,…,wyn]wy=[w1y,…,wny], n-length soure sequence (离散的).
流程
-
首先利用获取词的 embeddings:
这一步实际上是相当于构建从离散空间到连续空间的一个映射:
-
因为整个流程设计两个部分: source xx, target yy, 不妨令
于是
类似的之后的 ztzt 均可以分为 source 和 target 两部分, 即
-
前向过程: 如上图所示:
- 根据 qϕ(z0|w)qϕ(z0|w) 得到 z0z0 (这一步实际上是确定的);
- 此时我们依旧在连续空间中了, 故我们可以使用一般的高斯分布来加噪, 即:
但是特别地, 我们只对 target 部分加噪:
-
反向过程: 同样如上图所示:
-
从标准的高斯分布中采样 z′TzT′, 并令
-
根据如下分布进行反向传递:
-
-
最后的损失为如下:
-
需要注意的是, 其中 qϕ(z0|wx⊕y)qϕ(z0|wx⊕y) 本身是一个确定的过程, 所以是不提供导数的, 可以省略. 整体的推导其实普通的 VLB 没什么差别, LroundLround 也只是原来的损失一部分, 只是被作者单拎了出来. 不过也有道理, 因为但看它, 其实就是希望训练一个分类网络, 将 z0z0 映射回词.
-
不过作者最后用的也不是上面的损失, 而是一个简化的版本 (即把原先的系数给去掉后的结果):
-
f,~ff,f~ 就是对 zt,ytzt,yt 的直接拟合, 是另一种损失的写法. 具体看 here