跳转到内容
English

CausalFusion:生成的两条轴

交互教程

生成一个子集并对其去噪,再让后续子集依赖它的干净值。

前置阅读:DiT · MAR · 注意力与自回归

DiT 同时对整个 latent 网格去噪;MAR 先计算上下文,再运行小型逐 token 扩散头。CausalFusion 让主 Transformer 参与当前 token 子集的迭代去噪,同时在子集间保持因果依赖。

外层轴是自回归子集,内层轴是扩散时间。广义因果 mask 让当前带噪子集读取此前干净子集,同时阻止过去位置读取当前或未来目标。噪声级与分组必须纳入训练设计。

阅读顺序从左到右。点击模块,将它与计算和代码对应。代码为教学伪代码;来源链接提供论文方法或已核查的实现。

选择子集与时间

训练采样结构化去噪问题。

groups = sample_partition(tokens)
noisy = corrupt_current_groups(groups,times)

广义因果注意力

较早位置不能读取较晚目标。

mask = group_causal_mask(groups)
v = transformer(noisy,condition=earlier_clean,mask=mask)

嵌套生成

主去噪网络在组循环内部运行。

for group in groups:
    for t,t_next in schedule:
        state[group] = denoise_step(transformer,state,group,t,t_next)

查看固定版本来源

p(x)=∏gpθ(xGg∣xG<g),pθ(xGg∣⋅) uses iterative denoisingp(x)=\prod_g p_\theta(x_{G_g}\mid x_{G_{<g}}),\quad p_\theta(x_{G_g}\mid\cdot)\ \text{uses iterative denoising}

增大演示中的组大小,会减少外层轮数;增加内层步数,每组需要更多去噪调用。不同于 MAR,这些反复调用涉及主 Transformer,因此相同组步计数在两模型中不代表相同成本。

一个大组的调度接近整网格去噪;多个小组加入更多自回归条件。在两端间移动会改变预测问题,主要在某一端训练的模型不一定在另一端表现良好。

改变参数,查看计算值,再把它与上方的真实模型说明对照。

解析教学模型 · 控件改变的是例子,不是训练后的研究模型。

1111222233334444

数字表示生成组,不是 token 值;耗时还取决于网络大小和缓存。

当前例子的计算值
量值
外层组数4
每组内层步数4
组数 × 步数16

均匀采样 AR 轮数可能过度强调每次预测新内容很少的简单任务。论文调整轮数采样并增加早期步骤损失权重。多模态实验混合文字在前、图像在前样本,用于生成与描述,并对文本 loss 赋较小权重。

论文报告某些训练/推理调度不匹配会严重退化。位置编码也随实验变化,可为正弦、学习式或图文组合,不能统一称为 RoPE。描述与图文生成证据不能证明开放域 VQA 或通用推理。

训练后能否不检查质量就任意减少外层轮数?

不能。这改变每个上下文要预测的内容量,可能偏离训练调度分布。

返回学习地图

本页图形与伪代码为教学重绘。论文报告、固定实现观察和解析示例分别标记;未运行研究模型。