『扩散模型』参数化之v-prediction

扩散模型

逆向扩散过程

自从 DDPM 以来,扩散模型的参数化形式一般都是 ϵ \epsilon ϵ-prediction,即通过预测噪声计算损失并更新扩散模型的参数
但是直接预测噪声 ϵ \epsilon ϵ往往会遇到不稳定或不易学习的问题:噪声 ϵ \epsilon ϵ本身是随机的,直接优化可能会导致大的不确定性

v-prediction公式推导

《PROGRESSIVE DISTILLATION FOR FAST SAMPLING OF DIFFUSION MODELS》(ICLR2022、CCF-A)
在这里插入图片描述
在DDPM中,加噪公式为 x t = α ˉ t x 0 + 1 − α ˉ t ϵ \mathbf{x}_{t}=\sqrt{\bar{\alpha}_{t}}\mathbf{x}_{0}+\sqrt{1-\bar{\alpha}_{t}}\epsilon xt=αˉt x0+1αˉt ϵ,可以看到 x 0 x_0 x0 ϵ \epsilon ϵ前面的权重系数的平方和为1,和 s i n ( ϕ ) 2 + c o s ( ϕ ) 2 = 1 sin(\phi)^2+cos(\phi)^2=1 sin(ϕ)2+cos(ϕ)2=1类似,所以我们可以把这两个权重系数当作单位圆半径向量在x轴和y轴上的投影,也就是上图所示的 α \alpha α σ \sigma σ ⇒ \Rightarrow z t = α t x 0 + σ t ϵ \mathbf{z_{t}}=\alpha_{t}\mathbf{x}_0+\sigma_{t}\epsilon zt=αtx0+σtϵ,其中 x 0 \mathbf{x}_0 x0是DDPM中的 x 0 x_0 x0 α t \alpha_t αt是DDPM中的 α ˉ t \sqrt{\bar{\alpha}_{t}} αˉt z t z_t zt是DDPM中的 x t x_t xt σ t \sigma_t σt

### 扩散模型中的两种参数化方式 在机器学习领域,扩散模型通过逐步向数据添加噪声来建模复杂分布,并反过来学习去除这些噪声以恢复原始数据。对于扩散过程及其逆过程,存在两种主要的参数化方法。 #### 噪声预测(Noise Prediction) 一种常见的参数化策略是让神经网络直接预测加到输入上的高斯噪声。具体来说,在前向过程中,给定一个干净的数据样本 \( \mathbf{x}_0 \),该算法会逐渐加入更多的随机噪声直到达到完全无结构的状态。而在反向生成阶段,则训练模型估计每一步所对应的噪声项: \[ \epsilon_\theta(\mathbf{x}_t, t) = p_{\text{data}} (\mathbf{\epsilon} | \mathbf{x}_t, t) \] 其中 \( \mathbf{x}_t \) 表示时间步 `t` 的含噪版本,而 \( \epsilon_\theta \) 是由参数 θ 定义的函数[^1]。 ```python def noise_prediction(x_t, t, model): """ 使用模型预测当前时刻的噪声. 参数: x_t (Tensor): 当前时刻含有噪声的数据张量 t (int): 时间索引 model (nn.Module): 预测噪声的深度学习模型 返回: Tensor: 对应于x_t的时间步长处的预测噪声 """ predicted_noise = model(x_t, t) return predicted_noise ``` #### 数据重建(Data Reconstruction) 另一种方案则是使模型专注于重构原图而非仅仅关注如何移除特定水平下的扰动。这意味着目标变为最小化实际观测值与其经去噪处理后的近似之间的差异。因此,损失函数设计成衡量两者间的距离度量,比如均方误差(MSE): \[ L_{\text {recon }}=\frac{1}{2 N} \sum_{i=1}^{N}\left|\hat{\mathbf{x}}_0-\mathbf{x}_{0 i}\right|^2 \] 这里 \( \hat{\mathbf{x}}_0 \) 代表基于中间状态推断出来的初始条件猜测值;\( \mathbf{x}_{0 i} \) 则对应真实的起始配置[^2]。 ```python import torch.nn.functional as F def data_reconstruction_loss(clean_x, reconstructed_x): """ 计算清洁图像与重建图像之间的MSE损失. 参数: clean_x (Tensor): 清洁的目标图像 reconstructed_x (Tensor): 模型重建的结果 返回: float: MSE损失数值 """ mse_loss = F.mse_loss(reconstructed_x, clean_x) return mse_loss.item() ``` 这两种不同的视角提供了灵活的选择框架用于构建高效的生成对抗网络和其他类型的概率图形模型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值