这张图片展示了两个算法,分别是用于训练和采样的。以下是这两个算法的解释:
算法1:训练
这个算法描述了如何训练模型参数 θ \theta θ。
- repeat: 训练过程是一个迭代的过程,重复以下步骤直到收敛。
- x 0 ∼ q ( x 0 ) x_0 \sim q(x_0) x0∼q(x0): 从数据分布 q ( x 0 ) q(x_0) q(x0)中采样一个样本 x 0 x_0 x0。
- t ∼ Uniform ( { 1 , … , T } ) t \sim \text{Uniform}(\{1, \ldots, T\}) t∼Uniform({1,…,T}): 从均匀分布 { 1 , … , T } \{1, \ldots, T\} {1,…,T}中随机选择一个时间步 t t t。
- ϵ ∼ N ( 0 , I ) \epsilon \sim \mathcal{N}(0, I) ϵ∼N(0,I): 从标准正态分布 N ( 0 , I ) \mathcal{N}(0, I) N(0,I)中采样噪声 ϵ \epsilon ϵ。
- 梯度下降: 执行一次梯度下降步骤,优化目标是 ∥ ϵ − ϵ θ ( α ˉ t x 0 + 1 − α ˉ t ϵ , t ) ∥ 2 \|\epsilon - \epsilon_\theta(\sqrt{\bar{\alpha}_t}x_0 + \sqrt{1 - \bar{\alpha}_t}\epsilon, t)\|^2 ∥ϵ−ϵθ(αˉtx0+1−αˉtϵ,t)∥2。
- 直到收敛: 重复上述步骤直到模型收敛。
算法2:采样
这个算法描述了如何从训练好的模型中生成样本。
- x T ∼ N ( 0 , I ) x_T \sim \mathcal{N}(0, I) xT∼N(0,I): 从标准正态分布 N ( 0 , I ) \mathcal{N}(0, I) N(0,I)中采样初始样本 x T x_T xT。
- for t = T , … , 1 t = T, \ldots, 1 t=T,…,1do: 从 T T T到 1 1 1依次执行以下步骤。
- 采样 z z z: 如果 t > 1 t > 1 t>1,从标准正态分布 N ( 0 , I ) \mathcal{N}(0, I) N(0,I)中采样噪声 z z z;否则 z = 0 z = 0 z=0。
- 更新 x t − 1 x_{t-1} xt−1: 使用公式 x t − 1 = 1 α t ( x t − 1 − α t 1 − α ˉ t ϵ θ ( x t , t ) ) + σ t z x_{t-1} = \frac{1}{\sqrt{\alpha_t}} \left( x_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}_t}} \epsilon_\theta(x_t, t) \right) + \sigma_t z xt−1=αt1(xt−1−αˉt1−αtϵθ(xt,t))+σtz更新样本。
- end for: 循环结束。
- return x 0 x_0 x0: 返回生成的样本 x 0 x_0 x0。
这两个算法分别用于训练模型和从模型中生成样本。训练过程通过最小化噪声预测误差来优化模型参数,而采样过程则使用优化后的模型逐步从噪声生成样本。