罗马神话里有一位神,叫 Janus。他不像宙斯那样掌管雷霆,也不像阿波罗那样预言未来。他管的是门。门有两面,所以 Janus 长着两张脸,一张看门里,一张看门外。罗马人把一年第一个月命名为 January,也是因为这一月站在旧年与新年的门缝上——往左看,是过往;往右看,是来年。

DeepSeek 给自家多模态模型取名 Janus,寓意很直白:一个模型,两张面孔——一张做图像理解,一张做图像生成。
动手写之前先做一次事实核查:Janus 不是吉利旗下团队做的。它出自深度求索(DeepSeek),就是那个因为 R1 模型让全世界 AI 圈失眠的中国公司。目前能看到的一手资料,无论是论文还是官方仓库,都指向 DeepSeek。标题里”吉利”这个归属,估摸着来自某篇互抄的报道——这恰好说明,不回到原始论文写技术,信息传上两轮就变味了。
好,那我们把 Janus 拆开看看,它到底怎么做到”一脑两用”的。
图像理解和图像生成,是两个方向相反的活儿
想要理解 Janus 的设计,得先看清它面对的老问题:多模态统一。
2024 年的业界主流是各干各的:GPT-4V 负责看,DALL·E 负责画。学术圈不满足于这种割裂,一直想做一个 Transformer 闭环——输入图能答,输入字能画。这条路听着优雅,但一直有个隐形天花板。
问题出在视觉编码上。不妨对比一下两个任务对”视觉特征”的诉求:
| 维度 | 图像理解 | 图像生成 |
|---|---|---|
| 编码器该做的事 | 压缩:丢掉细节,提炼语义 | 铺开:保留细节,重构像素 |
| 理想的特征粒度 | 高层抽象,几十个 token 是极限 | 局部细节,几百个 token 都嫌少 |
| 共用同一编码器的下场 | 理解被无关细节干扰,变笨 | 生成缺细节,图糊成一团 |
用人打比方:理解是读完三十万字的小说写五十字摘要;生成是拿到五十字摘要写回三十万字。前者的语言习惯是”怎么砍”,后者的语言习惯是”怎么长”。你让同一个人同时干,大概率两者都干不好。
Meta 的 Chameleon、智源的 Emu3 都是让一个共享视觉编码器硬扛两条路,结果总是理解比不过专职理解模型,生成比不过专职生成模型,两头受气。
Janus 的答案:不共用一个眼睛,共用一个大脑
Janus 论文里最反直觉的决定,是彻底放弃”统一视觉编码器”这个执念。它给每张面孔配了一只独立的眼睛。
理解分支:图像先进 SigLIP 编码器(细节见论文原文),在 384×384 分辨率下压成 576 个连续视觉 token。这些 token 承载的是”图里有什么、物体怎么关联”这类高层语义信息,然后与文本 token 拼接,喂给 LLM。
生成分支:图像先进 VQ tokenizer,被切成 16×16 的离散代码——一张图变成 256 个格子组成的”拼图指令”。LLM 的任务像做填空题,一格一格地自回归预测这些离散代码。全部预测完,交给预训练好的 LlamaGen 解码器,还原成像素图。
两条路径的视觉特征在进入 LLM 主干之前完全不接触。理解分支拿到的是”语义”,生成分支拿到的是”结构”。真正共享的只有 LLM 的参数——知识的存储、推理的习惯、跨模态的联想,都由同一个大脑完成。
- SigLIP
- 视觉语言对比学习编码器,擅长回答”图上有什么”。
- VQ tokenizer
- 把图像切成小块并映射为离散代码,相当于给图像”分词”。
- 自回归生成
- 每步只预测下一个 token,把结果拼回序列再继续,直到整幅图生成完。
- FID
- 衡量生成图分布与真实图分布的距离,越低越好。
读到这儿你可能会嘀咕:视觉编码都分家了,还好意思叫”统一多模态”吗?
答案是:能。因为统一发生在认知层,不是感知层。理解任务中学到的物体关系和空间常识,会被生成分支借用去规划构图;生成任务中掌握的像素排列规律,也会反哺理解分支对图像细节的判断。共享的从来不是眼睛,而是大脑。
三阶段训练:先让每条腿站稳,再学走路
这套架构的训练也很有意思,分三步走,顺序不能乱:
- 对齐阶段。冻结 LLM 和两个编码器,只训练两个 adapter(投影层)。目的是让 SigLIP 的连续向量和 VQ 的离散代码,各自学会翻译成 LLM 能听懂的”母语”。
- 联合预训练。解锁 LLM,冻结编码器。LLM 开始同时阅读”图像+文本”与”图像代码+文本”两类语料,在理解与生成之间切换。这一段需要对注意力掩码做特殊设计,防止两条路径的 token 在注意力层互相串味。
- 微调。把理解分支的分辨率从 256 提到 384,单独精调 adapter。生成分支保持原状。
我最初读论文时最不理解的就是第一步:为什么要先冻结 LLM,只训两个小小的 adapter?后来想通了——这像国家队合练之前,先让新人单独跑一个月百米直道。如果第一天就全队对抗,新人跟不上节奏,还可能把老队员的步点带乱。先让每个模块在自己的轨道上站稳,再谈融合,反而更快。
效果与代价:理解能打,生成够用,学费不便宜
客观说,Janus 在统一模型里是相当能打的。理解基准 MMBench 上,Janus 拿到 76.3,把 Emu3 和 Chameleon 甩开一截;在 COCO 图像生成测试里,FID 从统一模型动辄二十几的水平直接压到个位数。随后的升级版 Janus-Pro 又换上了 7B 的 LLM,在文生图评测 GenEval 上拿到 0.80,已经能和参数大数倍的专用扩散模型掰手腕。
但代价必须认。头一个是算力双倍:一张图进来,要分头过两个编码器,理解一遍、生成一遍,比单编码器方案耗不少。第二个是生成质量的天花板,被 256 个离散 token 锁死——细节一旦落在 token 网格之外,就再也找不回来了。Janus-Pro 已经很强,但跟顶级扩散模型比复杂光照、精细纹理,还是差着段位。第三个,也是最要紧的:两条路径彼此平行,没有来回。人类的”看懂”和”画出来”之间有反馈回路——边画边看,边看边改。Janus 的理解结果没法回流指导生成。所以严格讲,它长着两个头,而不是通了双向。
但这恰恰是它最值得琢磨的地方:它承认了分工的必要性。DeepSeek 用 Janus 这个神做名字,大概也是想说:真正的门神,从来不只有一张脸,但永远清楚自己正在朝哪一边看。
对了,如果你看完想自己折腾一下,代码在 官方 GitHub,README 写得还算清楚。想啃原理,建议直接读论文原文,比任何解读都省事。
原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/399.html