先破坏,再撤销破坏:一种生成方式
你已经知道语言模型如何生成:它一遍遍预测下一个词元,把概率分布变成文章。图像生成走的是一条更奇怪、乍听几乎反过来的路。今天的主流做法是[[diffusion-model|扩散模型]],它的核心想法是:与其学会*画*出一张图,不如学会*清理*一张图。训练一个网络从轻微损坏的图像中去掉一点噪声,再把这门本事接连用上几千次,就能把纯粹的雪花点变成一张照片。
它的训练设置妙在完全自监督,根本不需要任何人工标注。取一张真实图像,加进一撮量好的随机高斯噪声,再问网络:*我刚加的是什么噪声?* 既然是你加的,你就知道确切答案——监督目标白来。在从几乎只有几点斑到完全雪花的每一个损坏程度上都这么做,网络就靠辨认「什么不该在那儿」,渐渐学会了「真实图像长什么样」的形状。这个加噪方向叫前向过程;模型真正学会的清理方向叫逆向过程。
要造一张全新的图,你从纯噪声起步——一屏不像任何图像的随机雪花——再把学到的清理步骤一连跑上许多次。每一步都把雪花往「说得通」的方向轻推一丝,足够多步之后,一张连贯的图像就析出了,像一张反向显影的拍立得。关键在于结果是*全新*的:它不是从数据库里检索出来的,也不是训练图片的拼贴,而是从模型吸收的那个分布里抽取的一个新样本——这正是扩散之所以是生成式方法、而非查表的原因。
为噪声掌舵:文本到图像与潜空间扩散
把噪声清理成*某张*说得通的图已经很厉害了,但 Stable Diffusion 或 DALL·E 这类工具真正的魔力,在于你能说出你想要什么。这就是[[text-to-image|文本到图像]]生成,机制叫条件化:在每一个去噪步骤,网络拿到的不只是带噪图像,还有你那段提示词的编码。于是去噪器不再只是朝「任何真实图像」推,而是朝「一张与*这些词语*相符的真实图像」推。这段文本编码通常来自一个对比训练的视觉—语言模型,正是下一节要见到的那座桥。
这里有个现实的卡点:一张高分辨率图像有数百万像素,直接在全部像素上跑几千次去噪贵得吓人。让图像生成便宜到能在笔记本上跑的解法,是[[latent-diffusion|潜空间扩散]]。不在原始像素空间里做扩散,而是先把图像经一个自编码器挤进一张小得多的潜网格——一段保留有意义结构、丢掉像素级琐碎细节的压缩编码。整套加噪—去噪的舞蹈都在这个小小的潜空间里完成,最后一刻才把成品潜编码解码回全分辨率像素。
真正干去噪活的主力,通常是一个 [[u-net|U-Net]]——就是你在视觉那一级见过用于分割的那种「带捷径的编码器—解码器」形状。它先下采样再上采样的对称路径,让它能在一趟里同时琢磨粗略布局(「一只狗,居中,朝左」)和精细纹理(「一根根毛发」),而跳跃连接则不让锐利的细节在压缩中丢失。更新的系统会把 U-Net 换成 transformer 骨干,但「条件化加去噪」这套配方不变。
noisy = pure_noise
for t in reversed(range(T)): # many denoising steps
pred_noise = unet(noisy, t, text_embedding)
noisy = step_back(noisy, pred_noise, t) # remove a little
image = decode(noisy) # latent -> pixels让词语与像素共享同一个空间
一个在像素上训练的模型,怎么会懂「一只柯基宇航员」这句话?把它们连起来的结缔组织,是[[multimodal-model|多模态模型]]——它把不同种类的输入(文本、图像、音频)映射进同一个共享表示,使相关的事物无论来自哪种感官都落在彼此附近。标志性的例子是 [[clip-vision-language|CLIP]]。它在从网上抓来的数亿个图—文配对上训练,目标很简单:让一张图像的嵌入靠近它真正配文的嵌入,而远离其他图像的配文。
那套对比训练就是全部的诀窍。训完之后,一张海滩的图与「阳光沙滩」这几个字,会落在共享空间里几乎同一个地址,而「雪山」则落得老远。一旦词语与图像共用坐标,你就白得到一堆好处:零样本分类(把一张图的嵌入与若干候选标签词的嵌入比一比——无需任何针对任务的训练)、按描述搜图,以及上一节里为扩散模型掌舵的那个文本条件信号。CLIP 正是文本到图像系统知道「宇航员」该长什么样的原因。
同样的想法远不止用于图像。音频可以转成声谱「图」用同样的方式嵌入;视频再添一根时间轴;甚至蛋白质结构和表格数据都能被投射进共享空间。这套配方惊人地统一:为每种模态挑一个编码器,训练时让意思相同的事物落到一处,于是一个模型忽然就能在不同感官之间翻译。正是这种统一——通往同一个房间的不同扇门——才是人们说一个模型真正*多模态*,而非只是给文本模型硬接上一句图像配文,所指的意思。
基础模型:一个底座,许多活儿
退一步看,贯穿整级台阶的一个模式便豁然聚焦。语言模型、CLIP 和扩散模型都共用一套方法:在一大堆几乎没标注的数据上、用自监督目标训练一个超大网络,再把这同一个底座适配到一大群下游任务。这样被使用的模型,就叫[[foundation-model|基础模型]]——这个词命名的是*角色*,而非架构。同一个训好的 CLIP,仅仅靠被指向不同的活儿,就能化身分类器、搜索引擎和扩散方向盘。
这也是为什么最前沿的系统越来越默认就是多模态的。ChatGPT 这类产品背后的前沿系统,不再把文本模型和图像模型分别关在不同盒子里;它们通过同一个网络吃进文本、图像和音频,也能产出其中好几种。基础模型的触角还远伸出聊天之外——它们折叠蛋白质、预报天气、判读医学影像。这个时代的教训,与其说是「为每个问题造一个聪明模型」,不如说是「造一个宽广的底座再去适配它」——这种直觉有时被概括为:让规模和通用方法来挑重担。
值得把这套*为何*奏效说清楚,因为诚实的答案有一部分是「我们并不完全清楚」。从经验上看,当你把数据、参数和算力一起做大,性能会平滑而可预测地提升——这就是悄悄支撑整个领域的[[scaling-laws-capability|规模律]]。但这些定律描述的是损失下降,而非理解上升;它们是一种观察到的规律性,而非对任何具体能力的保证,更只字未提触及人类级推理。把它们当作一条可靠的工程趋势,而不是一则预言。
这些模型能做什么,又不能做什么
人们很容易把一张惊艳的生成图过度解读为「理解」的证据。扩散模型学到的,是一张关于「图像通常长什么样」的极其丰富的统计地图——但它没有任何关于物理、解剖或事实的模型。这就是为什么手曾经长出六根指头、图里的文字变成乱码、倒影违背几何:模型匹配的是「看上去说得通的像素」之*貌*,而不是在对一个世界做推理。同样的告诫也适用于多模态聊天模型,它会信誓旦旦地描述图里根本没有的东西——这正是你在大语言模型那一级见过的幻觉的视觉表亲。
这里也有实实在在的伦理分量,它们值得被平实地点名,而不是恐慌或含糊带过。这些系统是在海量抓取的人造图像与文本上训练的,这就给那些作品被卷进数据堆里的创作者,留下了关于同意与版权的未决问题。同一种让艺术工具令人愉悦的生成能力,也让逼真伪造真实人物变得廉价可得。这一切都不需要模型怀有恶意或具备「智能」——它们只是触角广阔的寻常工具,责任落在人们如何构建与部署它们之上。