我输入一句"一只戴眼镜的橘猫在喝咖啡",十几秒后图片就出来了,猫的样子还挺对。挺魔幻的。但如果有人问你"AI 到底是怎么画出这张图的",多数人答不上来,只能含糊说"AI 学过很多图"。
这篇文章我试着把生图模型的原理讲清楚。不用任何数学,用几个生活类比就够了。
先说它不是什么:不是拼贴,不是检索
很多人第一次听说 AI 画图时的反应是"它是不是收集了网上所有图,然后找一张最像的给你?"不是。模型里有几十亿个参数,全是数字,没有一张原始图片存在里面。你也从模型文件里翻不出任何一张完整的猫。
它学到的东西更像是"规律"。比如羽毛的边缘朝哪个方向过渡、光从哪边来的时候影子该往哪边偏。这些规律以参数的形式记录着,生成的时候是从零开始算出来的,所以 AI 画出来的猫不是任何一只被拍过的猫。
这里顺带说清楚另一个词:训练。给模型「看」几亿张图配文字,通过海量练习调整参数,这个过程非常贵,做一遍要花成百上千块 GPU 天。我们平时用的时候叫生成或推理,速度和训练完全是两码事。
核心就一个动作:把噪声变回图
现在主流的生图模型(扩散模型,Diffusion Model)核心是这么一个游戏:
训练时,拿一张真实图片,加一点噪声,让模型猜加进来的那部分噪声长什么样。猜完再加一点,再猜。噪声比例不断加大,从"微微发糊"一直到"完全是雪花屏"。模型练了几亿次之后,一张纯噪声的图它也能看出"这里面本来应该有一张图"。
生成时流程反过来。从一张纯噪声出发,模型判断"这里应该往猫脸的方向清除一点,那里应该往杯子里的咖啡清除一点",去掉一点噪声,再来一轮,重复几十次,图片就一步步浮现出来。
我的理解方式:像雾里的人影一点点变清晰。模型每一步都在回答同一个问题,"画面里接下来该出现什么"。
论文两条。2020 年 Jonathan Ho 等人的《Denoising Diffusion Probabilistic Models》确立了这套去噪思路,我写这篇前重新过了一遍 arXiv 摘要,标题里那个 Denoising 就是去噪。次年那篇《High-Resolution Image Synthesis with Latent Diffusion Models》讲怎么省算力,就是下面这节。
潜空间:生图比想象快的真正原因
定点去噪有个问题:一张 1024×1024 的图有上百万个像素,每个去噪步骤都要处理这么多数字,慢,而且贵。
Stability AI 那篇论文的做法是压缩。先训练一个压缩器,把图片压到大约八分之一到十六分之一的尺寸,1024 的图压成 128。去噪全在这个压缩后的小图上进行,干完再解码回原尺寸。这就是 Latent Diffusion Model(LDM),潜空间指的就是这个压缩后的空间。Stable Diffusion 还用了 CLIP 这类文本编码器,把文字描述变成模型能理解的引导信号。
再往深一步,2022 年有团队把去噪路线换成了 Rectified Flow。名字听着劝退,思路其实直白:把纯噪声和真实画面当成两点,让模型沿着一条直线路径从噪声那头走到图像那头。直线是最短路径,一步走得更远,出图步数能大幅减少。Stable Diffusion 3 和后面不少新模型用的都是这一路。国内几个新模型出图快,多少也和这条技术路线的迭代有关。
为什么提示词里加"细节"会真的出现细节
去噪的时候,同一片模糊区域可能清成"绿草"也可能清成"柏油路",模型怎么定?文本提示词就是这个方向的指引。提示词相当于给每个去噪步骤发了份说明,告诉它这一轮该往哪个方向去噪。
这也解释了几个日常体感。为什么步骤数参数(很多工具里叫 Steps 或采样步数)越大,图越精细但有边际递减;为什么同样的提示词每次出图不一样,因为起点是一张随机的纯噪声,起点不同路径就不同;为什么提示词里的关键词权重高了,模型往那个方向去噪的"力度"就更大。
几个常见疑问
AI 会画错吗?会,而且错起来和你想的错法不一样。生成不是查表,是逐步推演,推到某一步方向歪了就是一幅整体不对的画。比如手指莫名多一截,就是手部区域的去噪方向走岔了。
要跑多少步才出图?老模型二十到五十步是常事,Rectified Flow 路线的新模型可以压到几步,一步出图的也有研究者在做。这就是不同生图工具速度差异的主要来源之一。
提示词里塞一百个词有区别吗?有,但不是堆得越多越好。多出来的词也会影响每一步的去噪方向,相互抢"注意力",结果就是画面里各种元素哪个都可能出现,反而杂乱。把关键信息放前面,去掉凑数的词,多数时候效果更好。
最后说两句
把扩散模型想明白之后,我对生图模型多了点平常心。它不是魔法,是训练、去噪、压缩空间三件事的组合,每一件单独拆出来都不玄。能力边界也很明确:训练数据里没见过的东西,它多半画不好;训练数据对某类画风的偏好,它就是会有偏好。知道这些,用的时候就不会被"AI 有神奇创造力"之类的说法带跑,而是清楚哪些可以在提示词里调,哪些花再多 token 也调不动。