DDPM之前向扩散

2024-01-09 17:01:11

一、理论

  • 前向过程是一个逐渐加噪声的过程
    • 噪声随时间变换,时间 t 越大,噪声越大
    • 噪声服从正态分布
  • 前向过程可以用条件概率 q(x_t|x_{t-1}) 来描述?
    • x_t?是在时间步 t 的数据状态
    • x_{t-1} 是在时间步 t?1 的数据状态
    • q(x_t|x_{t-1})代表了在已知x_{t-1} 的情况下,时间步 t 的数据状态 x_t 的概率分布
    • q(x_t|x_{t-1}) 是一个高斯分布,q(x_t|x_{t-1})=\mathcal{N}(x_t;\sqrt{1-\beta_t}x_{t-1},\beta_tI)
  • 高斯分布q(x_t|x_{t-1})
    • 均值(Mean):\sqrt{1-\beta_{t}}x_{t-1}?给出
    • 方差(Variance):\beta_tI给出

二、可视化展示

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm

# 假设的参数
beta_t = 0.1  # 假设的噪声方差
x_t_minus_1 = 0  # 假设在 t-1 时间步的 x 的值
mean = np.sqrt(1 - beta_t) * x_t_minus_1  # 高斯分布的均值
variance = beta_t  # 高斯分布的方差
std_dev = np.sqrt(variance)  # 标准差

# 创建 x 轴的数值
x = np.linspace(mean - 3*std_dev, mean + 3*std_dev, 100)

# 创建高斯分布的概率密度函数 (PDF)
pdf = norm.pdf(x, mean, std_dev)

# 绘制图像
plt.figure(figsize=(8, 4))
plt.plot(x, pdf, color='blue')
plt.title("Gaussian Distribution of $q(x_t | x_{t-1})$")
plt.xlabel("$x_t$")
plt.ylabel("Probability Density")
plt.grid(True)
plt.show()

?

解释:

  • 分布的均值将围绕 x_{t-1} 的缩放版本居中
    • 这表示大多数数据点预期出现的平均值
    • 这种缩放是通过 \sqrt{1-\beta_{t}}x_{t-1} 实现的
      • 其中 \beta_t 是时间步 t?的噪声方差
  • 曲线的宽度代表分布的方差,在本例中为 \beta_t
    • 更大的 \beta_t 将导致更宽的曲线,表示由于更高的噪声水平而导致的数据更广泛的分布。
  • 图形的x轴将表示 x_t?的可能值,y轴将表示概率密度。
  • 图形的标题将是“扩散步骤 q(x_t|x_{t-1})
    • 表明它是在可视化扩散步骤中给定 x_{t-1}x_t 的分布。

三、遗留问题?

至于均值和方差如何计算,这个涉及数学原理介绍,为方便鸟瞰式的理解,此处先不做展开。。

文章来源:https://blog.csdn.net/SmartDemo/article/details/135480737
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。