01
60 秒回答模板
可以这样回答:在 MMDiT block 里,joint attention 计算完以后,attention 输出一般不会直接作为最终输出,而是先经过 attention output projection,把多头注意力结果映射回模型维度。因为联合注意力阶段通常把不同模态放在同一个注意力计算里,所以输出随后会按原来的 token 长度拆回图像流、文本流等各自 stream。接着每个 stream 通常会通过门控或调制系数控制写入强度,再和 attention 前的输入做残差相加。之后进入该 block 的前馈部分:先做 LayerNorm 或 AdaLayerNorm 一类的归一化/条件调制,再经过 MLP/Feed-Forward,通常是线性升维、激活、线性降维的结构。MLP 输出同样可能经过 gate 控制,然后再做一次残差连接。完成这些步骤后,更新后的各模态 token 会进入下一个 MMDiT block;在最后一个 block 后,图像 latent 分支会继续接输出归一化、线性投影或 unpatchify 等模块,文本或条件分支则可能继续传递、被丢弃或只作为中间条件使用,取决于具体实现。
考点 联合注意力输出
主线 输出投影
易错点 把 joint attention 说成 MMDiT …
02
深入解析
01 联合注意力输出
联合注意力完成后得到的是已经融合跨模态上下文的 token 表示。它的意义是让图像 token 能访问文本条件,让文本 token 或条件 token 也能访问图像侧状态。这里要注意,joint attention 解决的是信息交互问题,不等价于整个 Transformer block 已经结束。
02 输出投影
多头注意力的结果通常会先经过一个 attention output projection,也就是把各个 head 拼接后的表示重新映射回模型隐藏维度。这个投影层承担两个作用:一是恢复统一的通道维度,二是让注意力聚合来的信息经过一次可学习的线性混合。
03 按模态拆分
如果实现中是把图像 token 和文本 token 拼接后一起做 attention,那么 attention 输出通常会按照原始序列长度拆回不同模态。例如前一段对应文本流,后一段对应图像流,具体顺序取决于实现。MMDiT 的关键不是简单拼接后一路共享,而是联合注意力之后仍然保留各模态 stream。
04 门控与调制
在扩散 Transformer 语境里,MMDiT block 往往会引入 timestep embedding 或其他条件 embedding 来生成 modulation 参数,例如 shift、scale、gate。attention 分支的输出可能先乘上 gate,再写回残差主干。这样做的好处是模型可以根据扩散时间步和条件强度动态控制 attention 更新量。
05 残差写回
attention 分支处理完后,一般会和进入 attention 前的 stream 输入做残差相加。也就是说,每个模态都有自己的残差主路径:x = x + gate * attention_output。残差连接的作用是保留原有表示、改善梯度流动,并让 block 学习增量更新,而不是每层都重写全部特征。
06 归一化或自适应归一化
进入 MLP/Feed-Forward 前,stream 通常还会经过 LayerNorm、RMSNorm 或 AdaLayerNorm 类结构。普通归一化用于稳定数值分布;自适应归一化则会把时间步、文本条件或其他控制信号注入到归一化后的特征中。不同实现可能是 pre-norm,也可能提前生成多组调制参数。
07 MLP 前馈网络
归一化之后进入 MLP,也叫 Feed-Forward Network。它通常由线性升维、非线性激活、线性降维组成,有些实现会使用 GELU、SwiGLU 或 GEGLU。注意力层更擅长在 token 之间搬运和融合信息,MLP 更擅长在每个 token 的通道维度上做非线性变换。
08 进入后续模块
完成 attention 分支和 MLP 分支后,更新后的各模态 stream 会进入下一个 MMDiT block。堆叠多个 block 后,图像 latent 分支通常会进入最终归一化、输出投影、patch 还原或噪声/velocity 预测头;文本或条件分支是否继续输出,要看具体架构目标。
03
易错点
- 把 joint attention 说成 MMDiT block 的最后一步,漏掉 output projection、MLP 和 residual。
- 认为联合注意力之后所有模态都会完全混成一个 stream,不再按模态拆分或分别处理。
- 把某个实现中的 AdaLayerNorm、gate 数量、stream 顺序说成所有 MMDiT 的统一标准。
- 只解释 Q、K、V 怎么算,不解释 attention 输出如何写回主干特征。
- 忽略 MLP/Feed-Forward 的作用,导致回答停留在注意力机制层面。
04
面试官追问
MMDiT 为什么不直接把图像和文本 token 拼起来走普通 Transformer?
直接拼接也是一种多模态融合方式,但 MMDiT 更强调多模态联合注意力与模态特定处理的结合。联合注意力让不同模态在同一注意力空间交互,模态特定 stream 又允许图像和文本保留各自的投影、归一化和前馈变换习惯。这样比完全共享一套处理路径更灵活。
joint attention 后为什么还要接 MLP?
attention 主要做 token 之间的信息聚合,本质上是根据相关性从其他 token 读取信息;MLP 主要做通道维度上的非线性变换,增强每个 token 自身的表达能力。没有 MLP,模型只有跨 token 混合,通道变换能力不足;没有 attention,跨模态条件又难以充分传递。
attention output projection 的作用是什么?
多头注意力会把不同 head 的结果拼接起来,output projection 用来把拼接后的结果映射回模型隐藏维度,并让不同 head 的信息再次线性混合。它不是可有可无的格式转换层,而是 attention 子层表达能力的一部分。
MMDiT 里文本流一定会被每层更新吗?
不一定。不同架构和代码实现会有差异。有些实现中图像流和文本流都会经过 joint attention 后继续更新;有些实现可能对文本或条件流采用较轻的更新,甚至在某些阶段只把它作为上下文。更稳妥的说法是:后续是否完整走投影、MLP 和残差,要看具体实现。
gate 和 residual 的先后关系怎么理解?
常见形式是先对 attention 或 MLP 的分支输出做投影和调制,再乘以 gate,最后加回残差主干。可以理解为 residual 提供稳定的主路径,gate 控制本层分支写入多少信息。这样模型可以动态调节每层更新强度。