首页 > 其他分享 >DiffSeq

DiffSeq

时间:2024-07-29 15:52:44浏览次数:12  
标签:Emb DiffSeq zt y0 x0 z0 wx

目录

 

Gong S., Li M., Feng J., Wu Z. and Kong L. DiffuSeq: Sequence to sequence text generation with diffusion models. In International Conference on Learning Representations (ICLR), 2023

本文提出了一种用于 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:

     

    z0=Emb(w)=[Emb(w1),Emb(w2),…],z0=Emb(w)=[Emb(w1),Emb(w2),…],

     

    这一步实际上是相当于构建从离散空间到连续空间的一个映射:

     

    qϕ(z0|w)=δEmb(w)(z0).qϕ(z0|w)=δEmb(w)(z0).

     

  • 因为整个流程设计两个部分: source xx, target yy, 不妨令

     

    x0=Emb(wx)=[Emb(wx1),Emb(wx2),…],y0=Emb(wy)=[Emb(wy1),Emb(wy2),…].x0=Emb(wx)=[Emb(w1x),Emb(w2x),…],y0=Emb(wy)=[Emb(w1y),Emb(w2y),…].

     

    于是

     

    z0=x0⊕y0.z0=x0⊕y0.

     

    类似的之后的 ztzt 均可以分为 source 和 target 两部分, 即

     

    zt=xt⊕yt.zt=xt⊕yt.

     

  • 前向过程: 如上图所示:

    1. 根据 qϕ(z0|w)qϕ(z0|w) 得到 z0z0 (这一步实际上是确定的);
    2. 此时我们依旧在连续空间中了, 故我们可以使用一般的高斯分布来加噪, 即:

       

      z′t∼q(zt|zt−1)=N(zt;√1−βtzt−1,βtI).zt′∼q(zt|zt−1)=N(zt;1−βtzt−1,βtI).

       

      但是特别地, 我们只对 target 部分加噪:

       

      zt=x0⊕y′t.zt=x0⊕yt′.

       

  • 反向过程: 同样如上图所示:

    1. 从标准的高斯分布中采样 z′TzT′, 并令

       

      zT=x0⊕y′T.zT=x0⊕yT′.

       

    2. 根据如下分布进行反向传递:

       

      z′t−1∼N(zt−1;μθ(z,t),σθ(zt,t)),zt−1=x0⊕y′t−1,t≥2.zt−1′∼N(zt−1;μθ(z,t),σθ(zt,t)),zt−1=x0⊕yt−1′,t≥2.

       

  • 最后的损失为如下:

  • 需要注意的是, 其中 qϕ(z0|wx⊕y)qϕ(z0|wx⊕y) 本身是一个确定的过程, 所以是不提供导数的, 可以省略. 整体的推导其实普通的 VLB 没什么差别, LroundLround 也只是原来的损失一部分, 只是被作者单拎了出来. 不过也有道理, 因为但看它, 其实就是希望训练一个分类网络, 将 z0z0 映射回词.

  • 不过作者最后用的也不是上面的损失, 而是一个简化的版本 (即把原先的系数给去掉后的结果):

     

    LVLB=[T∑t=2∥z0−fθ(z,t)∥2+∥Emb(wx⊕y)−fθ(z1,1)∥2−logpθ(wx⊕y|z0)]⇒[T∑t=2∥y0−~fθ(z,t)∥2+∥Emb(wy)−~fθ(z1,1)∥2−logpθ(wx⊕y|z0)].LVLB=[∑t=2T‖z0−fθ(z,t)‖2+‖Emb(wx⊕y)−fθ(z1,1)‖2−log⁡pθ(wx⊕y|z0)]⇒[∑t=2T‖y0−f~θ(z,t)‖2+‖Emb(wy)−f~θ(z1,1)‖2−log⁡pθ(wx⊕y|z0)].

     

  • f,~ff,f~ 就是对 zt,ytzt,yt 的直接拟合, 是另一种损失的写法. 具体看 here

代码

official

标签:Emb,DiffSeq,zt,y0,x0,z0,wx
From: https://www.cnblogs.com/zhangxianrong/p/18330264

相关文章