探究扩散模型的前向扩散过程权重系数设计

文章探讨了前向扩散过程中采用特定加权设计的原因,通过数学分析不同加权方式对噪声系数的影响。作者指出,使用特定的加权设计(如平方根形式)可以使噪声系数最终收敛到1,从而达到高斯分布。其他加权方式,如简单的线性组合或相等权重,无法实现相同的效果。文章还提出了未解决的问题,包括为何必须扩散到标准高斯分布以及为何添加高斯噪声。
摘要由CSDN通过智能技术生成

文章目录

前言

目前常见的前向扩散过程的公式表达如下:
x t = 1 − α t ⋅ x t − 1 + α t ⋅ ϵ t x_t=\sqrt{1-\alpha_t}\cdot x_{t-1}+\sqrt{\alpha_t}\cdot\epsilon_t xt=1αt xt1+αt ϵt前段时间投稿一篇有关扩散模型的文章,被审稿人问道为什么要采用这种 1 − α t + α \sqrt{1-\alpha_t}+\sqrt{\alpha} 1αt +α 的加权设计?遂前去搜寻资料和博客,大多数回答都讲是为了最终能够采样到高斯分布,但都不具体说原因。总不能这样给审稿人回复吧,怕不是分分钟被拒。因此,没有办法,只能自己研究一下原因。

先声明:奈何本人能力有限,这种方法只能算是一种探究,欢迎大家指正和交流。

分析

这里我不去关注使用这样加权的原因,而是关注使用不同加权方式分别会产生什么效果。首先我们假设存在 a t a_t at b t b_t bt 满足:
x t = a t x t − 1 + b t ϵ t (1) x_t=a_t x_{t-1}+b_t \epsilon_t \tag{1} xt=atxt1+btϵt(1)
对上式按照递推的方式逐步展开得:
x t = a t x t − 1 + b t ϵ t   = a t ( a t − 1 x t − 2 + b t − 1 ϵ t − 1 ) + b t ϵ t   = a t [ a t − 1 ( a t − 2 x t − 3 + b t − 2 ϵ t − 2 ) + b t − 1 ϵ t − 1 ] + b t ϵ t   = ⋯ ⋯   = ( a t a t − 1 ⋯ a 1 ) x 0 + ( a t a t − 1 ⋯ a 2 ) b 1 ϵ 1 + ( a t a t − 1 ⋯ a 3 ) b 2 ϵ 2 + ⋯ + a t b t − 1 ϵ t − 1 + b t ϵ t \begin{equation*} \begin{aligned} x_t & = a_t x_{t-1}+ b_t \epsilon_t \\ ~ & = a_t \left(a_{t-1} x_{t-2}+b_{t-1} \epsilon_{t-1}\right)+ b_t \epsilon_t \\ ~ & = a_t\left[ a_{t-1} \left(a_{t-2} x_{t-3}+b_{t-2} \epsilon_{t-2}\right)+b_{t-1\epsilon_{t-1}}\right] + b_t\epsilon_t \\ ~ & = \cdots\cdots \\ ~ & = \left(a_ta_{t-1}\cdots a_1 \right)x_0+\left(a_ta_{t-1}\cdots a_2\right)b_1\epsilon_1+\left(a_ta_{t-1}\cdots a_3\right)b_2\epsilon_2+\cdots+a_tb_{t-1}\epsilon_{t-1}+b_t\epsilon_t \end{aligned} \end{equation*} xt    =atxt1+btϵt=at(at1xt2+bt1ϵt1)+btϵt=at[at1(at2xt3+bt2ϵt2)+bt1ϵt1]+btϵt=⋯⋯=(atat1a1)x0+(atat1a2)b1ϵ1+(atat1a3)b2ϵ2++atbt1ϵt1+btϵt由于高斯噪声的叠加性质,当 p ∼ N ( 0 , σ 1 2 ) p\sim \mathcal{N}(0, \sigma_1^2) pN(0,σ12) q ∼ N ( 0 , σ 2 2 ) q\sim \mathcal{N}(0, \sigma_2^2) qN(0,σ22)时, p + q ∼ N ( 0 , σ 1 2 + σ 2 2 ) p+q\sim \mathcal{N}(0, \sigma_1^2+\sigma_2^2) p+qN(0,σ12+σ22),而上式中的 ϵ i \epsilon_i ϵi均是标准高斯分布,即 ϵ i ∼ N ( 0 , I ) \epsilon_i\sim \mathcal{N}(0, \textbf{I}) ϵiN(0,I)。因此上式可以进一步简化为
x t = ( a t a t − 1 ⋯ a 1 ) x 0 + ( a t a t − 1 ⋯ a 2 ) b 1 ϵ 1 + ( a t a t − 1 ⋯ a 3 ) b 2 ϵ 2 + ⋯ + a t b t − 1 ϵ t − 1 + b t ϵ t   = ( a t a t − 1 ⋯ a 1 ) x 0 + ( a t a t − 1 ⋯ a 2 ) 2 b 1 2 + ⋯ + a t 2 b t − 1 2 + b t 2 ϵ \begin{equation*} \begin{aligned} x_t & = \left(a_ta_{t-1}\cdots a_1 \right)x_0+\left(a_ta_{t-1}\cdots a_2\right)b_1\epsilon_1+\left(a_ta_{t-1}\cdots a_3\right)b_2\epsilon_2+\cdots+a_tb_{t-1}\epsilon_{t-1}+b_t\epsilon_t \\ ~ & = \left(a_ta_{t-1}\cdots a_1 \right)x_0 + \sqrt{\left(a_ta_{t-1}\cdots a_2\right)^2b_1^2+\cdots+a_t^2b_{t-1}^2+b_t^2}\epsilon\\ \end{aligned} \end{equation*} xt =(atat1a1)x0+(atat1a2)b1ϵ1+(atat1a3)b2ϵ2++atbt1ϵt1+btϵt=(atat1a1)x0+(atat1a2)2b12++at2bt12+bt2 ϵ其中, ϵ ∼ N ( 0 , I ) \epsilon\sim\mathcal{N}(0, \textbf{I}) ϵN(0,I),根据扩散模型的参数设置可知 0 < a t , b t < 1 0<a_t, b_t < 1 0<at,bt<1,因此 x 0 x_0 x0的系数会很快收敛到0,即
α ‾ t = a t a t − 1 ⋯ a 1 ≈ 0 \overline{\alpha}_t=a_ta_{t-1}\cdots a_1\approx 0 αt=atat1a10,因此前向扩散过程能否收敛到一个标准高斯分布的判断就是噪声的系数能否收敛到1。对此,我这里分别判断三种加权方式下的收敛情况:

  1. a t + b t = 1 a_t+b_t=1 at+bt=1
  2. a t 2 + b t 2 = 1 a_t^2+b_t^2=1 at2+bt2=1
  3. a t = b t a_t=b_t at=bt

这里取 b t ∈ ( 0 , 1 ) b_t\in(0, 1) bt(0,1),实际上是与原扩散模型保持一致, b t ∈ ( 0.0001 , 0.02 ) b_t\in(0.0001, 0.02) bt(0.0001,0.02)。对于第一种情况,可以发现其在不同扩散步长时的收敛情况如图:
在这里插入图片描述
在这里插入图片描述
显然不论扩散步长如何设置,最终的噪声系数还是无法收敛到1,即前向扩散过程无法收敛为一个标准的高斯噪声分布。对于第二种加权方式,其在不同扩散步长时的收敛情况如图:
在这里插入图片描述
在这里插入图片描述
对于第二种加权方式,噪声分布的系数最终会收敛到1,而且过程是平稳的,时间无关的。同时,在选择第二种加权方式的时候,我们可以对噪声的系数表达式进行简化:
  ( a t a t − 1 ⋯ a 2 ) 2 b 1 2 + ⋯ + a t 2 b t − 1 2 + b t 2 = a t 2 { a t − 1 2 [ a t − 2 2 ⋯ < a 2 2 b 1 2 + b 2 2 > ⋯ + b t − 2 2 ] + b t − 1 2 } + b t 2 = a t 2 { a t − 1 2 [ a t − 2 2 ⋯ < a 2 2 ( 1 − a 1 2 ) + b 2 2 > ⋯ + b t − 2 2 ] + b t − 1 2 } + b t 2 = a t 2 { a t − 1 2 [ a t − 2 2 ⋯ < a 2 2 − a 1 2 a 2 2 + b 2 2 > ⋯ + b t − 2 2 ] + b t − 1 2 } + b t 2 = a t 2 { a t − 1 2 [ a t − 2 2 ⋯ < 1 − a 1 2 a 2 2 > ⋯ + b t − 2 2 ] + b t − 1 2 } + b t 2   ⋯ ⋯ = 1 − a t 2 a t − 1 2 a t − 2 2 ⋯ a 1 2 \begin{equation*} \begin{aligned} ~ & \sqrt{\left(a_ta_{t-1}\cdots a_2\right)^2b_1^2+\cdots+a_t^2b_{t-1}^2+b_t^2}\\ = & \sqrt{a_t^2\{a_{t-1}^2 \left[a_{t-2}^2\cdots<a_2^2b_1^2+b_2^2>\cdots+b_{t-2}^2 \right]+b_{t-1}^2\}+b_t^2} \\ = & \sqrt{a_t^2\{a_{t-1}^2 \left[a_{t-2}^2\cdots<a_2^2\left(1-a_1^2\right)+b_2^2>\cdots+b_{t-2}^2 \right]+b_{t-1}^2\}+b_t^2} \\ = & \sqrt{a_t^2\{a_{t-1}^2 \left[a_{t-2}^2\cdots<a_2^2-a_1^2a_2^2+b_2^2>\cdots+b_{t-2}^2 \right]+b_{t-1}^2\}+b_t^2} \\ = & \sqrt{a_t^2\{a_{t-1}^2 \left[a_{t-2}^2\cdots<1-a_1^2a_2^2>\cdots+b_{t-2}^2 \right]+b_{t-1}^2\}+b_t^2} \\ ~ & \cdots\cdots \\ = & \sqrt{1-a_t^2a_{t-1}^2a_{t-2}^2\cdots a_1^2} \\ \end{aligned} \end{equation*}  ==== =(atat1a2)2b12++at2bt12+bt2 at2{at12[at22<a22b12+b22>+bt22]+bt12}+bt2 at2{at12[at22<a22(1a12)+b22>+bt22]+bt12}+bt2 at2{at12[at22<a22a12a22+b22>+bt22]+bt12}+bt2 at2{at12[at22<1a12a22>+bt22]+bt12}+bt2 ⋯⋯1at2at12at22a12 显然这种加权方式所得的结果也更加优雅,从表达式可以直接看出其最终会收敛到1。对于第三种加权方式,不同扩散步长时的收敛情况如图:
在这里插入图片描述
在这里插入图片描述
很明显,这种加权方式是无法让噪声系数收敛到1的,也就无法令前向扩散过程收敛为一个标注的高斯分布。以下是我们做该部分仿真是用的 Python 代码:

import numpy as np
import matplotlib.pyplot as plt
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimSun'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题

num = 100000

b = np.linspace(0.0001, 0.02, num, dtype=np.float64)
a = np.sqrt(1 - np.square(b))
# a = b
# a = 1 - b
c = []
result = 0
for i in range(num):
    if i == 0:
        result = np.square(b[0])
        c.append(np.sqrt(result))
    else:
        result = np.square(a[i]) * result + np.square(b[i])
        c.append(np.sqrt(result))

plt.figure()
plt.plot(range(num), c)
plt.xlabel('扩散步数')
plt.ylabel('噪声系数值')
plt.show()

虽然我们上边的方法从结果导向地解释了使用这种加权方式的合理性,但其具体的原因没有分析。而我作为一个初学者,也存在几个问题仍然存在疑惑,希望能与大家交流。

  • 为什么一定要前向扩散到一个标准高斯分布?
  • 为什么一定要加标准高斯噪声?
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

听 风、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值