
<a id="n32-title"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N32.html#n32-title)


# 怎样把局部答案接成一次生成？

王德泉 · Coding with AI · Lecture 04


<a id="n32-8bb67bc681eb"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N32.html#n32-8bb67bc681eb)

上一页说明，一次局部预测不等于一张最终图片。完整生成还需要一个循环：当前状态与时刻进入预测器，预测器给出更新所需的信息，采样规则据此计算下一状态，再把新状态送回同一个预测器。参数通常不在这次生成中继续训练；改变的是输入状态和时刻。


<a id="n32-20535159dabc"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N32.html#n32-20535159dabc)

以噪声预测为例，网络输出“这里有多少像扰动的成分”之后，仍需要结合当前状态、噪声日程和目标时刻，才能算出下一张状态图。若改为预测干净图或速度，也需要相应转换与更新。**把网络输出直接保存成图片，可能只是保存了一张预测噪声图，而没有执行采样。**


[课程图解] 预测提供调整信息，更新规则算出新状态；新状态再次进入同一个预测器。；图中标签与关系：当前状态 同一预测器 局部方向 更新规则 下一状态 用新状态，再调用 先预测，再按规则更新
预测提供调整信息，更新规则算出新状态；新状态再次进入同一个预测器。


<a id="n32-72b4ae5db100"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N32.html#n32-72b4ae5db100)

更新规则还决定跨多远以及是否加入新扰动。随机过程可以在初始噪声之外，继续注入逐步随机项；确定性过程则可在给定起点后沿固定规则推进。二者都可能反复调用相同参数的网络。“没有每步新噪声”不等于没有随机生成，因为不同的起始样本仍可产生不同结果。不过，直接从某个DDPM更新公式删掉随机项，已经改变了过程；它不会自动成为具有同样阶段分布的确定性路线。


<a id="n32-47cbe874d2a2"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N32.html#n32-47cbe874d2a2)

**学生问：“第一步已经知道往哪改，后面把这个方向一直用下去不就行了？”** 不够。预测是针对当时那个状态作出的；更新以后，有些轮廓更清楚，另一些歧义可能被消除，适合下一步的方向也会变化。像走一条弯路，只在出发时问一次方向并不能保证后面都沿对的方向走。


<a id="n32-554d91dfe362"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N32.html#n32-554d91dfe362)

在另一些表述中，预测对象与 score 联系起来。这里 score 是当前噪声等级下，对数概率密度随状态变化的局部方向；它不是给整张图片打的“审美分数”，更不是这张图为真的概率。把这个局部量接入随机或确定的动态规则，才成为生成路径的一部分。


<a id="n32-c204d6f9f6a3"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N32.html#n32-c204d6f9f6a3)

训练通常随机抽取各阶段的问题，让网络练习局部能力；采样则必须把这些能力串成完整过程。所以训练某道题的误差较小，并未直接测出一整条生成路径的质量。下一页从这个回路数成本：有几张状态图、走了几步、调用了几次网络，是不是同一个数？


<a id="n32-states"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N32.html#n32-states)


## 画面怎样推进


<a id="n32-b0"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N32.html#n32-b0)

当前状态的预测与计算下一状态的更新规则是两项职责。

[返回这一课堂停点](https://codingai-lec04.pages.dev/classroom/N32.html?step=b0)


<a id="n32-b1"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N32.html#n32-b1)

更新后的状态与时刻送回同一个参数固定的预测器，再作下一次判断。

[返回这一课堂停点](https://codingai-lec04.pages.dev/classroom/N32.html?step=b1)


<a id="n32-b2"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N32.html#n32-b2)

是否继续加入随机扰动属于采样规则；起始随机性与逐步随机项需要分开。

[返回这一课堂停点](https://codingai-lec04.pages.dev/classroom/N32.html?step=b2)


<a id="n32-materials"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N32.html#n32-materials)


## 继续阅读与实验


<a id="n32-learning-unit-001"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N32.html#n32-learning-unit-001)


## 网络预测完噪声，下一状态由谁计算？


<a id="n32-learning-unit-002"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N32.html#n32-learning-unit-002)

沿用xₜ=1.3、信号振幅0.8、噪声振幅0.6与预测ε̂=−0.3，先算得干净估计x̂₀=1.85。若下一阶段信号振幅为0.9、噪声振幅为√0.19，确定性DDIM形式给出xₛ=0.9×1.85+√0.19×(−0.3)≈1.5342。这是状态更新，不是把噪声预测本身当作图像。


<a id="n32-learning-unit-003"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N32.html#n32-learning-unit-003)

下一次再用1.5342与新时间调用相同网络；通常模型权重不变，变化的是样本状态。采样器还规定时间点和是否注入新随机项。直接从随机更新中删掉噪声，会改变算法，不能自动得到保持相同分布的确定性路线。


<a id="n32-learning-unit-004"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N32.html#n32-learning-unit-004)

接着读：[采样器与预测器的责任](https://codingai-lec04.pages.dev/lecture.html#ch05-sampling)及[LAB09使用的确定性更新](https://codingai-lec04.pages.dev/course/notebooks/lab09.html)。


<a id="n32-chapter-reading"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N32.html#n32-chapter-reading)


### [CLS 05 · 扩散：训练、采样与少步生成](https://codingai-lec04.pages.dev/lecture.html#ch05)

按连续正文理解这条方法的训练信号、使用过程与算例；数学与实践在相关问题旁展开。

先看：第5章，从对象和问题开始


<a id="n32-lab09-practice"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N32.html#n32-lab09-practice)


### [LAB 09 · 学得去噪器与完整采样](https://codingai-lec04.pages.dev/course/notebooks/e6fcbdfe3ca2418c9ed09344b4ae2b33.html)

固定初始噪声，仅改采样步数；把网络近似误差与数值步进误差分开。

先看：先看保存结果与读图解释


<a id="n32-lab05-practice"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N32.html#n32-lab05-practice)


### [LAB 05 · 扩散的条件均值与流积分](https://codingai-lec04.pages.dev/course/notebooks/be6db259db4f48478c7481ab51129971.html)

先读本册保存结果，再按实现顺序核对一个算例；最后只改一个变量。

先看：先看保存结果与读图解释


<a id="n32-material-1"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N32.html#n32-material-1)


### [LAB 05｜条件均值、噪声预测与流积分](https://deepnote.com/project/6f83a923-d155-47be-be58-680db701ff7f/notebook/be6db259db4f48478c7481ab51129971)

观察每次更新后为什么要重新计算速度，检查模型预测量和积分方向各自的职责。

先看：第3节“Flow：回归的目标与采样的方向”


<a id="n32-material-2"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N32.html#n32-material-2)


### [Diffusion Models](https://mit-6s978.github.io/assets/pdfs/lec5_diffusion.pdf)

对照训练与采样算法，标出参数更新与状态更新发生在不同阶段。

先看：第59–65页

