← 返回题目列表

扩散模型为什么用 U-Net?时间步 t 是怎么注入网络的?

高频 中等 第 3 / 25 题 更新于 2026/09/25
U-Net时间步嵌入扩散模型网络结构
学习 AI 实战项目

简化版

扩散模型传统上常用 U-Net,因为去噪是输入输出空间对齐的密集预测,多尺度编码—解码能兼顾大范围结构与局部细节,Skip Connection 还能把对应尺度的特征直接送到解码端。时间步或噪声强度通常经正弦/Fourier 特征与 MLP 编码,再以相加或 scale-shift 方式注入多个残差块;具体网络不要求“每个块”都采用同一种注入。文本条件则可由 Cross-Attention 等机制提供。

详细版

为什么是 U-Net

  • 输入输出同形:去噪要从 x_t 预测同尺寸的噪声 ε,是典型的「图到图」密集预测,U-Net 正为此设计。
  • 多尺度感受野:下采样让深层看到全局结构(物体、布局),上采样逐步恢复分辨率。
  • 跳跃连接:把编码器同尺度特征送给解码器,缩短高分辨率信息路径并利于融合局部与全局信息;它不等于无损复制原图高频,因为编码特征本身来自带噪输入且仍会被网络变换。

U-Net 里的关键模块

  1. 残差块(ResBlock):卷积 + 归一化 + 残差,主力特征提取;时间嵌入在这里注入。
  2. 自注意力块:在中低分辨率层加入,让空间位置间做全局交互(卷积只有局部感受野,注意力补全局)。
  3. 交叉注意力块:注入文本条件(文生图)。
  4. 下采样/上采样:改变分辨率。

时间步注入三步

1) t → 正弦位置编码 → 得到高维向量
2) → 小 MLP → 时间嵌入 t_emb
3) 在每个 ResBlock 内:把 t_emb 加到特征上(或生成 scale/shift 调制)

为什么每个块都要注入 t

不同噪声水平对应不同的条件分布和最优预测函数。把时间表示注入多个深度层级,可让网络按 SNR 调整特征处理;“高噪声管结构、低噪声修细节”是常见观察,不是所有模型和采样轨迹的硬分工。

完整版教学

一、先想清楚去噪网络的”任务形状”

扩散网络的输入是带噪图或 latent x_t,输出通常是同形状的 ε、v 或 x₀ 预测。这是输入输出空间对齐的密集预测任务,U-Net 是成熟而有效的选择之一;任务形状解释了它为何合适,但不推出它是唯一或必然最优架构。

二、U-Net 三大件各自解决什么

① 下采样编码器——获取全局语义 单层卷积作用于局部邻域,堆叠也能扩大感受野;逐级下采样能更高效地扩大有效感受野,并在较少空间 Token 上处理全局结构。它以损失部分空间分辨率为代价换取多尺度表示。

② 上采样解码器——恢复分辨率 预测的噪声必须和输入同尺寸,所以要把下采样压缩的特征一步步上采样回原分辨率。

③ 跳跃连接——挽救高频细节(U-Net 的精髓) 下采样会丢失空间细节,光靠低分辨率瓶颈恢复较困难。Skip Connection 把同尺度编码特征直接送到解码端,使梯度和高分辨率特征都有短路径;这些特征仍是网络从带噪输入提取的表示,并非把原始纹理原封不动抄过去。

记忆图景:U 的左半边「看懂整体」,右半边「重建细节」,中间横线(跳连)「把细节抄过去」。

三、为什么还要往 U-Net 里塞注意力

纯卷积 U-Net 只有局部感受野,难以建模「相距很远的两个区域要协调一致」(比如画面左右两只眼睛要对称、风格要统一)。于是在中低分辨率层插入自注意力,让所有空间位置两两交互,补上全局一致性。放在低分辨率是因为注意力是 O(N²) 复杂度,高分辨率算不起。文生图再加交叉注意力注入文本。这也解释了扩散模型后来能顺势演化到「纯 Transformer(DiT)」——注意力早就是 U-Net 里的重要成分了。

四、时间步嵌入:把”第几步”翻译成网络听得懂的信号

网络必须知道当前处于哪个噪声水平,否则无法给出正确的去噪量。t 是个整数(1…1000),直接喂没意义,要先编码:

第一步,正弦位置编码:和 Transformer 位置编码同理,用不同频率的 sin/cos 把标量 t 映射成一个高维向量。好处是连续、平滑、不同 t 可区分,且对相近的 t 给出相近的编码。

第二步,MLP 投影:过一两层带激活的全连接,得到时间嵌入 t_emb,维度对齐特征通道。

第三步,注入每个 ResBlock:常见两种方式——

  • 相加:把 t_emb(广播到空间维)直接加到特征图上。
  • 调制(FiLM/scale-shift):用 t_emb 生成一组 (γ, β),对归一化后的特征做 γ·feature + β。这种自适应调制通常比单纯相加更强,SD/DiT 都在用。

为什么在多个层级注入:同一网络要覆盖从高到低的多种 SNR,浅层和深层特征都需要据此改变处理方式。常见 U-Net 会在许多 ResBlock 注入时间嵌入,但具体位置由架构决定;核心要求是条件能充分影响输出,而非机械规定每个块必须注入。

五、把一次前向串起来

输入: x_t (带噪潜图), t (时间步), c (文本)
1. t → 正弦编码 → MLP → t_emb
2. c → 文本编码器 → 文本嵌入
3. x_t 进入 U-Net:
   编码器: [ResBlock(注入 t_emb) → (自注意力/交叉注意力) → 下采样] × N
   中间块: ResBlock + 自注意力 + 交叉注意力
   解码器: [上采样 → 拼接跳连特征 → ResBlock(注入 t_emb) → 注意力] × N
4. 输出: 预测噪声 ε_θ(x_t, t, c)

六、看一次多尺度特征怎样流动

若输入潜变量为 64×64×4,第一次下采样后可变成 32×32×C,继续降到 16×16、8×8;解码时逐级恢复分辨率,并通过 skip connection 拼接同尺度编码特征。低分辨率层更容易建模全局布局,高分辨率跳连保留边缘与纹理,所以 U-Net 同时兼顾结构和细节。

位置空间尺寸示例主要信息
编码浅层64×64局部纹理、边缘
中间层8×8全局语义与布局
解码深层64×64融合语义后恢复细节

时间步嵌入告诉网络当前噪声强度:高噪声阶段应先恢复粗结构,低噪声阶段再修细节。同一个带噪输入若配错时间步,网络会采用错误的去噪尺度;因此 timestep 的采样分布、嵌入注入位置和推理调度器必须成套验证。

七、常见误区与追问

  • 误区:U-Net 输出的是去噪后的图。 输出的是噪声预测 ε(或 x₀/v),图像由采样公式反解。
  • 误区:时间步只能在入口注入一次或必须注入每个块。 常见做法是在多个 ResBlock 重复注入,但具体覆盖范围是架构选择,验收看条件是否充分传递。
  • 追问:跳跃连接为什么重要? 它缩短同尺度特征和梯度路径,帮助融合局部细节与瓶颈处的全局表示,但不是无损旁路。
  • 追问:注意力为什么常放在低分辨率层? 全局注意力成本随空间 Token 数平方增长,低分辨率更经济;现代模型也会借助高效或局部注意力覆盖更高分辨率。
  • 追问:一定要用 U-Net 吗? 不是。近年 DiT(Diffusion Transformer) 用纯 Transformer 替代 U-Net,扩展性更好,是 SD3、Sora 的方向;但 U-Net 仍是理解扩散网络结构的基础。
  • 追问:时间步编码和 Transformer 位置编码是一回事吗? 都可能使用正弦/Fourier 特征,但输入语义、频率设计和后续注入方式不同,也都可以采用可学习变体。

八、加强记忆

U-Net 用“多尺度下采样—瓶颈—上采样”处理同形状去噪输出,Skip Connection 为同尺度局部特征提供短路径,注意力则补充远距离交互和文本读取。时间条件记“噪声标量编码—MLP—多层相加或调制”,因为一个共享网络必须针对不同 SNR 实现不同函数。守住两个边界:Skip 不是无损复制高频,时间也不必机械注入每个块;DiT 证明 U-Net 是强基线而非唯一选择。