来源: Janus: Decoupling Visual Encoding for Unified Multimodal Understanding and Generation (arXiv: 2410.13848v1, 2024-10-17). 仓库: https://github.com/deepseek-ai/Janus
Janus 是一个 1.3B 的统一多模态模型: 同一个自回归 Transformer 既回答关于图片的问题, 也按文字生成图片. 它的主张只有一条, 理解和生成对视觉表征的要求不同, 不该共用一个视觉编码器. 于是理解走 SigLIP, 生成走 VQ tokenizer, 两条通路在进入语言模型之前分开, 之后共用同一套 Transformer 和 next-token prediction 目标. 这篇报告的证据集中在 Table 5 的六组消融上, 主结果表更多是在说明「1.3B 的统一模型能做到什么程度」. 下面把架构, 数据配比, 三阶段训练, 评测协议和消融放在一起读, 看这条主张被证明到了哪一步.
1. 问题与架构
问题: 共用一个视觉编码器, 理解先吃亏: 2024 年的统一多模态模型大致分两路. 一路是工具式组合: 多模态 LLM 负责理解和给条件, 真正出图交给外挂的扩散模型, 如 Emu, NExT-GPT. 报告认为这不算真正统一, 因为 LLM 本身不会生成图像, 整体效果常被外挂扩散模型卡住, 甚至不如直接用那个扩散模型. 另一路是单个 Transformer 同时做理解和生成, 如 Chameleon, Show-o, LWM, VILA-U. 这一路的共同点是视觉输入只经过一套编码: Chameleon 用同一个 VQ tokenizer 处理输入和输出图片, VILA-U 用一个兼顾语义和重建的离散 tokenizer.
报告指出这种共用有代价. 理解任务要的是高层语义, 比如物体类别, 属性和关系, 编码器的输出要能支撑推理; 生成任务要的是局部纹理和全局结构, 编码必须保留细粒度的空间信息. 两种需求放在同一个表征空间里, 编码器只能折中. 从 Table 2 看, 此前的统一模型在理解上普遍明显落后于同规模的专用理解模型, 例如 Show-o 1.3B 的 MME-P 只有 948.4, 同样 1.3B 语言底座的 LLaVA-v1.5-Phi-1.5 是 1128.0. Janus 要验证的是: 把编码器拆开, 理解能不能追上来, 生成会不会因此变差.
1.1. 两条视觉通路
理解通路用 SigLIP-Large-Patch16-384. 384×384 的图按 16×16 切块, 得到 24×24 共 576 个 patch 特征, 从二维网格展平成一维序列, 再经一个两层 MLP 的理解 adaptor 映射到 LLM 的输入空间. SigLIP 用逐对的 sigmoid 损失替代 CLIP 那种需要全 batch softmax 归一化的对比损失, 训练对 batch 大小更不敏感, 它的特征偏向图文语义对齐, 当代 VLM 多用它当视觉塔. 视觉编码器的选型讨论见 CLIP 与视觉编码器, LLaVA 式「编码器加 adaptor 接 LLM」的结构见 LLaVA 架构深度解析.
生成通路用 LlamaGen 的 VQ tokenizer, 码本 16,384 项, 下采样 16 倍, 所以 384×384 的图同样变成 576 个离散 ID. 每个 ID 对应的码本向量经生成 adaptor(也是两层 MLP)映射进 LLM. 输出端另起一个随机初始化的图像预测头, 在 16,384 个码本 ID 上做分类; 文本仍用 LLM 自带的预测头. 生成出的 ID 序列交给 VQ 的 CNN 解码器还原成像素. 报告只写了码本大小和下采样率; 按 LlamaGen 报告, 这个 tokenizer 的码本向量只有 8 维并做 L2 归一化, 在 384 分辨率下的重建 rFID 是 0.94. 码本向量维度这么低, 说明它就是为「重建像素」设计的, 几乎不带语义, 这也是 Exp-A 里拿它做理解会崩的原因.
两条通路的形状差别很大: 一边是 1024 维的连续特征, 一边是离散 ID 查表得到的低维向量, 所以各配一个 adaptor. 语言底座是 DeepSeek-LLM 1.3B, 最大序列长 4096. 一张图在两条通路里都占 576 个位置, 所以一条 4096 的序列最多放六七张图. 整个模型只用标准的因果注意力, 不需要为图像设计特殊的注意力掩码; 这一点和 Show-o 在图像部分用双向注意力不同, 实现上更简单, 代价是生成时只能逐个 token 解码.
一个 Transformer 怎么同时做两件事: 训练目标就是式 (1) 的交叉熵 . 求和只覆盖被监督的位置: 纯文本和多模态理解样本只在文本 token 上算损失, 取自 LLM 词表, 由文本头预测; 视觉生成样本只在图像 token 上算损失, 是 16,384 个码本 ID 之一, 由图像头预测. 同一个 前缀里, 图片在理解样本中以 SigLIP 特征的形式出现, 在生成样本中以 VQ 码本向量的形式出现, 两条通路只在输入端分叉, 损失形式完全一样. 三类任务不设损失权重. 数据格式也很直接: 理解样本是 <image><text>, 生成样本是 <caption><image>, 指令微调阶段套上 User: <Input Message>\nAssistant: <Response> 的模板, 只监督回答, 系统提示和用户提示做 mask. 模型靠输入里图片出现在前还是在后来区分「看图」还是「画图」, 没有额外的任务标记.
不设损失权重不等于三类任务的梯度份额按样本比例分配. 交叉熵是按 token 求和的, 一个生成样本要监督 576 个图像 token; 一个理解样本只监督回答里的文本, 图像描述一般几十到一两百个 token, 选择题式的问答更短. 阶段 II 里生成样本占一半, 按监督 token 数算, 生成在总损失里的份额很可能远超一半. 报告没有给各类样本的平均长度, 也没有讨论这个失衡. 如果它存在, Exp-D 对 Exp-E 在 MMBench, SEED 上那 1 个点左右的下降, 可能就和生成 token 占了大部分梯度有关.
三类数据在同一步里混合, 也有工程上的考虑. 如果按任务轮流训练, 每一段都会把模型往一个方向推, 容易出现遗忘; 同一步里混合, 每次更新都同时照顾三类任务. 纯文本数据在阶段 II 占 3/10, 阶段 III 占 3/20, 它的作用是让 1.3B 的语言底座在大量图像 token 的冲击下不丢掉语言能力. 报告没有给 Janus 在纯文本基准上的成绩, 所以这部分数据是否足够, 仅凭报告无从判断.
生成时用 classifier-free guidance(CFG). 每个图像 token 都算两次 logit, 一次带文本条件得到 , 一次不带条件得到 , 最终 , 评测默认 . 无条件分支来自训练时的条件丢弃: 以 10% 概率把文生图数据里的文本换成 pad token. CFG 放大了条件和无条件预测的差, 让图像更贴合提示, 代价是每步前向算两遍, 576 个 token 就要约 1152 次前向(可以把两路拼成一个 batch). 报告没有给不同 下的 FID 和 GenEval 曲线, 所以不清楚 是怎么选的, 也不清楚它在「贴提示」和「画质多样性」之间落在哪里.
这种设计里, 理解和生成共享的是 Transformer 的全部权重和同一个目标. 视觉编码器分开以后, 两类任务在 LLM 内部仍然要争用同一套参数. Table 5 的 Exp-D, E, F 就是在测这一层有没有冲突, 见第 4.1 节.
训练与评测设置: 三阶段训练和数据配比
阶段 I 只训理解 adaptor, 生成 adaptor 和图像头, 两个视觉编码器和 LLM 都冻住. 数据是 ShareGPT4V 的 1.25M 条图文描述加 ImageNet-1k 约 1.2M 张图, ImageNet 按类名做成 <category_name><image> 的文生图格式. 学习率 1e-3, cosine, warmup 300 步, 共 10K 步, batch 256, 三类数据比例(理解 : 纯文本 : 生成)为 1 : 0 : 1. 按每条序列一个样本粗算, 10K×256 约 2.56M 条, 两类各一半, 恰好把 ShareGPT4V 和 ImageNet 各过一遍. 这一阶段的目标是让新加的三个小模块先对齐到冻结的 LLM, 避免随机初始化的 adaptor 一上来就把 LLM 的权重冲乱. 学习率 1e-3 比后两个阶段高一到两个数量级, 因为只训几个小模块, 不用担心破坏大模型; 纯文本比例为 0, 也是因为 LLM 冻结, 不存在遗忘问题. 图像头在这一阶段只见过 ImageNet 的类名条件, 所以阶段 I 结束时的「初步生成能力」其实是类别条件生成, 开放域文生图要到阶段 II 后段才开始学.
阶段 II 解冻 LLM 做统一预训练, 学习率 1e-4 恒定, warmup 5K 步, 共 180K 步, batch 512, 比例 2 : 3 : 5. 数据有五类: DeepSeek-LLM 的纯文本预训练语料; WikiHow 和 WIT 的图文交错数据; 多个来源的图像描述, 其中一部分用开源多模态模型重写, 格式化成「详细描述这张图」的问答; DeepSeek-VL 的表格和图表数据; 以及多来源的文生图数据加 2M 内部数据, 其中两个数据集按美学分和尺寸过滤后只留 20%. 生成部分分两段: 前 120K 步只用 ImageNet, 后 60K 步换成开放域文生图, 这个顺序借鉴 PixArt, 先学基本的像素依赖, 再学复杂场景. 训练时还以 25% 概率只保留描述的第一句, 让模型也能处理短提示.
按同样粗算, 阶段 II 共约 92M 条序列, 生成占一半约 46M; 前 120K 步里 ImageNet 约 30.7M 次, 相当于把 1.2M 张图反复过了约 25 遍, 后 60K 步开放域生成约 15.4M 次(实际用了 sequence packing, 一条序列可能包含多个样本). 也就是说, 生成通路三分之二的预训练预算花在了 ImageNet 的类别条件生成上, 真正的开放域文生图只占三分之一. 这个配比对 Janus 的生成能力影响有多大, 报告没有做对照; 后来的 Janus-Pro 调整了这一段的数据安排.
阶段 III 做指令微调, 除生成编码器外全部参数都训练, 学习率恒定为 2e-5, weight decay 0.1, 无 warmup, 共 24K 步, batch 256, 数据比例为 7 : 3 : 10. 纯文本对话使用一个开源对话集, 多模态理解使用六个开源指令数据集, 生成数据来自阶段 II 的一个子集和 4M 内部数据. 理解与生成样本混合训练, 一个 checkpoint 同时保留两种能力. 冻结范围也随阶段改变: 阶段 II 只解冻 LLM, 两个视觉编码器保持冻结; 阶段 III 除生成编码器外全部更新, 因而 SigLIP 直到指令微调阶段才参与训练. 生成端 VQ 编码器始终冻结, 它的码本决定图像头预测的 ID, 改动码本会破坏与像素解码器的对应关系. 粗略计算, 阶段 III 约有 6.1M 条序列, 其中生成约 3.1M, 理解约 2.2M, 纯文本约 0.9M; 生成部分的 4M 内部数据加开源子集, 训练轮数不到一遍. 全部训练在 16 个节点上运行 7 天, 每节点 8 张 A100 40GB, 约 2.15 万 GPU 小时, 框架为 HAI-LLM. 三个阶段都使用 AdamW, , , 梯度裁剪 1.0.
1.2. 预处理和评测协议
图像统一到 384×384, 但两类任务的预处理不同. 理解数据把长边缩到 384, 短边用 RGB(127, 127, 127) 的灰色补齐, 保证整张图的内容都在; 生成数据把短边缩到 384, 长边裁到 384, 目标图像不带灰边. 这个分叉和编码器的分叉是同一个道理: 理解不能丢信息, 生成不能学出灰边. 训练用 sequence packing, 每一步都按上面的比例混合三类数据.
理解评测用 VQAv2, GQA, POPE, MME, SEED, MMBench, MM-Vet, MMMU 八项. 其中 POPE 专门测物体幻觉, MME-P 是感知部分的总分(满分 2000), MM-Vet 用 GPT-4 给开放回答打分, MMMU 是大学水平的多学科题. 生成评测用 MSCOCO-30K 和 MJHQ-30K 的 FID, 以及 GenEval. FID 衡量生成图和 3 万张真实图在 Inception 特征空间的分布距离, 看的是整体画质和多样性; GenEval 用目标检测器去检查生成图里有没有提示要求的物体, 数量, 颜色和位置, 看的是组合式的指令跟随. 理解评测用的解码设置(贪心还是采样, 最大长度多少)报告没有写; 生成评测的采样温度, top-k 也没有写, 只给了 CFG 尺度. 报告没有说明对照模型的数字是自测还是引用, 从 Table 2 大量空格看, 应当主要是引用各自论文, 这意味着不同行之间的提示模板和解码设置未必一致.
评测结果: 理解评测: 同规模里领先, 但不是全面领先
Janus 在 Table 2 的成绩: POPE 87.0, MME-P 1338.0, MMBench 69.4, SEED 63.7, VQAv2 77.3, GQA 59.1, MMMU 30.5, MM-Vet 34.3. 相对此前最好的同规模统一模型 Show-o, 报告说 MME 提升 41%(949 到 1338), GQA 提升 30%(48.7 到 59.1). 前一个数核算无误, 后一个按表内数字算是 21%, 报告的 30% 算错了. 提升本身仍然很大, 只是幅度要按 21% 理解.
和同规模的专用理解模型比, 优势就没有那么大. LLaVA-v1.5-Phi-1.5 同样是 1.3B 语言底座, Janus 在 POPE(87.0 对 84.1), MME-P(1338 对 1128), GQA(59.1 对 56.5)上领先, 但 MMMU 反而低 0.2(30.5 对 30.7). MobileVLM-V2 1.4B 的 GQA 是 59.3, 也略高于 Janus. 所以更准确的说法是: 解耦以后, 统一模型的理解能力追平了同规模专用模型, 部分项目小幅领先. 这恰好是报告摘要里「匹配或超过专用模型」的意思.
各项的性质不同, 领先的位置也有规律. POPE 用「图里有没有某物体」的是非题测幻觉, Janus 的 87.0 是全表最高, 连 7B 模型都没超过; MM-Vet 用 GPT-4 给开放回答打分, Janus 的 34.3 高于 LLaVA-v1.5 7B 的 31.1. 这两项主要考「看得准不准, 说得全不全」, 依赖视觉特征的质量, SigLIP 在这里起了主要作用. 落后的 MMMU, GQA, VQAv2 更依赖知识和多步推理, 或者依赖大量同分布的训练数据, 语言底座的规模可能更关键.
报告强调 Janus 在 POPE, MMBench, SEED, MM-Vet 上超过 7B 的 LLaVA-v1.5, 这四项确实都赢. 但 LLaVA-v1.5 在 MME-P(1510.7), VQAv2(78.5), GQA(62.0), MMMU(35.4)上仍领先. 7B 的统一模型 VILA-U 在 MME-P(1401.8), VQAv2(79.4), GQA(60.8)上也高于 Janus. 考虑到 Janus 只有 1.3B, 这些差距多半反映的是语言底座的大小, MMMU 这类需要知识和推理的题尤其依赖底座.
表里还有一组可以和消融互相印证的数字. 同样共用 VQ 编码的 Chameleon 7B, MMMU 22.4, MM-Vet 8.3; LWM 7B 的 MM-Vet 只有 9.6. 这些 7B 模型的理解成绩, 和 Exp-A 里 1.3B 共用 VQ 的 MMMU 24.7 处在同一水平, 远低于同规模的 LLaVA 类模型. 也就是说, 「用重建型 VQ 做理解就会很差」不只是 Janus 自己消融里的现象, 在别人的模型上也看得到, 把语言底座做到 7B 也补不回来. 带 † 的工具式模型(DreamLLM, LaVIT, Emu, NExT-GPT)理解端用的是连续视觉特征, VQAv2 在 52.0 到 72.9 之间, DreamLLM 的 MM-Vet 36.6 甚至高于 Janus, 这也和「理解要用语义特征」的判断一致.
Figure 5 的表情包例子是定性证据: Janus 读出了图里的文字并理解了笑点, Show-o 把狗的颜色认错, Chameleon 连物体都没认出来, 两者都读错了图中文字. 读图中文字依赖编码器保留的细节, SigLIP 在 384 分辨率下 16×16 的 patch 对小字仍然吃力, 报告在扩展方向里提到动态高分辨率, 应当也是为此.
生成评测: 贴提示强, 计数和画质仍有差距: GenEval 总分 Janus 0.61, 高于 Show-o 的 0.53, SDXL 的 0.55, DALL-E 2 的 0.52 和 Emu3-Gen 的 0.54. 拉开差距的是两项: 位置关系 0.46, 对 SDXL 0.15, Emu3-Gen 0.17; 颜色属性绑定 0.42, 对 SDXL 0.23, Show-o 0.28. 这两项考的是「把红色给对物体, 把左边放对位置」, 正好是语言模型理解长提示的强项, 统一模型把文本理解和图像生成放在同一个 Transformer 里, 这里受益应该最明显. 但计数只有 0.30, 低于 Show-o 的 0.49, SDXL 的 0.39, 甚至低于 SDv1.5 的 0.35; 两物体 0.68 也低于 SDXL 的 0.74. 总分 0.61 的领先主要来自位置和颜色属性两项.
FID 方面, COCO-30K 8.53, MJHQ-30K 10.10, 都好于 Show-o(9.24, 15.18)和 LWM(12.68, 17.77). 但同在 384 分辨率的 VILA-U 在 MJHQ-30K 上是 7.69, 比 Janus 好; COCO-30K 上 PixArt-α 7.32, Imagen 7.27, RAPHAEL 6.61, 纯生成模型仍领先一截. Figure 4 把 Janus 和 SDXL, LlamaGen 做定性对比, 三者分辨率分别是 384, 1024 和 512, 所以 Figure 4 只能用来比较谁更贴提示, 不能用来比细节.
Table 4 里带 † 的工具式模型提供了另一个角度. Emu 的 COCO FID 11.66, NExT-GPT 11.28, SEED-X 14.99, 都比它们所依赖的 Stable Diffusion 系列(SDv1.5 是 9.62)差. 这和报告在引言里的判断一致: 把 LLM 的输出当条件喂给外挂扩散模型, 整体生成质量会被接口拖累, 不如直接用扩散模型. Janus 的 8.53 好于 SDv1.5, 说明统一自回归路线在 1.3B 规模上已经能在分布质量上超过这些外挂方案. 另一方面, 共用 VQ 的 Chameleon 做到 34B, GenEval 也只有 0.39, 共用编码器的问题在生成端同样存在, 只是没有理解端那么严重.
LlamaGen 本身也在 GenEval 表里: 0.8B, 总分只有 0.32, 位置 0.07, 颜色属性 0.04. Janus 的生成端用的是同一个 VQ tokenizer, 同样是逐 token 自回归, 总分却接近翻倍, 位置和颜色属性提升了一个数量级. 差别可能主要在于条件端: LlamaGen 的文本条件来自 FLAN-T5 编码器, Janus 的文本和图像在同一个 1.3B 语言模型里交互, 语言理解更强, 训练数据也不同. 这个对比比 Janus 和扩散模型的对比更能说明「统一」带来的好处, 因为图像表征相同, 差异主要落在语言侧.
2. 消融
消融: 哪一步证明了解耦有效: Table 5 的六组实验要按顺序读. Exp-A 按 Chameleon 的做法, 理解和生成都用同一个 VQ tokenizer: 生成的 COCO FID 8.72, 还不错; 理解却很差, POPE 60.1, MMBench 35.0, SEED 34.9, MMMU 24.7. Exp-B 换一个更强的共享编码器, 即用 SigLIP 蒸馏出的语义 tokenizer(见第 4.2 节): 理解明显回升, POPE 82.4, MMBench 52.7, SEED 54.9, MMMU 26.6, 生成 FID 还降到 7.11, 比 Janus 主模型的 8.53 更好. Exp-C 用同一个语义 tokenizer 只训理解: MMBench 从 52.7 升到 62.1, SEED 从 54.9 升到 60.8. B 和 C 的差距说明, 即使共享编码器已经带了语义, 同时承担生成仍会拖累理解. 这是整篇报告最直接的一条证据.
Exp-D 是 Janus 本身: SigLIP 加 VQ, 理解和生成一起训, POPE 87.0, MMBench 69.4, SEED 63.7, MMMU 30.5, FID 8.53, 与主结果表完全相同, 说明 D 就是正式模型. Exp-E 只用 SigLIP 训理解, Exp-F 只用 VQ 训生成, 两者在各自任务上的训练步数与 D 相同. 结果 E 的 MMBench 70.6, SEED 64.8, 略高于 D; POPE 85.9, MMMU 28.8, 略低于 D. F 的 FID 8.92, 反而比 D 差. 报告据此认为统一训练基本不伤理解. 更细地看, 统一训练在 MMBench 和 SEED 上各掉约 1 个点, 在 POPE 和 MMMU 上涨了 1 到 2 个点, 生成还略有改善; 这些差距都在 2 个点以内, 每组只训一次, 没有误差条, 方向不能当成确定结论.
把 Exp-A 和 Exp-F 放在一起看还能得到一个报告没有明说的结论. 两者生成端都是普通 VQ, A 同时训理解, F 只训生成, 结果 A 的 FID 8.72 反而略好于 F 的 8.9…7087 tokens truncated…, 数量相同不代表含义相同. 是有上下文的语义向量, 是码本索引, 其距离没有自然的连续语义.
解耦的收益来自允许两条通路分别选择训练目标和预训练来源. SigLIP 已经在图文对齐上学习, VQ tokenizer 已经在重建上学习. Janus-Pro 不要求一个新视觉前端从零同时满足两种需求, 只让 adaptor 把它们映射进共享 Transformer. 代价是参数、显存和接口更多, 同一张图在理解与生成任务中经过不同前端, 两种表示不会自动对齐到同一视觉坐标系.
连续理解特征怎样进入语言模型: SigLIP-Large-Patch16-384 把边长 384 的图像分为 个 patch. 经过视觉 Transformer 后得到 576 个连续向量. 理解 adaptor 是两层 MLP, 将每个向量从视觉维度投影到语言模型隐宽 . 记 adaptor 为 , 送入语言模型的视觉嵌入是:
这些向量直接占据 decoder-only Transformer 的输入位置, 与文本 token embedding 拼成一条序列. 它们不需要先变成词表 ID, 也不经过文本 embedding 查表. Transformer 只接收 维向量, 因而可以在同一注意力层里让问题 token 读取视觉 token.
连续特征保留了码本之外的细微语义差异. 若两个 patch 都被 VQ 分到同一码字, 生成表示完全相同; SigLIP 向量仍可能在连续空间中区分对象、背景和上下文. 这有利于分类与关系判断. 但连续表示没有可直接解码成像素的有限词表, 语言模型也无法通过预测一个 SigLIP 向量 ID 来逐步生成图片.
理解序列的因果注意力还需要明确方向. 图像特征通常先放在问题文本之前, 后续文本 token 可以关注全部视觉位置. 视觉 token 自身经过语言模型时也会相互作用, 但最终监督来自答案文本的 next-token loss. 如果只在答案位置计算损失, 图像特征通过注意力影响答案, 梯度再回到 adaptor, 解冻阶段还会回到 SigLIP. Janus-Pro 阶段 I、II 冻结 SigLIP, 阶段 III 才让理解编码器随任务调整.
384 分辨率和 576 个 patch 是明确瓶颈. 一个 patch 覆盖 像素, 细小文字可能跨 patch 且在缩放时已经模糊. 灰色 padding 保留完整画面, 对细长文档却会让有效内容缩得更小. 增加 OCR 数据能教模型利用现有信号, 无法恢复预处理已经抹掉的笔画.
5. 统一自回归建模
VQ tokenizer 先用 encoder 将图像压成空间 latent, 再把每个 latent 向量替换为最近码字. 设码本为 , 连续 latent 为 , 量化 ID 是:
Janus-Pro 的 , 一张图对应 576 个 ID. 这些 ID 像文字 token 一样形成有限分类问题. 生成 adaptor 将码字 embedding 投影到语言模型隐宽, 图像输出头再把隐藏状态映射回 个 logits. 训练目标可以直接使用交叉熵.
离散化使图像和文本共享同一种自回归接口: 给定前缀预测下一个类别. 文本头在约 10 万词表上分类, 图像头在 16384 码字上分类. 两个头分开避免图像 ID 与文字 ID 占用同一词表含义, 共享 Transformer 则让提示文本影响图像位置的隐藏状态. 统一发生在序列建模层, 没有要求底层表示类型相同.
量化一定会丢信息. 码本越小、空间下采样越强, 重建越模糊; 码本越大, 分类更难且输出头更大. 16 倍下采样把 压成 , 每个 token 最终负责约 像素区域. decoder 能借相邻 token 补细节, 无法恢复量化时彻底丢失的高频信息. 小脸、文字和细线最容易受损.
离散 token 还带来暴露偏差. 训练时第 个位置看到真实前缀 , 推理时看到自己采样的 . 早期错误会改变后续条件, 可能扩散成结构畸变. 扩散模型在连续噪声去除中逐步修正整幅图, 自回归光栅生成则更依赖前缀. CFG、数据质量和大模型容量可以降低错误率, 没有消除这种生成方式的路径依赖.
5.1. 解耦到哪里为止
两条视觉编码通路在输入端分开, 进入 adaptor 后都变成 维向量, 共享语言 Transformer 的每一层. 理解任务更新共享参数时, 会改变生成 token 的条件建模; 生成任务同样会改变理解答案. 所以 Janus 所说的 decoupling 是视觉表征职责解耦, 共享主干仍存在多任务干扰.
输出端也分开. 文本答案使用语言模型原有词表头, 图像生成使用独立 image head. 若把两个输出空间合并, 文本与图像类别会在一个超大 softmax 中竞争, 还要设计特殊 ID 区间. 分头后, 模态控制决定当前用哪个 head, 分类规模更小. 代价是同一隐藏状态不能在一个位置自由输出文字或图像 token, 序列格式必须先决定区段模态.
共享 Transformer 带来的正迁移是文本知识能直接条件化图像生成, 视觉理解训练也可能改善对象与关系表示. 负迁移则来自梯度竞争和容量分配. Janus-Pro 阶段 III 把理解比例提高到 50%、生成降到 40%, 生成分数仍保持, 说明在该训练点附近共享主干还有余量. 没有更细比例消融, 不能推出任意降低生成数据都不会伤害生成.
真正完全解耦的方案会为理解与生成各用一套 Transformer, 再在高层交换信息. 这种方案减少梯度冲突, 参数与推理成本翻倍, 文本知识共享也变弱. Janus-Pro 选择的是中间点: 专用视觉前端解决表示粒度冲突, 共享强语言主干承担跨模态序列规律.
一个小图例看两种表示的差别: 设图像只有 个区域: 左上是红球, 右上是蓝盒, 下方是桌面. 理解任务问「球在盒子哪边」, SigLIP 特征需要让语言模型读出对象类别、颜色和相对位置. 红球表面的一点反光不应改变答案, 因而编码器可以忽略部分像素差异. 四个连续向量经过 adaptor 后, 注意力把「球」对应问题 token 与左上区域关联, 输出「左边」.
生成任务的提示是「红球在蓝盒左边」. 图像 tokenizer 要为四块选择能让 decoder 重建红色圆形边缘、蓝色直角和桌面纹理的码字. 若把所有红球区域都压成同一个语义 token, decoder 不知道球的大小、阴影和边缘落在哪. 离散 ID 必须保留更多局部外观, 自回归主干还要确保左侧先出现与红球相容的 token, 右侧再出现蓝盒 token.
两种表示可以共享「红球—蓝盒—左边」这层关系, 没必要共享底层编码. 共享 Transformer 从文本和视觉任务中学习关系模式, adaptor 负责把连续语义向量或离散码字 embedding 放到可用隐藏空间. 这就是 Janus 的双面含义: 输入视觉表示不同, 中央序列模型相同.
这个例子也揭示了解耦的边界. 如果生成训练只强调像素重建而缺少文本绑定, VQ token 很精细仍会画错关系; 如果理解 encoder 很强而共享主干容量不足, 答案仍可能错. 解耦消除一处表示冲突, 没有自动解决跨模态对齐、组合推理和图像规划.
连续特征与离散 token 的信息瓶颈: 连续表示的瓶颈来自维度、patch 数和预训练目标. 576 个向量每个有许多浮点分量, 名义容量很大, 但 SigLIP 训练鼓励保留有助于图文对齐的信息. 纹理噪声、精确像素和局部排列可能被压缩. 这种有选择的遗忘有利于语义理解, 对逐像素重建不够.
离散表示的瓶颈更容易量化. 每个 token 最多承载 bit 的码字身份, 576 个位置的离散索引上界约 8064 bit, 还要依赖 decoder 与码本共享的先验来还原图像. 这不是实际压缩率的完整计算, 因为码本、decoder 参数和 token 相关性也携带信息, 但它说明单图索引是强压缩表示.
码本使用不均会进一步降低有效容量. 若训练只频繁使用一小部分码字, 名义 16384 类没有全部贡献. 自回归模型也更容易预测高频码字, 罕见纹理与小对象可能被常见模式替代. 论文引用 tokenizer 的重建能力, 没有报告 Janus-Pro 训练图上的码本利用率、perplexity 或按对象尺度的重建误差.
理解与生成用 576 个位置还会造成表面错觉: 读者可能以为两套 token 可以逐位置对齐. SigLIP 每个输出已经混合全局上下文, VQ 码字更接近局部 latent; 同一索引的感受野与语义并不相同. Janus-Pro 没有显式约束 和 对齐, 它们只在共享主干的任务梯度中间接关联.
统一自回归建模.
5.2. 三种序列共用一个因果目标
纯文本、图文理解与文生图都可以写成条件序列概率. 纯文本预测 :
理解任务把视觉连续嵌入 与问题 放在前缀, 只对答案 计算文本损失:
生成任务把提示 放在前缀, 预测离散图像序列 :
三个式子共享「前缀条件下预测下一位置」这一计算骨架. 差别在输入 embedding 来源、监督位置和输出 head. 统一自回归因此是训练接口与 Transformer 主干统一, 并不表示所有模态都经过相同 tokenizer.
这种统一让预训练语言模型的序列能力得到复用. 注意力已经学会从长前缀选择相关信息, 残差网络已经学会逐步变换上下文. adaptor 只要把视觉表示投到主干可利用的区域, 图像任务就能借用这些能力. 阶段 I 冻结 LLM 仍能学会类别条件生成, 正是这种可迁移性的实验证据.
统一目标也简化混合训练. 一个 batch 中可以放三种序列, 分别构造 loss mask 和 head, 汇总损失后对共享参数反向传播. 无需在扩散噪声损失、对比损失和语言损失之间切换完全不同的训练循环. 简洁不等于不存在权重问题: 不同序列长度、token 数和损失尺度会改变每类任务的有效梯度.
图像光栅顺序带来了什么归纳偏置: 图像 token 要展平成一维. 常见做法按行从左到右、从上到下排列. 第 个 token 只能看见光栅前缀, 左侧和上方信息更早可用, 右侧和下方要在之后生成. 这种方向性与二维图像没有天然对称, 但让标准 causal mask 可以直接使用.
光栅顺序有利于局部连续性. 相邻水平 token 在序列中相邻, 换行处的上下文也能通过注意力访问. 垂直相邻 token 的序列距离为 24, 对 4096 上下文的 Transformer 并不长. 全局构图则要求早期 token 根据文本提前规划尚未出现的区域, 因为后面不能返回修改前缀.
GenEval 位置分数可能受顺序偏置影响. 「A 在 B 左边」的文本先提 A, 光栅生成也先覆盖左侧, 两种顺序有机会对齐; 反向关系是否同样好, 需要按关系方向拆分. 官方只给 position 总分, 没有足够证据确认优势来自空间推理、训练分布还是生成顺序.
其他序列化方式可以改变偏置, 例如列优先、蛇形、Hilbert 曲线或多尺度 token. 改顺序需要重新训练位置规律, 还可能影响局部邻接. Janus-Pro 延续 Janus 架构, 没有比较这些选择. 它证明光栅顺序在当前数据与规模下可行, 没有证明这是二维生成的最优顺序.
两个输出头如何共享隐藏状态: 设 Transformer 输出隐藏状态 . 文本 logits 与图像 logits 分别是:
继承语言模型词表头, 随机初始化. 模态区段决定采用哪个矩阵. 阶段 I 冻结 LLM 时, 与生成 adaptor 要学习如何把固定隐藏空间变成码字分类器; 阶段 II 解冻主干后, 隐藏表示可以进一步适应视觉生成.
共享 使文本属性、对象和关系能进入图像预测. 对提示「红色汽车在蓝色房子左边」, 文本 token 先形成条件表示, 每个图像位置再根据这个条件选择码字. 模型没有显式场景图, 属性绑定和位置关系都隐含在注意力与隐藏状态里. DPG-Bench 和 GenEval 测到的是这种隐式绑定最终是否落到像素.
理解方向相反. 连续视觉 token 进入主干后, 文本头把隐藏状态解码成答案. 图像 head 在理解任务中不参与监督. 两个任务的输入和输出方向不同, 共享参数通过批次交替接收梯度. 如果生成梯度让主干更关注局部纹理, 理解可能受益也可能被干扰; 解耦 encoder 只能减少输入表示冲突.
CFG 在离散自回归里怎样工作: 训练时以一定概率丢弃文本条件, 模型同时学习 与 。推理时对条件 logits 和无条件 logits 做线性外推:
放大提示带来的方向. 对 softmax 概率忽略归一化常数后, 有 . 常见而与提示无关的图像模式被压低, 更能区分提示的码字被提升.
CFG 并非免费. 太低时图像自然但可能漏属性, 太高时提示跟随增强, 多样性下降, 颜色和边缘可能过强. 每个图像 token 都要分别做条件与无条件前向, 生成计算近似翻倍, KV cache 也要维护两条条件. Janus 官方 demo 暴露默认 CFG 权重 5, Janus-Pro 论文没有报告评测逐项采用的采样参数.
生成 benchmark 对 很敏感. GenEval 奖励物体、颜色、数量和位置符合提示, 较强 guidance 往往有利; 人类审美与真实感未必随之单调上升. 没有统一采样协议时, 跨模型比较混入 CFG、温度、top- 和每提示候选数差异. Janus-Pro 的高分是真实系统结果, 不能全部归到训练 checkpoint.
5.3. 自回归图像生成的计算边界
576 个图像 token 逐步解码, 每一步都要经过语言主干. 有 KV cache 时, 第 步只计算新 token 的 query 与全部前缀 key/value, 总注意力代价仍随序列长度近似二次增长, 主干 MLP 则按 token 数线性增长. 7B 比 1B 生成每张图明显更贵, 论文只报告训练资源, 没有生成延迟与吞吐.
提高分辨率到 768 会让每边 token 数从 24 增至 48, 总 token 从 576 增至 2304. 生成步数变四倍, 注意力交互的上界约增十六倍, KV cache 四倍. 这使论文提出的「提高分辨率」不只是改预处理, 还要求更高效 tokenizer、分层生成或更强推理优化.
扩散模型可并行处理整张 latent, 每个去噪步更新所有位置; 自回归模型每步只确定一个位置, 但能直接使用成熟 LLM 与离散交叉熵. 两者的步数不能简单比较: 扩散一次前向覆盖全图, 自回归 576 次前向可借 KV cache. Janus-Pro 没有报告等硬件延迟, GenEval 高分不代表推理效率优于扩散模型.
训练时 teacher forcing 与推理时采样: 生成训练使用真实前缀, 损失为 576 个位置交叉熵之和或平均:
每个位置都在正确历史上学习, 梯度稳定且可以并行计算全部位置 logits. 推理时必须顺序采样, 若第 50 个 token 错了, 第 51 个以后看到错误前缀. 训练目标优化局部 next-token likelihood, 最终图像评分关注对象、关系与美感, 两者并不完全一致.
温度控制采样分布尖锐度, top- 截断尾部. 贪心解码稳定但容易重复高频视觉模式, 高温增加多样性也增加结构错误. 每个提示生成多张再挑最好的一张, 能显著提高 benchmark 命中率, 代价是成倍计算. GenEval 的评测协议通常每提示生成四张用于统计, 模型侧是否还做内部候选筛选必须由具体实现说明.
CFG 与温度相互作用. 放大条件 logit 差, 低温再把分布变尖, 两者同时很强会使输出收缩到少量码字路径. 这可能提高短模板的属性命中, 也可能损失构图多样性. 论文没有采样消融, 所以生成表反映的是某个完整推理配方, 不能视为 checkpoint 的唯一固有分数.
理解和生成能否在一轮对话中交替: 架构具备文本 head 与图像 head, 但开放仓库示例把理解和生成作为两条入口. 一轮中先看图、回答文字, 再根据回答生成新图, 需要定义序列中的模态切换 token、保留哪些视觉表示以及如何把生成图片重新编码. 论文评测没有测试任意交错输出.
统一主干给交替任务提供潜力: 理解得到的语义状态与生成使用同一 Transformer 参数, 文本中间表示可以条件化 image head. 但输入端的两套 encoder 和输出端的两套 head 仍需外部控制. 「统一多模态」在 Janus-Pro 中主要表示一个模型支持理解与生成两类任务, 不等于像普通词表一样在任意位置自由混排所有模态.
这一区分对能力宣传很重要. 文生图分数与 VQA 分数同时很高, 说明两个接口各自有效; 它们没有直接测「看图后局部编辑」「生成后自我检查」或多图连续创作. 后续若要实现闭环视觉推理, 还需要任务数据和推理协议, 不能只依靠共享参数自动涌现.
为什么理解端不把连续特征当输出目标: 连续视觉向量没有天然唯一答案. 同一语义可以经过旋转、缩放或不同 adaptor 映射到等价隐藏空间, 直接用均方误差预测 SigLIP 向量会把模型绑在某个表示坐标系. 文本答案和离散码字都有明确分类目标, 更适合自回归交叉熵. Janus-Pro 让连续特征只作条件, 避免定义连续视觉输出分布.
如果要让模型生成连续 latent, 通常需要回归、混合密度、扩散或 flow 目标. JanusFlow 正是把生成端改为连续流匹配, 它与语言交叉熵在损失和采样过程中不再完全同构. Janus-Pro 选择 VQ token, 换取统一 next-token 训练和复用 LLM head 范式, 接受量化损失与逐 token 解码.
理解 adaptor 的目标也不是重建 SigLIP 输入. 它只需让答案 loss 能从语言模型反传, 找到对问答有用的投影. 因此 adaptor 可能丢掉暂时未被理解数据监督的信息. 阶段 III 解冻 SigLIP 后, 整条理解通路更会向现有问答分布适应. 这能提高 benchmark, 也可能降低未覆盖视觉任务的通用性, 论文没有冻结对照.
两种通路若要加强对齐, 可以加入同图表示一致、互预测或共享语义 code 等辅助目标. 这样可能改善生成后理解与视觉规划, 也会重新引入解耦试图避免的约束. Janus-Pro 保持简单: 只在共享 Transformer 参数处间接交流, 实验结果证明这条基线已经很强.
训练目标、数据配比与缩放归因: 数据比例要按 token 和梯度读取
论文给出的 2:3:5 或 5:1:4 是样本类别比例, 每类样本的有效监督 token 不同. 文生图样本固定有 576 个图像目标, 纯文本样本可能含数百到数千文字 token, 理解样本通常只在答案文字上计算 loss. 若每类 loss 对 token 求平均后再汇总, 样本比例与梯度贡献仍受序列长度和实现 reduction 影响.
设一批中三类有效监督 token 数为 , 对应平均 token loss 为 , 最简单总损失为: