图像生成-FUDUKI解读-FODUKI 结构 -17
参考
https://arxiv.org/pdf/2505.20147


FUDOKI论文的第三部分,也就是它的模型架构(Architecture)。这部分内容解释了作者是如何将前面那些精妙的理论(离散流、条件化、动能最优速度)真正地用代码和神经网络搭建起来的。
提供的两张图——架构图概览(图2e)和文字描述。
整体框架:一个统一的双向Transformer
请看架构图(图2e)中FUDOKI的部分。它的核心是一个双向Transformer (Bi-directional Transformer)。
传统语言模型 (GPT-like, 图2a):是自回归(Autoregressive)的,使用因果掩码(Causal Mask)。这意味着在预测第i个词时,模型只能看到前面的i-1个词。这是一条“单行道”。
FUDOKI (图2e):是双向的,使用完全注意力掩码(Full Attention Mask)。这意味着在处理第i个词(Token)时,模型可以同时看到它前面和后面的所有词。这是一个“双向车道”,拥有全局视野。
为什么必须是双向的?
这与Flow Matching的本质有关。在训练时,模型接收的是一个在t时刻被部分“腐蚀”的序列\(x_t\)。为了决定如何“修复”或“演化”其中的任何一个Token,模型需要观察整个序列的上下文。它需要看到所有的Token来做出最佳判断,而不是只看前面的部分。因此,双向结构是必然选择。
三大架构创新
FUDOKI虽然基于一个名为Janus-1.5B的现有架构,但作者对其进行了三个关键的、针对性的改造,使其能够胜任“离散流匹配”这个新任务。
完全注意力掩码 (Full Attention Mask)
如上所述,放弃了只看过去的因果掩码,允许模型中的每个Token关注序列中的其他所有Token。
目的:为了更好地捕捉全局上下文(global context),这对于理解和修复一个被部分破坏的序列至关重要。
输出Logits的移位操作 (Shifting Operation)
模型在输出预测结果(Logits)时,会进行一个巧妙的“移位”操作。
目的:这是一个非常聪明的“兼容性”技巧。虽然FUDOKI的本质是非自回归的,但作者希望它在执行纯文本生成这类传统任务时,也能像自回归模型(AR-based MLLMs)一样强大。通过这个移位操作,可以让模型的训练目标在一定程度上模拟“下一个词预测”,从而“继承”自回归模型的强大生成能力,获得两全其美的效果。
无需显式的时间嵌入 (No Explicit Time Embedding)
这是一个与传统扩散模型(Diffusion Models)的重大区别。扩散模型通常需要一个额外的时间嵌入层,明确地告诉模型“现在是t时刻”。FUDOKI不需要这个。
目的与原理:作者认为,模型足够聪明,可以从被腐蚀的输入x_t本身,隐式地推断出当前的时间步t。
why?因为我们之前讨论的“由度量引导的路径”是有规律的。
当t很小时,输入x_t会非常混乱,与真实数据相差甚远。
当t很大时,输入x_t会非常接近真实数据,只有少量“语义上相近”的错误。
模型在训练中见过了所有时间点的腐蚀数据,它逐渐学会了识别“腐蚀的模式”,从而推断出当前所处的时间阶段,无需我们再明确告知。这简化了模型结构,也让学习过程更自然。
多模态处理策略:解耦的编码器 (Decoupled Encoders)
FUDOKI如何做到统一处理视觉和语言这两种完全不同的模态呢?它采用了一种“分而治之,统一处理”的策略,尤其是在图像输入端。
用于“理解”任务 (如视觉问答)
使用一个强大的语义编码器(Semantic Encoder),论文中点名了 SigLIP。
SigLIP擅长将一张图片的内容提炼成一个高度浓缩的、包含丰富语义信息的特征向量(比如,它知道图里是“一只正在吃竹子的熊猫”,而不仅仅是一团黑白像素)。
这个语义特征再通过一个适配器(Adaptor),转换成与文本Token兼容的格式,送入主Transformer模型。
用于“生成”任务 (如文生图)
采用类似 LlamaGen 的方法,使用一个像素级编码器(Pixel Encoder),例如VQ-GAN的编码器。
这种编码器不关心图片的“高级语义”,而是专注于将图片精确地分解成一系列“视觉Token”。每一个Token都对应原图的一小块“像素补丁”。
这个方法的目的是保真度,确保这些视觉Token可以被一个像素解码器(Pixel Decoder)完美地还原成高清图像。
输出Logits的移位操作 (Shifting Operation) 是如何具体的操作?
假设我们的目标真实文本是三个词(Token)的序列:
x₁ = [ "一只", "红色", "熊猫" ]
在训练中,模型接收了一个被部分“腐蚀”的版本,比如:
x_t = [ "[MASK]", "红色", "[MASK]" ]
模型(那个双向Transformer)处理完这个输入后,会在每个位置都输出一个预测。这个原始的、未经Softmax处理的预测分数向量,就是Logits。所以,模型会输出三个Logits向量:
Logits_1: 在第一个位置上的预测分数
Logits_2: 在第二个位置上的预测分数
Logits_3: 在第三个位置上的预测分数
-
标准的非自回归方法(比如BERT或标准Flow Matching)
在标准的设定下,我们会进行“对位匹配”。
用 Logits_1 去预测第一个位置的真实词 "一只"。
用 Logits_2 去预测第二个位置的真实词 "红色"。
用 Logits_3 去预测第三个位置的真实词 "熊猫"。
这种方法的目的是让模型学会在看到上下文后,修复或还原当前位置的词。 -
自回归方法(比如GPT)
自回归模型的目标是预测下一个词。它的工作模式是这样的:
看到 "一只",去预测 "红色"。
看到 "一只", "红色",去预测 "熊猫"。
它的匹配关系是错位的。 -
FUDOKI的移位操作(Shifting Operation)
FUDOKI的架构本质上是非自回归的(像BERT),但它又想获得自回归模型(像GPT)强大的文本续写能力。于是,它在计算损失时,耍了一个“小花招”:它在计算损失时,故意将Logits和目标标签错开一位。
这就是所谓的“移位操作”。
具体操作如下:
我们不用Logits_1去预测"一只",而是用它去预测下一个位置的词,也就是 "红色"。
我们用Logits_2去预测下一个位置的词,也就是 "熊猫"。
(Logits_3则用来预测句子结束标记[EOS])。
我们来看一下新的匹配关系:
预测: Logits_1 Logits_2 Logits_3
目标: "红色" "熊猫" [EOS]
通过这样一个简单的在计算损失时的人为“移位”,我们等于是在强迫模型去学习:
“当你在第一个位置看到了上下文(这里是[MASK])时,请你努力预测出第二个位置应该是‘红色’。”
“当你在第二个位置看到了上下文([MASK], 红色)时,请你努力预测出第三个位置应该是‘熊猫’。”
这完全就是在模拟自回归模型的学习目标!
总结:
模型架构不变:FUDOKI的骨架依然是强大的双向Transformer,拥有全局视野,非常适合Flow Matching这种需要通盘考虑的修复任务。
学习目标融合:在训练时,FUDOKI实际上可以同时计算两种损失:
一部分损失来自标准的“对位”匹配(Logits_i -> Label_i),这让它学会Flow Matching的核心——修复和还原。
另一部分损失来自这个“移位”匹配(Logits_i -> Label_{i+1}),这让它学会了自回归的核心——预测未来。
能力兼备:因此,训练出的FUDOKI模型变成了一个“多面手”。它既能像Flow Matching模型一样,从一个噪声或不完整的输入中还原出完整、高质量的内容(因为它有全局视野);又能像GPT一样,给你一段话,流畅地进行续写(因为它学习了预测下一个词的能力)。
移位操作就是一个在训练时使用的、低成本的“障眼法”,它让一个非自回归的模型,学会了自回归的“独门绝技”,从而实现了“鱼与熊掌兼得”的强大效果。
真棒!!

浙公网安备 33010602011771号