真实面经题目 · 原创解析

在MMDIT里,联合注意力计算完之后,数据会流经哪些层?

MMDiT 中的联合注意力并不是整个 block 的终点。它完成的是跨模态 token 的信息交换:图像 latent token、文本 token 或其他条件 token 在同一个注意力空间里互相读取信息。注意力结果通常会先经过输出投影,再按模态拆回各自 stream,结合门控调制与残差连接写回原特征;随后进入归一化或自适应归一化、MLP/Feed-Forward、再次门控、再次残差,最后把更新后的各模态特征交给下一个 MMDiT block 或后续输出层。

出现于:阿里巴巴 · 算法

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 …

深入解析

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 预测头;文本或条件分支是否继续输出,要看具体架构目标。

易错点

  • 把 joint attention 说成 MMDiT block 的最后一步,漏掉 output projection、MLP 和 residual。
  • 认为联合注意力之后所有模态都会完全混成一个 stream,不再按模态拆分或分别处理。
  • 把某个实现中的 AdaLayerNorm、gate 数量、stream 顺序说成所有 MMDiT 的统一标准。
  • 只解释 Q、K、V 怎么算,不解释 attention 输出如何写回主干特征。
  • 忽略 MLP/Feed-Forward 的作用,导致回答停留在注意力机制层面。

面试官追问

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 控制本层分支写入多少信息。这样模型可以动态调节每层更新强度。