作为一个刚接触多模态模型的小白,最近拜读了一篇关于多模态架构思考的文章“闭门造车”之多模态思路浅谈(一):无损输入 - 科学空间|Scientific Spaces,里面的观点既颠覆了我对“多模态就是堆显卡、用Transformer”的固有认知,也让我对图像生成和多模态的结合有了更清晰的理解。结合自己的消化和梳理,写下这篇博客,既是总结也是和同样入门的小伙伴们交流~
先跟大家坦白,我之前一直觉得多模态模型没什么复杂的,不就是把文本、图像凑到一起,用强大的Transformer模型“大力出奇迹”吗?直到看完文章才发现,事情远比我想象的要复杂,尤其是图像生成这一块,藏着很多底层的难题。
一、先搞懂核心问题:为什么图像生成比文本生成难?
文章最让我恍然大悟的一点,就是区分了文本生成和图像生成的本质差异——两者的建模逻辑完全不同,这也是多模态难的核心原因之一。
我们先看文本生成:不管是早期的n-gram模型,还是现在的GPT、Seq2Seq,核心都是建模一个条件概率 ,简单说就是“根据前面的词,预测下一个词”。而文本的每个词都来自有限的词表,本质上是离散变量,建模这种概率就相当于做分类任务,用神经网络+Softmax就能很好地拟合,这也是文本生成有明确、统一路线的原因,哪怕模型从LSTM换成Transformer,核心逻辑没变。
但图像生成不一样。我们通常把图像看成连续变量(比如每个像素的取值是0-255的实数,可视为连续变化),这时候再想建模条件概率,就变成了建模“概率密度”——概率密度有个硬性要求:非负且积分等于1。可除了正态分布,我们很难写出其他满足这个条件的函数,而单一的正态分布又不足以拟合复杂的图像分布。
简单总结就是:神经网络能拟合任意函数,但不一定能拟合任意概率密度。这就是图像生成没有“标准路线”,出现VAE、GAN、Flow、Diffusion等多种方法的根本原因——大家都在想办法“绕开”直接建模连续变量概率密度的难题(除了Flow模型)。
二、图像生成的“离散之路”:看似可行,却有硬伤
既然连续变量建模这么难,那能不能把图像变成离散的,套文本生成的框架来做?这确实是目前的主流思路,也是我最开始能想到的办法,但它的问题也很突出。
其实图像本身就是离散的——一幅n×n的RGB图像,本质上是3n²个0-255的整数,相当于一个长度为3n²、词表大小为256的“长句子”。早期的PixelRNN、PixelCNN就是这么做的,直接在像素空间做自回归生成,但最大的问题是:序列太长,生成太慢。
比如一张256×256的图片,序列长度就有3×256×256≈20万,要生成这张图,就得自回归解码20万步,哪怕现在Long Context技术进步了,这个成本也太高,生成速度根本无法满足实际需求。
为了解决这个问题,人们想到了“先压缩,后生成”——用AE(自编码器)压缩图像序列,再在压缩后的空间生成,生成后再解码恢复成图像。但要套文本生成的框架,压缩后必须保持离散性,这就有了VQ-VAE、VQ-GAN(相当于“图像Tokenizer”),它们能把序列长度大幅缩短(比如256×256压缩到32×32,序列长度缩小48倍),但代价是严重的信息损失。
文章里算过一笔“信息账”:要实现无损压缩,压缩后的序列长度和词表大小需要满足一定条件,而目前所有图像Tokenizer的词表大小都远达不到要求,导致重构后的图像虽然能保留整体语义,但局部细节完全丢失——这就意味着,基于这种方法,根本无法完成OCR这类依赖细节的图文任务。
另外,图像是二维特征(有上下、左右两个维度),文本是一维特征(只有左右维度),用自回归生成图像时,还得人工设计生成方向(比如先左后右、先上后下),这不仅增加了超参,也不够“端到端”,不够优雅。
三、回归连续空间:扩散模型成了最优选择
既然离散化的路有硬伤,那还是得回到连续空间。文章提到,在“无损压缩”的要求下,连续空间生成的唯二选择就是Flow模型和扩散模型。
Flow模型的优势是可逆性,能将标准高斯分布映射为目标图像分布,但为了保证可逆性,它的架构被做了很多限制,可能会影响效果上限(目前也没有Flow模型做出惊艳效果的案例)。所以,剩下的最优选择就是扩散模型。
这里插一句我对扩散模型的简单理解(小白版):扩散模型的核心是“加噪-去噪”——先逐步给原始图像加噪声,直到图像变成纯噪声;然后训练模型学习“去噪”,也就是从噪声中恢复出原始图像。生成时,就从纯噪声开始,一步步去噪,最终得到清晰的图像。
扩散模型的优势很明显:它的熵源是高斯噪声,原则上可以无穷无尽,而且生成过程是并行的,速度比自回归快很多;同时,它也能导出可逆的ODE方程,满足无损压缩的潜在需求。
四、多模态生成的可能方案:文本+扩散的组合
文章的核心构思的是:如何将文本生成和扩散模型结合,实现真正的多模态生成(输入输出都可以是图文)?作者给出了一个很直观的方案,结合我自己的理解,拆解如下:
- 训练阶段:输入文本和加噪后的图像。文本部分的训练目标还是常规的“预测下一个token”;图像部分的训练目标是“预测原始图像(或噪声)”,本质上就是扩散模型的去噪训练。
- 生成阶段:文本部分还是逐token递归生成,直到生成一个特殊标记(比如[IMG]),触发图像生成;然后并行输入若干噪声向量,按照扩散模型的去噪步骤,快速生成图像(目前加速技术下,10步左右就能完成)。
这个方案的关键是:图像生成部分是并行的,不需要人工设计生成方向,避免了自回归的缺点;同时,文本和图像的交互都交给模型自行处理,更符合端到端的理念。
值得一提的是,作者还提到Meta的Transfusion、Show-o等模型,和这个方案思路基本一致,只是多了一些细节优化(比如Transfusion加了Latent Encoder),这也印证了这个思路的可行性。
五、关键验证:Patch输入的扩散模型真的可行吗?
这个方案有个前提:需要用“Patch输入+Transformer”的组合做扩散模型——也就是把原始图像分成一个个Patch,直接输入Transformer,而不是用U-Net(传统扩散模型的主流架构)。之前有说法认为扩散模型依赖U-Net,所以作者自己做了实验验证。
实验任务是CelebA-HQ数据集的图像生成(分辨率64×64和128×128),模型用的是Pre Norm的Transformer(主干是GAU,不是常见的MHA),位置编码用2D-RoPE,时间Embedding直接加到Patch输入上。作者还开源了代码(github.com/bojone/Kera…),有兴趣的小伙伴可以去看看。
实验结果很关键:这种基于Transformer+Patch输入的扩散模型,确实能正常收敛,生成效果和普通U-Net差不多(肉眼判断),但有一个缺点——需要更多的训练步数。比如单卡A800训练,128×128分辨率下,普通U-Net1-2天就能出可看的结果,而Transformer架构需要10多天。作者推测,这是因为没有了CNN的Inductive Bias(归纳偏置),模型需要花更多时间学习图像的先验知识。
不过这对多模态大模型来说,可能不是大问题——毕竟LLM本身就需要海量的训练步数,多花一些时间换更高的保真度,还是值得的。
六、小白总结:多模态的核心的是“尊重差异,合理结合”
看完这篇文章,我最大的收获不是记住了多少名词(VQ-VAE、扩散模型、GAU这些还需要慢慢消化),而是理解了多模态模型的设计逻辑——它不是简单的“文本模型+图像模型”拼接,而是要先搞懂文本和图像的本质差异,再找到能兼顾两者优势的结合方式。
作者的核心思路其实很朴素:文本用成熟的自回归框架,图像用能兼顾无损和速度的扩散模型,两者直接输入原始形式(文本token、图像Patch),让模型自行处理交互,避免信息损失和特征孤立。虽然很多想法还没经过大规模实践验证,但给我们这些小白提供了一个清晰的思考方向。
最后想说,多模态确实很难,既要解决图像生成的底层难题,也要兼顾文本和图像的协同,但正是这种“难”,才让它有无限的探索空间。作为小白,我们不用急于吃透所有细节,先理解核心逻辑,再慢慢结合代码和实验去感受,相信会有更多收获~