流模型和扩散模型用神经网络参数化向量场 u t θ ( x ∣ y ) u_t^\theta(x\mid y) u t θ ( x ∣ y ) 。网络接收带噪状态 x ∈ R d x\in\mathbb R^d x ∈ R d 、条件变量 y ∈ Y y\in\mathcal Y y ∈ Y 与时间 t ∈ [ 0 , 1 ] t\in[0,1] t ∈ [ 0 , 1 ] ,并输出同形状的预测向量。这里并非只做一次图像到图像的映射:同一网络要在整条概率路径上反复使用,既要在高噪声阶段决定全局布局,也要在接近数据时修补边缘和纹理。低维任务可以把三个输入拼接后送入 MLP,图像和视频则需要同时保留空间结构、扩大感受野,并让条件在不同尺度上持续影响计算。
条件嵌入
时间 t t t 告诉网络当前面对的是哪一种去噪难度:噪声很强时,局部像素几乎不可信;噪声较弱时,大体结构已经形成,预测应更关注细节。若只输入一个标量,深层网络必须自己把这条一维坐标展开成许多不同变化速度的响应。傅立叶特征预先提供从低频到高频的时间基函数,使网络既容易表示随 t t t 缓慢变化的全局策略,也能表示某些噪声区间内迅速变化的修正。对偶数 d d d ,可定义
T i m e E m b ( t ) = 2 d [ cos ( 2 ω 1 t ) , … , cos ( 2 ω d / 2 t ) , sin ( 2 ω 1 t ) , … , sin ( 2 ω d / 2 t ) ] T , \mathrm{TimeEmb}(t)
=
\sqrt{\frac{2}{d}}
\left[
\cos(2\omega_1t),\ldots,\cos(2\omega_{d/2}t),
\sin(2\omega_1t),\ldots,\sin(2\omega_{d/2}t)
\right]^\mathsf T,
TimeEmb ( t ) = d 2 [ cos ( 2 ω 1 t ) , … , cos ( 2 ω d /2 t ) , sin ( 2 ω 1 t ) , … , sin ( 2 ω d /2 t ) ] T ,
其中
ω i = ω min ( ω max ω min ) i − 1 d / 2 − 1 , i = 1 , … , d / 2. \omega_i
=
\omega_{\min}
\left(
\frac{\omega_{\max}}{\omega_{\min}}
\right)^{\frac{i-1}{d/2-1}},
\qquad
i=1,\ldots,d/2.
ω i = ω m i n ( ω m i n ω m a x ) d /2 − 1 i − 1 , i = 1 , … , d /2.
每一对正弦和余弦都描述一个频率,乘上 2 / d \sqrt{2/d} 2/ d 后整个向量的范数恒为 1 1 1 ,因此改变 t t t 主要改变方向而不会任意放大条件幅值。频率范围过窄会让相邻时刻难以区分,过宽则可能引入模型和采样网格都用不到的快速振荡;具体范围仍要配合时间参数化与噪声调度选择。
若 y r a w ∈ { 0 , … , N } y_{raw}\in\{0,\ldots,N\} y r a w ∈ { 0 , … , N } 是离散类别,每个类别只需表达一个整体语义,可以直接学习嵌入向量并与向量场网络一起训练。文本同时包含对象、属性和关系,将整句压成单个向量虽然便宜,却会迫使所有图像位置共享同一份语义摘要;保留长度为 S S S 的 token 序列,能让不同图像区域分别查找与自己有关的词。实践中常使用冻结的预训练文本编码器,因为它已经在大规模语料中形成语义空间,生成模型无需从有限图文对中重新学习语言;代价是文本编码器丢失的信息也无法由后续网络恢复。其输出可写为
r = P r o m p t E m b e d ( y r a w ) ∈ R S × k , y ~ = r W y ∈ R S × d , r=\mathrm{PromptEmbed}(y_{raw})\in\mathbb R^{S\times k},
\qquad
\widetilde y=rW_y\in\mathbb R^{S\times d},
r = PromptEmbed ( y r a w ) ∈ R S × k , y = r W y ∈ R S × d ,
其中 W y ∈ R k × d W_y\in\mathbb R^{k\times d} W y ∈ R k × d 把语言特征转换到生成网络使用的隐藏维度。保留 token 序列时,后面的交叉注意力可以为每个图像 patch 动态组合这些词;全局文本表示可看作 S = 1 S=1 S = 1 的特例,计算更省,但细粒度的词—区域对齐能力也更弱。
DiT
图像或潜变量可写成 x ∈ R C × H × W x\in\mathbb R^{C\times H\times W} x ∈ R C × H × W 。逐像素做全局注意力会产生数量巨大的 token,而卷积又难以在浅层直接联系相距很远的区域。DiT 将相邻的 P × P P\times P P × P 像素合成一个 patch,在保留二维布局的同时缩短序列;令 N = ( H / P ) ( W / P ) N=(H/P)(W/P) N = ( H / P ) ( W / P ) 、C ′ = C P 2 C'=CP^2 C ′ = C P 2 ,则
P a t c h i f y ( x ) ∈ R N × C ′ . \mathrm{Patchify}(x)\in\mathbb R^{N\times C'}.
Patchify ( x ) ∈ R N × C ′ .
经线性投影并加入位置嵌入后,初始 token 为
x ~ 0 = P a t c h i f y ( x ) W x + E p o s ∈ R N × d , \widetilde x_0
=
\mathrm{Patchify}(x)W_x+E_{\mathrm{pos}}
\in\mathbb R^{N\times d},
x 0 = Patchify ( x ) W x + E pos ∈ R N × d ,
其中 W x ∈ R C ′ × d W_x\in\mathbb R^{C'\times d} W x ∈ R C ′ × d ,E p o s ∈ R N × d E_{\mathrm{pos}}\in\mathbb R^{N\times d} E pos ∈ R N × d 。自注意力只根据 token 内容计算关系,对输入顺序本身没有偏好;如果不加入位置,交换左上角和右下角的 patch 只会交换输出,网络无法知道物体应当如何排列。位置嵌入为内容相似的 patch 提供不同的空间身份。patch 越大,序列越短且注意力成本越低,但一个 token 内的细节更早被压缩;patch 越小,空间分辨率更好,注意力的 O ( N 2 ) O(N^2) O ( N 2 ) 成本也随之上升。
时间嵌入 t ~ = T i m e E m b ( t ) ∈ R d \widetilde t=\mathrm{TimeEmb}(t)\in\mathbb R^d t = TimeEmb ( t ) ∈ R d 、文本 token y ~ ∈ R S × d \widetilde y\in\mathbb R^{S\times d} y ∈ R S × d 与图像 token 一起进入 L L L 个 DiT block:
x ~ i + 1 = D i T B l o c k ( x ~ i , t ~ , y ~ ) , i = 0 , … , L − 1. \widetilde x_{i+1}
=
\mathrm{DiTBlock}(\widetilde x_i,\widetilde t,\widetilde y),
\qquad
i=0,\ldots,L-1.
x i + 1 = DiTBlock ( x i , t , y ) , i = 0 , … , L − 1.
最后由输出头映射并反 patchify:
u = D e p a t c h i f y ( H e a d ( x ~ L , t ~ ) ) ∈ R C × H × W . u
=
\mathrm{Depatchify}\!\left(
\mathrm{Head}(\widetilde x_L,\widetilde t)
\right)
\in\mathbb R^{C\times H\times W}.
u = Depatchify ( Head ( x L , t ) ) ∈ R C × H × W .
这里 L L L 是网络层数,N N N 只表示 patch 数。经过多层交互后,每个 patch 都能汇集远处区域的信息,因此网络可在同一次前向中协调物体形状、遮挡关系和全局构图。不同 DiT 变体对条件的注入方式并不相同:文本是多个有独立含义的 token,常通过 cross-attention 供图像位置按需读取;类别和时间是全局条件,用它们调制所有 token 的归一化统计通常更直接,经典类别条件 DiT 因而可以不使用 cross-attention。
注意力要解决的是“当前 patch 应从哪些位置取信息”。给定查询 Q ∈ R N × d h Q\in\mathbb R^{N\times d_h} Q ∈ R N × d h 、键和值 K , V ∈ R M × d h K,V\in\mathbb R^{M\times d_h} K , V ∈ R M × d h ,缩放点积注意力为
A t t n ( Q , K , V ) = s o f t m a x ( Q K T d h ) V . \mathrm{Attn}(Q,K,V)
=
\mathrm{softmax}\!\left(
\frac{QK^\mathsf T}{\sqrt{d_h}}
\right)V.
Attn ( Q , K , V ) = softmax ( d h Q K T ) V .
设一层有 H a H_a H a 个头,且 d h = d / H a d_h=d/H_a d h = d / H a 。第 r r r 个头使用
W Q ( r ) , W K ( r ) , W V ( r ) ∈ R d × d h , r = 1 , … , H a , W_Q^{(r)},W_K^{(r)},W_V^{(r)}
\in\mathbb R^{d\times d_h},
\qquad
r=1,\ldots,H_a,
W Q ( r ) , W K ( r ) , W V ( r ) ∈ R d × d h , r = 1 , … , H a ,
并定义
h e a d r ( x , z ) = A t t n ( x W Q ( r ) , z W K ( r ) , z W V ( r ) ) . \mathrm{head}_r(x,z)
=
\mathrm{Attn}\!\left(
xW_Q^{(r)},zW_K^{(r)},zW_V^{(r)}
\right).
head r ( x , z ) = Attn ( x W Q ( r ) , z W K ( r ) , z W V ( r ) ) .
矩阵 Q K T QK^\mathsf T Q K T 为每个查询与所有键计算内容相似度,Softmax 把它变成总和为 1 1 1 的取值权重,除以 d h \sqrt{d_h} d h 则避免维度增大后点积过大、Softmax 过早饱和。令 z = x z=x z = x 时,patch 从其他 patch 读取结构信息;令 z = y ~ z=\widetilde y z = y 时,patch 从文本 token 中选择相关语义。多个头使用不同投影,可以同时表示轮廓关系、颜色对应和长距离依赖等不同交互,拼接后再用 W O ∈ R H a d h × d W_O\in\mathbb R^{H_ad_h\times d} W O ∈ R H a d h × d 投影回隐藏维度:
M H A ( x , z ) = C o n c a t ( h e a d 1 , … , h e a d H a ) W O . \mathrm{MHA}(x,z)
=
\mathrm{Concat}(
\mathrm{head}_1,\ldots,\mathrm{head}_{H_a}
)W_O.
MHA ( x , z ) = Concat ( head 1 , … , head H a ) W O .
时间是整张图共享的全局状态,没有必要像文本一样让每个 patch 单独检索。自适应归一化让时间嵌入直接改变每个通道的工作区间:若 g g g 根据 t ~ \widetilde t t 产生缩放、偏移和门控参数,则其中一个子层可写为
A d a N o r m γ , β ( h ) = ( 1 + γ ) ⊙ N o r m ( h ) + β , \mathrm{AdaNorm}_{\gamma,\beta}(h)
=
(1+\gamma)\odot\mathrm{Norm}(h)+\beta,
AdaNorm γ , β ( h ) = ( 1 + γ ) ⊙ Norm ( h ) + β ,
h ′ = h + α ⊙ M H A ( A d a N o r m γ , β ( h ) , A d a N o r m γ , β ( h ) ) . h'
=
h+\alpha\odot
\mathrm{MHA}\!\left(
\mathrm{AdaNorm}_{\gamma,\beta}(h),
\mathrm{AdaNorm}_{\gamma,\beta}(h)
\right).
h ′ = h + α ⊙ MHA ( AdaNorm γ , β ( h ) , AdaNorm γ , β ( h ) ) .
γ \gamma γ 改变归一化特征的相对幅度,β \beta β 移动其中心,二者让同一组注意力权重在不同噪声时刻处理不同的特征分布;α \alpha α 再控制这一子层应对当前表示改动多少。后续的文本交叉注意力和逐 token MLP 通常各自拥有由 t ~ \widetilde t t 生成的调制参数和残差门控。AdaLN-Zero 将残差门控初始化为零,使很深的网络在训练开始时近似恒等映射,梯度可以先沿主干稳定传播,再逐步学会启用各个分支;仅把缩放和偏移初始化为零,残差分支仍可能输出较大值,不能得到这一稳定性。
U-Net
U-Net 是另一类常用的向量场网络。对固定的 y , t y,t y , t ,输入状态 x x x 与输出 u t θ ( x ∣ y ) u_t^\theta(x\mid y) u t θ ( x ∣ y ) 都保留图像或潜变量的空间布局。去噪既要判断低频的物体布局,也要恢复高频的边缘和纹理,单一分辨率很难经济地兼顾两者;U-Net 用编码—解码结构在不同尺度上分配计算。
典型 U-Net 先用输入卷积提升通道数,再通过多个下采样阶段得到低分辨率、高通道特征,在 bottleneck 处处理全局关系,最后逐级上采样恢复原分辨率。每次下采样都让一个特征单元覆盖更大的原图区域,因而能用较低成本判断物体是否完整、远处区域是否协调;上采样则把这些全局决定重新落实到像素位置。以 256 × 256 256\times256 256 × 256 的 RGB 图像为例,一条简化路径可以写为
x t i n p u t ∈ R 3 × 256 × 256 ⟶ E ( x t i n p u t ) ∈ R 512 × 32 × 32 ⟶ M ⟶ D ⟶ x t o u t p u t ∈ R 3 × 256 × 256 . x_t^{input}\in\mathbb R^{3\times256\times256}
\longrightarrow
\mathcal E(x_t^{input})\in\mathbb R^{512\times32\times32}
\longrightarrow
\mathcal M
\longrightarrow
\mathcal D
\longrightarrow
x_t^{output}\in\mathbb R^{3\times256\times256}.
x t in p u t ∈ R 3 × 256 × 256 ⟶ E ( x t in p u t ) ∈ R 512 × 32 × 32 ⟶ M ⟶ D ⟶ x t o u tp u t ∈ R 3 × 256 × 256 .
如果只依赖 bottleneck,压缩过程中丢失的精确边界很难凭空重建。每个编码阶段因而会保留特征,并通过 skip connection 送到匹配分辨率的解码阶段,再以拼接或相加的方式融合。解码器一边使用深层特征决定“画什么”,一边借助浅层特征确定“具体画在哪里”;这类跨编码器—解码器的连接传递不同尺度的信息,不应与 ResNet block 内帮助优化的 residual connection 混为一谈。
现代扩散 U-Net 通常以 ResNet block、步幅卷积或重采样层完成尺度变化,而不是只依赖固定池化,使下采样本身也能针对生成任务学习。时间嵌入会通过加法、scale-shift 归一化或门控注入各个 ResNet block,让高、低分辨率分支都知道当前该恢复哪一层次的信息;类别嵌入可走同一路径,文本 token 则常在若干分辨率层通过 cross-attention 进入。全局注意力通常优先放在低分辨率层,因为此时 token 少、成本低,而高分辨率卷积负责局部细节。U-Net 的多尺度先验在图像上高效且稳定,DiT 的全局交互和规则堆叠则更容易随数据与计算规模扩展;实际系统会根据分辨率、条件长度和算力取舍,也常把卷积、多尺度与 Transformer 组合使用。