Published on

DDPM数学原理

Authors
  • avatar
    Name
    zmy
    Twitter

参考:https://spaces.ac.cn/archives/9119/comment-page-1

概述

  • 随机高斯噪声 Z;样本数据 X

  • 目的:随机采样一个 Z,通过模型可以生成 X

    • 本质上就是学习一个变换关系,可以将随机高斯噪声变为符合样本分布的数据
  • 存在的问题:从 Z 到 X 的跨度太大,实现很困难

  • 解决办法:一点点的进行生成,而不是一步实现,是一个渐变的过程

  • 思路:

    1. 将样本数据一点点的进行加噪,最终完全变为高斯噪声
    2. 模型的作用是估计每一步所添加的噪声,然后去噪来还原为样本数据

加噪过程

  • x0,x1,x2,...,xtx_0,x_1, x_2, ... ,x_t表示加噪过程的图像,其中x0x_0为原始图像,xtx_t则为纯噪声 ,则有以下式子:

    xt=αtxt1+βtεt,其中εtN(0,1)(1)x_t=\alpha_tx_{t-1}+\beta_t\varepsilon_t\quad,其中 \varepsilon_t~N(0,1) \tag{1}
  • 其中有 αt,βt>0\alpha_t,\beta_t>0αt2+βt2=1\alpha_t^2+\beta_t^2=1βt\beta_t通常很接近0,表示每一步只添加很少的噪声

  • 反复执行式(1)的过程:

    xt=αtxt1+βtεt=αt(αt1xt2+βt1εt1)==(αtα1)x0+(αtα2)β1ε1+(αtα3)β2ε2++βtεt(2)\begin{split} x_t &= \alpha_tx_{t-1} + \beta_t\varepsilon_t \\ &= \alpha_t (\alpha_{t-1}x_{t-2} + \beta_{t-1}\varepsilon_{t-1}) \\ &= \cdots\cdots \\ &= (\alpha_t\cdots\alpha_1)x_0+(\alpha_t\cdots\alpha_2)\beta_1\varepsilon_1+(\alpha_t\cdots\alpha_3)\beta_2\varepsilon_2+\cdots+\beta_t\varepsilon_t \end{split} \tag{2}
  • 因为αt2+βt2=1\alpha_t^2+\beta_t^2=1,则式(2)的所有系数的平方和为1,即:(αtα1)2+(αtα2)2β12+(αtα3)2β22++αt2βt12+βt2=1(\alpha_t⋯\alpha1)^2+(\alpha_t⋯\alpha2)^2\beta_1^2+(\alpha_t⋯\alpha3)^2\beta_2^2+⋯+\alpha_t^2\beta_{t-1}^2+\beta_t^2=1

  • 而式(2)将xtx_t转换为了x0x_0tt 个独立正态分布的和,这 tt 个正态分布的均值为0,方差为系数的平方

  • 由于正态分布的叠加性,上面 tt 个正态分布的的均值为0,方差为(αtα2)2β12+(αtα3)2β22++αt2βt12+βt2=1(αtα1)2(\alpha_t⋯\alpha2)^2\beta_1^2+(\alpha_t⋯\alpha3)^2\beta_2^2+⋯+\alpha_t^2\beta_{t-1}^2+\beta_t^2=1-(\alpha_t⋯\alpha_1)^2

  • 到这里,可以将式(2)写为如下形式:

    xt=(αtα1)x0+1(αtα1)2εˉt=αˉtx0+βˉtεˉt(3)\begin{split} x_t &= (\alpha_t\cdots\alpha_1)x_0+\sqrt{1-(\alpha_t\cdots\alpha_1)^2}\cdot\bar\varepsilon_t \\ &= \bar\alpha_t \cdot x_0+\bar\beta_t \cdot \bar\varepsilon_t \end{split} \tag{3}
  • 式(3)极大简化了xtx_t的计算过程,通过设置超参数使得使αˉt\bar\alpha_t趋近于0来使得xtx_t趋近于标准正态分布

恢复过程

  • 在上述加噪的过程中,可以得到很多数据对(xt1,xt)(x_{t-1}, x_t),恢复的过程其实就是学习一个函数ff来将xtx_t恢复成xt1x_{t-1},优化目标暂时记为f(xt)f(x_t)xt1x_{t-1}的L2范数

  • 将式(1)写为以下形式:

    xt1=1αt(xtβtεt)(4)x_{t-1}=\frac{1}{\alpha_t} \cdot (x_t-\beta_t\varepsilon_t) \tag{4}
  • 其中αt\alpha_tβt\beta_t为超参,可以将模型写成如下形式:

    f(xt)=1αt(xtβtϵθ(xt,t))(5)f(x_t)=\frac{1}{\alpha_t} \cdot (x_t-\beta_t\epsilon_{\theta}(x_t,t)) \tag{5}
  • 其中θ\theta为要训练的参数,结合加噪过程的推导(结合式1来用xt1x_{t-1}表示xtx_t),优化目标可以写为以下形式:

    f(xt)=1αt(αtxt1+βtεtβtϵθ(xt,t))f(xt)xt1=βtαt(εtϵθ(xt,t))xt1f(xt)2=βt2αt2εtϵθ(xt,t)2\begin{align*} f(x_t) &= \frac{1}{\alpha_t}(\alpha_tx_{t-1} + \beta_t\varepsilon_t-\beta_t\epsilon_{\theta}(x_t,t)) \\ f(x_t) - x_{t-1} &= \frac{\beta_t}{\alpha_t}(\varepsilon_t-\epsilon_{\theta}(x_t,t)) \\ \lVert x_{t-1}-f(x_t) \rVert^2 &= \frac{\beta_t^2}{\alpha_t^2} \lVert \varepsilon_t-\epsilon_{\theta}(x_t, t) \rVert^2 \tag{6} \end{align*}
  • 又因为:

    xt=αtxt1+βtεt=αt(αˉt1x0+βˉt1εˉt1)+βtεt=αˉtx0+αtβˉt1εˉt1+βtεt(7)\begin{split} x_t &= \alpha_tx_{t-1}+\beta_t\varepsilon_t \\ &= \alpha_t(\bar\alpha_{t-1}x_0+\bar\beta_{t-1}\bar\varepsilon_{t-1})+\beta_t\varepsilon_t \\ &= \bar\alpha_tx_0+\alpha_t\bar\beta_{t-1}\bar\varepsilon_{t-1}+\beta_t\varepsilon_t \end{split} \tag{7}
  • 忽略系数,则最终的优化目标写为:

    εtϵθ(αˉtx0+αtβˉt1εˉt1+βtεt,t)2(8)\lVert \varepsilon_t-\epsilon_{\theta}(\bar\alpha_tx_0+\alpha_t\bar\beta_{t-1}\bar\varepsilon_{t-1}+\beta_t\varepsilon_t \,,\, t) \rVert^2 \tag{8}
  • PS:这里之所以要通过式(7)来回退一步表示xtx_t,而不是直接根据式(3)来表示,主要是以下原因:

    • 在加噪的过程中,只记录了添加的噪声εt\varepsilon_t,中间的噪声图像xtx_t并没有记录,因此训练时需要根据时间步tt来计算出xtx_t
    • 式(3)用εˉt\bar\varepsilon_t来表示xtx_t,其与εt\varepsilon_t不是相互独立的,εt\varepsilon_t作为ground truth,事先已经采样得到,因此无法独立采样εˉt\bar\varepsilon_t
    • 式(7)用εt\varepsilon_tεˉt1\bar\varepsilon_{t-1}表示,εˉt1\bar\varepsilon_{t-1}εt\varepsilon_t相互独立,可独立采样

降低方差

  • 上述式(8)已经可以完成DDPM的训练,但是可能会出现方差过大的风险,从而导致收敛过慢等问题,因为其包含四个需要采样的随机变量:

    1. 随机样本x0x_0
    2. 相互独立的两个标准正态分布εˉt1\bar\varepsilon_{t-1}εt\varepsilon_t
    3. 时间步tt
  • 要采样的随机变量过多,就可能会造成损失函数波动(方差)过大,可通过将εˉt1\bar\varepsilon_{t-1}εt\varepsilon_t合并为单个符合标准正态分布的随机变量

  • 目标是要把式(8)中出现的 αtβˉt1εˉt1+βtεt\alpha_t\bar\beta_{t-1}\bar\varepsilon_{t-1}+\beta_t\varepsilon_tεˉt1\bar\varepsilon_{t-1}εt\varepsilon_t 合并为一个随机变量,这样就可以减少采样次数

    αtβˉt1εˉt1+βtεt为式1εˉt1εt相互独立,且二者均符合标准正态分布1仍符合正态分布,其均值为0,方差为αt2βˉt12+βt2βˉt=1(αtα1)2αt2βˉt12+βt2=αt2[1(α1αt1)2]+βt2记为式2αt2+βt2=12=1(α1αt1)2=βˉt2即式1的方差为βˉt2可将式1写为βˉtε,其中ε符合标准正态分布βtεˉt1αtβˉt1εt为式3同理,可将式3写为βˉtω,其中ω符合标准正态分布\begin{align*} & 记 \, \alpha_t\bar\beta_{t-1}\bar\varepsilon_{t-1}+\beta_t\varepsilon_t \, 为式1\\ & \because \bar\varepsilon_{t-1} 和 \varepsilon_t 相互独立,且二者均符合标准正态分布 \\ & \therefore 式1仍符合正态分布,其均值为0,方差为\, \alpha_t^2\bar\beta_{t-1}^2+\beta_t^2 \\ & \because \bar\beta_t = \sqrt{1-(\alpha_t\cdots\alpha_1)^2}\\ & \therefore \alpha_t^2\bar\beta_{t-1}^2+\beta_t^2 = \alpha_t^2\cdot[1-(\alpha_1\cdots\alpha_{t-1})^2] + \beta_t^2 \quad 记为式2 \\ 又& \because \alpha_t^2+\beta_t^2=1 \\ & \therefore 式2=1-(\alpha_1\cdots\alpha_{t-1})^2=\bar\beta_{t}^2 \quad 即式1的方差为\bar\beta_{t}^2 \\ & \therefore 可将式1写为 \bar\beta_{t}\varepsilon \,,\,其中\varepsilon符合标准正态分布 \\ \\ & 记 \, \beta_t\bar\varepsilon_{t-1}-\alpha_t\bar\beta_{t-1}\varepsilon_t \, 为式3 \\ & 同理,可将式3写为 \bar\beta_{t}\omega \,,\,其中\omega符合标准正态分布 \\ \end{align*}
  • 经过上述过程,得到了以下这个二元一次方程组:

    {αtβˉt1εˉt1+βtεt=βˉtεβtεˉt1αtβˉt1εt=βˉtω(9)\begin{cases} \alpha_t\bar\beta_{t-1}\bar\varepsilon_{t-1}+\beta_t\varepsilon_t = \bar\beta_{t}\varepsilon \\ \beta_t\bar\varepsilon_{t-1}-\alpha_t\bar\beta_{t-1}\varepsilon_t = \bar\beta_{t}\omega \end{cases} \tag{9}
  • 需要说明一下, ε\varepsilonω\omega是相互独立的,证明如下:

    要想证明相互独立,只需要证明E(εω)=E(ε)E(ω)=0即可由式(9):E(βˉtεβˉtω)=E[(αtβˉt1εˉt1+βtεt)(βtεˉt1αtβˉt1εt)]等号右边展开得:E(αtβtβˉt1εˉt12αt2βˉt12εˉt1εt+βt2εˉt1εtαtβtβˉt1εt2)记作式1εˉt1εt相互独立1第二项和第三项值为01=E(αtβtβˉt1εˉt12αtβtβˉt1εt2)=E(αtβtβˉt1εˉt12)E(αtβtβˉt1εt2)=αtβtβˉt1(E(εˉt12)E(εt2))k个独立正态分布的平方和服从自由度为k的卡方分布,且其期望为kεˉt12εt2均服从自由度为1的卡方分布,且期望为11=0,即εω相互独立\begin{align*} & 要想证明相互独立,只需要证明E(\varepsilon\omega)=E(\varepsilon)E(\omega)=0即可 \\ & 由式(9):\\ & E(\bar\beta_{t}\varepsilon\bar\beta_{t}\omega)= E[(\alpha_t\bar\beta_{t-1}\bar\varepsilon_{t-1}+\beta_t\varepsilon_t)(\beta_t\bar\varepsilon_{t-1}-\alpha_t\bar\beta_{t-1}\varepsilon_t)] \\ & 等号右边展开得: \\ & E(\alpha_t\beta_t\bar\beta_{t-1}\bar\varepsilon_{t-1}^2-\alpha_t^2\bar\beta_{t-1}^2\bar\varepsilon_{t-1}\varepsilon_t +\beta_t^2\bar\varepsilon_{t-1}\varepsilon_t - \alpha_t\beta_t\bar\beta_{t-1}\varepsilon_{t}^2) \quad 记作式1\\ & \because \bar\varepsilon_{t-1}和\varepsilon_t相互独立 \\ & \therefore 式1第二项和第三项值为0 \\ & \therefore 式1=E(\alpha_t\beta_t\bar\beta_{t-1}\bar\varepsilon_{t-1}^2-\alpha_t\beta_t\bar\beta_{t-1}\varepsilon_{t}^2) =E(\alpha_t\beta_t\bar\beta_{t-1}\bar\varepsilon_{t-1}^2)-E(\alpha_t\beta_t\bar\beta_{t-1}\varepsilon_{t}^2)=\alpha_t\beta_t\bar\beta_{t-1}\cdot(E(\bar\varepsilon_{t-1}^2)-E(\varepsilon_{t}^2)) \\ & \because k个独立正态分布的平方和服从自由度为k的卡方分布,且其期望为k \\ & \therefore \bar\varepsilon_{t-1}^2与\varepsilon_{t}^2均服从自由度为1的卡方分布,且期望为1 \\ & \therefore 式1=0,即 \varepsilon和\omega相互独立 \end{align*}
  • 接下来解上述方程组(9),用ε\varepsilonω\omega表示εt\varepsilon_t得:

    εt=(βtεαtβˉt1ω)βˉtβt2+αt2βˉt12=βtεαtβˉt1ωβˉt(10)\varepsilon_t = \frac{(\beta_t\varepsilon-\alpha_t\bar\beta_{t-1}\omega)\bar\beta_t}{\beta_t^2+\alpha_t^2\bar\beta_{t-1}^2} = \frac{\beta_t\varepsilon-\alpha_t\bar\beta_{t-1}\omega}{\bar\beta_{t}} \tag{10}
  • 将式(9)和(10)代入式(8)可得优化目标为:

    βtεαtβˉt1ωβˉtϵθ(αˉtx0+βˉtε,t)2(11)\lVert \frac{\beta_t\varepsilon-\alpha_t\bar\beta_{t-1}\omega}{\bar\beta_{t}} - \epsilon_{\theta}(\bar\alpha_tx_0+\bar\beta_t\varepsilon,t) \rVert^2 \tag{11}
  • 式(11)有ε\varepsilonω\omega两个随机变量,其中对于ε\varepsilon是一个复杂函数,因为ε\varepsilon还包含在ϵθ\epsilon_{\theta}中,而对于ω\omega仅是一个二次函数,因此可以尝试将ω\omega消掉,步骤如下:

    (11)=(βtβˉtε)22αtβtβˉt1βˉtεω2βtβˉtεϵθ+(αtβˉt1ωβˉt)2+2αtβˉt1ωβˉtϵθ+ϵθ2=(βtβˉtε)22βtβˉtεϵθ+ϵθ2+N=βtβˉtεϵθ(αˉtx0+βˉtε,t)2+N=(βtβˉt)2εβˉtβtϵθ(αˉtx0+βˉtε,t)2+N(12)\begin{align*} 式(11) &= (\frac{\beta_t}{\bar\beta_t}\varepsilon)^2 - 2\frac{\alpha_t\beta_t\bar\beta_{t-1}}{\bar\beta_t}\varepsilon\omega - 2\frac{\beta_t}{\bar\beta_t}\varepsilon\epsilon_{\theta}+(\frac{\alpha_t\bar\beta_{t-1}\omega}{\bar\beta_t})^2 + 2\frac{\alpha_t\bar\beta_{t-1}\omega}{\bar\beta_t}\epsilon_{\theta} + \epsilon_{\theta}^2 \\ &= (\frac{\beta_t}{\bar\beta_t}\varepsilon)^2 - 2\frac{\beta_t}{\bar\beta_t}\varepsilon\epsilon_{\theta} + \epsilon_{\theta}^2 + N\\ &= \lVert \frac{\beta_t}{\bar\beta_t}\varepsilon - \epsilon_{\theta}(\bar\alpha_tx_0+\bar\beta_t\varepsilon,t) \rVert^2 + N \\ &= (\frac{\beta_t}{\bar\beta_t})^2\lVert \varepsilon - \frac{\bar\beta_t}{\beta_t}\epsilon_{\theta}(\bar\alpha_tx_0+\bar\beta_t\varepsilon,t) \rVert^2 + N \end{align*} \tag{12}
    • 第一步就是对式(11)展开
    • 第二步主要根据以下原因进行消项:
      1. ε\varepsilonω\omega相互独立
      2. ω\omega其二次函数为一个常数N
      3. ϵθ\epsilon_{\theta}ω\omega相互独立
  • 省略常数和权重,即为原论文最终使用的损失函数:

    εβˉtβtϵθ(αˉtx0+βˉtε,t)2(12)\lVert \varepsilon - \frac{\bar\beta_t}{\beta_t}\epsilon_{\theta}(\bar\alpha_tx_0+\bar\beta_t\varepsilon,t) \rVert^2 \tag{12}