Skip to content

Commit 401d436

Browse files
committed
AIGC图像创作&AI绘画基础板块内容第一章节第一大问题内容更新
1 parent 9cb3146 commit 401d436

5 files changed

Lines changed: 114 additions & 24 deletions

AIGC图像创作&AI绘画基础/01_Stable Diffusion系列大模型基础.md

Lines changed: 114 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,9 @@
119119

120120
<h2 id="q-002">面试问题:DDPM中的马尔可夫链是如何定义的?介绍一下DDPM的前向扩散过程和反向去噪过程</h2>
121121

122-
DDPM的核心是**两个对称的一阶马尔可夫链**:一个是**固定的前向扩散链**(逐步将数据转化为纯噪声),另一个是**可学习的反向去噪链**(逐步从纯噪声中恢复数据)。整个模型通过变分推断训练反向链,使其精确逆转前向扩散过程。
122+
DDPM的核心是**两个对称的一阶马尔可夫链**:一个是**人为设计的固定前向扩散链**(逐步将数据转化为纯噪声),另一个是**可学习的反向去噪链**(逐步从纯噪声中恢复数据)。整个模型通过变分推断训练反向链,使其精确逆转前向扩散过程。
123+
124+
![DDPM扩散模型的前向扩散过程和反向去噪过程示意图](./imgs/DDPM扩散模型的前向扩散过程和反向去噪过程示意图.png)
123125

124126
### 1. DDPM中马尔可夫链的核心定义
125127

@@ -129,9 +131,11 @@ DDPM是一个隐变量模型,其所有状态转移都满足**一阶马尔可
129131
- 反向过程(生成): $p_\theta(x_{0:T}) = p(x_T) \prod_{t=1}^T p_\theta(x_{t-1}|x_t)$ ,是**可学习参数**的马尔可夫链
130132
- 所有隐变量 $x_1,...,x_T$ 与数据 $x_0$ 具有相同维度
131133

132-
### 2. 前向扩散过程(数据→噪声)
134+
### 2. DDPM的前向扩散过程(数据→噪声)
135+
136+
前向扩散过程的目标是**逐步向原始数据添加微小的高斯噪声**,经过 $T$ 步后将数据完全转化为标准高斯噪声。
133137

134-
前向过程的目标是**逐步向原始数据添加微小的高斯噪声**,经过 $T$ 步后将数据完全转化为标准高斯噪声。
138+
![DDPM扩散模型的前向扩散过程示意图](./imgs/DDPM扩散模型的前向扩散过程示意图.png)
135139

136140
#### 1. 转移分布定义
137141

@@ -161,58 +165,147 @@ x_t = \sqrt{\bar{\alpha}_t}x_0 + \sqrt{1-\bar{\alpha}_t}\epsilon, \quad \epsilon
161165
- 无需逐步迭代 $T$ 步,可一步生成任意时刻的带噪声样本
162166
- 当 $T$ 足够大时(论文中 $T=1000$ ), $\bar{\alpha}_T \to 0$ , $x_T \approx \mathcal{N}(0,I)$ ,即最终状态服从标准高斯分布,作为生成过程的先验
163167

164-
### 3. 反向去噪过程(噪声→数据)
168+
### 3. DDPM的反向去噪过程(噪声→数据)
165169

166-
反向过程的目标是**学习一个马尔可夫链,精确逆转前向扩散过程**,从标准高斯噪声 $x_T$ 出发,逐步生成清晰图像 $x_0$ 。
170+
反向去噪过程的目标是**学习一个马尔可夫链,精确逆转前向扩散过程**,从标准高斯噪声 $x_T$ 出发,逐步生成清晰图像 $x_0$ 。
171+
172+
![DDPM扩散模型反向去噪过程示意图](./imgs/DDPM扩散模型反向去噪过程示意图.png)
167173

168174
#### 1. 转移分布建模
169175

170-
由于前向过程每步添加的噪声很小,反向过程的转移分布也可建模为高斯分布
176+
由于前向扩散过程每步添加的噪声很小,反向去噪过程的转移分布也可建模为高斯分布
171177

172178
```math
173179
p_\theta(x_{t-1}|x_t) = \mathcal{N}\left(x_{t-1}; \mu_\theta(x_t,t), \sigma_t^2 I\right)
174180
```
175181

176-
- 均值 $\mu_\theta(x_t,t)$ :由神经网络(U-Net)学习得到,是模型的核心参数
182+
- 均值 $\mu_\theta(x_t,t)$ :由神经网络(U-Net、DiT、Tranformer等)学习得到,是模型的核心参数
177183
- 方差 $\sigma_t^2$ :论文中设为固定值,通常取 $\sigma_t^2 = \beta_t$ 或 $\tilde{\beta}_t = \frac{1-\bar{\alpha}_{t-1}}{1-\bar{\alpha}_t}\beta_t$ (两种极端情况效果相近)
178184

179-
#### 2. 最优均值推导(ε-预测参数化)
185+
#### 2. 最优均值推导( $ε$ -预测参数化)
186+
187+
反向去噪过程真正想学习的是 $p_\theta(x_{t-1}|x_t)$ :给定当前带噪样本 $x_t$ ,预测上一步更干净的样本 $x_{t-1}$ 。但训练时有一个很关键的便利条件:我们手里有真实训练图像 $x_0$ ,而前向扩散过程 $q$ 又是人为定义好的高斯马尔可夫链。因此在训练阶段,可以先计算一个“标准答案”:
188+
189+
```math
190+
q(x_{t-1}|x_t,x_0)
191+
```
192+
193+
这个公式表示:如果已经知道原图 $x_0$ ,也知道加噪后的 $x_t$ ,那么中间状态 $x_{t-1}$ 最可能是什么样。这个分布不是模型学习出来的,而是由前向扩散公式严格推出来的,所以可以作为反向去噪模型 $p_\theta(x_{t-1}|x_t)$ 的学习目标。
194+
195+
根据贝叶斯定理,前向扩散过程的后验分布(已知 $x_t$ 和 $x_0$ 时 $x_{t-1}$ 的分布)可以写成:
196+
197+
```math
198+
q(x_{t-1}|x_t,x_0) = \frac{q(x_t|x_{t-1},x_0)q(x_{t-1}|x_0)}{q(x_t|x_0)}
199+
```
200+
201+
由于前向过程满足一阶马尔可夫性, $x_t$ 在给定 $x_{t-1}$ 后不再依赖 $x_0$ ,所以:
202+
203+
```math
204+
q(x_{t-1}|x_t,x_0) = \frac{q(x_t|x_{t-1})q(x_{t-1}|x_0)}{q(x_t|x_0)}
205+
```
206+
207+
这里三项都已经知道:
208+
209+
```math
210+
q(x_t|x_{t-1}) = \mathcal{N}\left(x_t;\sqrt{\alpha_t}x_{t-1},\beta_t I\right)
211+
```
180212

181-
根据贝叶斯定理,前向过程的后验分布(已知 $x_t$ 和 $x_0$ 时 $x_{t-1}$ 的分布)是可计算的:
213+
```math
214+
q(x_{t-1}|x_0) = \mathcal{N}\left(x_{t-1};\sqrt{\bar{\alpha}_{t-1}}x_0,(1-\bar{\alpha}_{t-1})I\right)
215+
```
216+
217+
```math
218+
q(x_t|x_0) = \mathcal{N}\left(x_t;\sqrt{\bar{\alpha}_t}x_0,(1-\bar{\alpha}_t)I\right)
219+
```
220+
221+
直观理解: $q(x_t|x_{t-1})$ 告诉我们“ $x_{t-1}$ 经过一步加噪后要能解释当前的 $x_t$ ”, $q(x_{t-1}|x_0)$ 告诉我们“ $x_{t-1}$ 又必须是从原图 $x_0$ 加噪 $t-1$ 步得到的合理状态”。这两个高斯约束相乘后,仍然是一个高斯分布。因此后验分布可计算为:
182222

183223
```math
184224
q(x_{t-1}|x_t,x_0) = \mathcal{N}\left(x_{t-1}; \tilde{\mu}_t(x_t,x_0), \tilde{\beta}_t I\right)
185225
```
186226

187-
其中最优均值为:
227+
其中后验方差为:
228+
229+
```math
230+
\tilde{\beta}_t = \frac{1-\bar{\alpha}_{t-1}}{1-\bar{\alpha}_t}\beta_t
231+
```
232+
233+
后验均值(也就是“如果知道真实 $x_0$ ,最合理的反向均值”)为:
188234

189235
```math
190236
\tilde{\mu}_t(x_t,x_0) = \frac{\sqrt{\alpha_t}(1-\bar{\alpha}_{t-1})}{1-\bar{\alpha}_t}x_t + \frac{\sqrt{\bar{\alpha}_{t-1}}\beta_t}{1-\bar{\alpha}_t}x_0
191237
```
192238

193-
将 $x_0 = \frac{x_t - \sqrt{1-\bar{\alpha}_t}\epsilon}{\sqrt{\bar{\alpha}_t}}$ (来自前向过程重参数化)代入上式,可将最优均值转化为**预测噪声** $\epsilon$ 的形式:
239+
这个公式看起来复杂,但含义很朴素: $\tilde{\mu}_t$ 是 $x_t$ 和 $x_0$ 的加权平均。当前状态 $x_t$ 提供“现在已经噪到什么程度”的信息,原图 $x_0$ 提供“最终应该回到哪里”的信息,权重由噪声调度 $\alpha_t,\beta_t,\bar{\alpha}_t$ 决定。
240+
241+
问题来了:采样生成时我们只有 $x_t$ ,并不知道真实的 $x_0$ 。如果直接让神经网络预测均值 $\mu_\theta(x_t,t)$ ,它需要学习一个比较绕的加权均值函数。DDPM的关键技巧是利用前向扩散的重参数化公式:
242+
243+
```math
244+
x_t = \sqrt{\bar{\alpha}_t}x_0 + \sqrt{1-\bar{\alpha}_t}\epsilon
245+
```
246+
247+
将它改写为:
248+
249+
```math
250+
x_0 = \frac{x_t - \sqrt{1-\bar{\alpha}_t}\epsilon}{\sqrt{\bar{\alpha}_t}}
251+
```
252+
253+
也就是说,只要知道 $x_t$ 中混入了多少噪声 $\epsilon$ ,就可以反推出对应的干净图像 $x_0$ 的估计。将这个 $x_0$ 代入后验均值公式:
254+
255+
```math
256+
\tilde{\mu}_t(x_t,x_0)
257+
= \frac{\sqrt{\alpha_t}(1-\bar{\alpha}_{t-1})}{1-\bar{\alpha}_t}x_t
258+
+ \frac{\sqrt{\bar{\alpha}_{t-1}}\beta_t}{1-\bar{\alpha}_t}
259+
\cdot
260+
\frac{x_t-\sqrt{1-\bar{\alpha}_t}\epsilon}{\sqrt{\bar{\alpha}_t}}
261+
```
262+
263+
利用 $\bar{\alpha}_t=\alpha_t\bar{\alpha}_{t-1}$ 化简,可以得到:
264+
265+
```math
266+
\tilde{\mu}_t(x_t,x_0)
267+
= \frac{1}{\sqrt{\alpha_t}}\left(x_t-\frac{\beta_t}{\sqrt{1-\bar{\alpha}_t}}\epsilon\right)
268+
```
269+
270+
于是,原本的“预测反向均值”问题就变成了“预测前向过程中加入的噪声”问题。训练时真实噪声 $\epsilon$ 是已知的,因为 $x_t$ 就是我们用下面这个公式人为合成出来的:
271+
272+
```math
273+
x_t = \sqrt{\bar{\alpha}_t}x_0 + \sqrt{1-\bar{\alpha}_t}\epsilon, \quad \epsilon \sim \mathcal{N}(0,I)
274+
```
275+
276+
所以模型只需要学习:
277+
278+
```math
279+
\epsilon_\theta(x_t,t) \approx \epsilon
280+
```
281+
282+
再把预测噪声 $\epsilon_\theta(x_t,t)$ 代入化简后的后验均值,就得到反向过程使用的模型均值:
194283

195284
```math
196285
\mu_\theta(x_t,t) = \frac{1}{\sqrt{\alpha_t}}\left(x_t - \frac{\beta_t}{\sqrt{1-\bar{\alpha}_t}}\epsilon_\theta(x_t,t)\right)
197286
```
198287

199288
其中 $\epsilon_\theta(x_t,t)$ 是神经网络,输入带噪声样本 $x_t$ 和时间步 $t$ ,输出预测的噪声 $\epsilon$ 。
200289

290+
可以把整个逻辑串成一句话:
291+
292+
前向过程可计算 → 后验 $q(x_{t-1}|x_t,x_0)$ 有解析最优均值 → 最优均值依赖 $x_0$ → $x_0$ 又可以由 $x_t$ 和噪声 $ε$ 表示 → 所以学习均值等价于学习噪声 $ε$ → 训练目标变成简单的噪声预测 MSE。
293+
201294
这是DDPM最关键的创新:**将学习复杂的均值函数转化为简单的噪声预测任务**,大大简化了训练目标。
202295

203-
#### 3. 训练目标
296+
#### 3. DDPM的训练目标
204297

205-
通过最大化对数似然的变分下界,最终化简得到DDPM的简化训练目标(论文中效果最好的版本):
298+
通过最大化对数似然的变分下界,我们可以最终化简得到DDPM的简化训练目标(DDPM论文中效果最好的版本):
206299

207300
```math
208301
L_{\text{simple}}(\theta) = \mathbb{E}_{t \sim U(1,T), x_0 \sim q(x_0), \epsilon \sim \mathcal{N}(0,I)}\left[\left\|\epsilon - \epsilon_\theta\left(\sqrt{\bar{\alpha}_t}x_0 + \sqrt{1-\bar{\alpha}_t}\epsilon, t\right)\right\|^2\right]
209302
```
210303

211-
- 训练流程:随机采样时间步 $t$ 、原始图像 $x_0$ 和噪声 $\epsilon$ ,生成带噪声样本 $x_t$ ,让模型预测 $\epsilon$ ,计算MSE损失并反向传播
304+
训练流程:随机采样时间步 $t$ 、原始图像 $x_0$ 和噪声 $\epsilon$ ,生成带噪声样本 $x_t$ ,让模型预测 $\epsilon$ ,计算MSE损失并反向传播
212305

213-
#### 4. 采样流程(算法2)
306+
#### 4. 采样流程
214307

215-
训练完成后,生成样本的过程如下
308+
训练完成后,DDPM生成样本的过程如下
216309

217310
**步骤 1**:从标准高斯分布采样初始噪声 $x_T \sim \mathcal{N}(0,I)$ 。
218311

@@ -229,11 +322,11 @@ x_{t-1} = \frac{1}{\sqrt{\alpha_t}}\left(x_t - \frac{\beta_t}{\sqrt{1-\bar{\alph
229322

230323
<h2 id="q-003">面试问题:介绍一下DDPM中的重参数技巧</h2>
231324

232-
**DDPM中的重参数技巧是整个模型能够高效训练的数学基石**。它将原本不可导的随机采样过程转化为可导的确定性计算,不仅解决了反向传播的问题,更将DDPM的训练目标从复杂的变分下界简化为了简单的MSE损失,让扩散模型从理论构想变成了可实际训练的生成模型。
325+
**DDPM中的重参数技巧(Reparameterization Trick)是扩散模型能够高效训练的数学基石**。它将原本不可导的随机采样过程转化为可导的确定性计算,不仅解决了反向传播的问题,更将DDPM的训练目标从复杂的变分下界简化为了简单的MSE损失,让扩散模型从理论构想变成了可实际训练的生成模型。
233326

234327
### 1. 重参数技巧的本质
235328

236-
重参数技巧(Reparameterization Trick)的核心思想是**将随机变量的采样过程拆分为"确定性变换+独立随机噪声采样"两部分,把随机性从计算图中分离出来,使得整个过程对模型参数可导**
329+
重参数技巧的核心思想是**将随机变量的采样过程拆分为"确定性变换+独立随机噪声采样"两部分,把随机性从计算图中分离出来,使得整个过程对模型参数可导**
237330

238331
在VAE中,重参数用于后验分布 $q(z|x)$ 的采样;而在DDPM中,重参数**专门用于前向扩散过程的边缘分布 $q(x_t|x_0)$ 的采样**,这是DDPM与其他生成模型的关键区别。
239332

@@ -294,7 +387,7 @@ x_0 = \frac{x_t - \sqrt{1-\bar{\alpha}_t}\epsilon}{\sqrt{\bar{\alpha}_t}}
294387

295388
<h2 id="q-003a">面试问题:DDPM训练目标中的L_simple、L_vlb、混合损失各自解决什么问题?</h2>
296389

297-
DDPM的三个训练目标**从理论严谨性到工程实用性形成了完整的梯度**: $L_{\text{vlb}}$ 是严格的概率理论基础, $L_{\text{simple}}$ 是工业界标准的工程实现,混合损失则兼顾了两者的优点。理解它们的取舍关系,是掌握扩散模型训练精髓的核心。
390+
DDPM的三个训练目标**从理论严谨性到工程实用性形成了完整的梯度**: $L_{\text{vlb}}$ 是严格的概率理论基础, $L_{\text{simple}}$ 是工业界标准的工程实现,混合损失则兼顾了两者的优点。Rocky人为理解它们的取舍关系,是掌握扩散模型训练精髓的核心。
298391

299392
### 1. 核心前提:所有损失都源自变分下界
300393

@@ -356,7 +449,7 @@ L_{\text{simple}}(\theta) = \mathbb{E}_{t \sim U(1,T), x_0 \sim q(x_0), \epsilon
356449

357450
#### 3. 理论依据(为什么去掉权重依然有效)
358451

359-
论文证明:当神经网络足够强大时,优化 $L_{\text{simple}}$ 和优化 $L_{\text{vlb}}$ 的**最优解是完全一致的**。 $L_{\text{simple}}$ 本质上是一个**加权的变分下界**,只是权重与 $L_{\text{vlb}}$ 不同,它更符合人类的视觉感知特性。
452+
DDPM论文中证明:当神经网络足够强大时,优化 $L_{\text{simple}}$ 和优化 $L_{\text{vlb}}$ 的**最优解是完全一致的**。 $L_{\text{simple}}$ 本质上是一个**加权的变分下界**,只是权重与 $L_{\text{vlb}}$ 不同,它更符合人类的视觉感知特性。
360453

361454
#### 4. 局限性
362455

@@ -391,10 +484,7 @@ L_{\text{mixed}} = \lambda L_{\text{simple}} + (1-\lambda) L_{\text{vlb}}
391484

392485
其中 $\lambda \in (0,1)$ 是平衡系数,通常取 $\lambda=0.9$ 左右。
393486

394-
#### 3. 解决的核心问题
395-
396-
- 打破了"样本质量和对数似然不可兼得"的困境,让模型既拥有媲美GAN的生成质量,又具备概率模型的可解释性和可评估性。
397-
- 适用于对概率性能有要求的场景,如数据压缩、异常检测等。
487+
打破了"样本质量和对数似然不可兼得"的困境,让模型既拥有超越GAN的生成质量,又具备概率模型的可解释性和可评估性。
398488

399489

400490
<h2 id="q-005">面试问题:DDPM是预测噪声还是预测当前分布?为什么DDPM加噪声的幅度是不一致的?扩散模型中添加的是高斯噪声,能否使用其他噪声的加噪方式?</h2>
-11.3 KB
Binary file not shown.
1.38 MB
Loading
4.18 MB
Loading
787 KB
Loading

0 commit comments

Comments
 (0)